В задаче Ansible, как зарегистрировать переменную, чтобы я мог использовать ее в качестве контрольной инструкции в Template. Задачи являются:Необязательная переменная регистра в задаче и использовать ее в шаблоне
- name: Check if certificate file exists
stat: path=/etc/nginx/ssl/{{ sitename }}.pem
register: ssl_cert_check
- name: Create vhost from template
template: "src={{ vhost_conf }} dest=/etc/nginx/conf/vhost.conf"
В шаблоне виртуального хоста для listen 80
всегда доступен, и я хочу, чтобы добавить блок для listen 443
только тогда, когда сертификат доступен:
server {
listen 80;
........
}
{% if ssl_cert_check == True %} # This doesn't issue error but doesn't work either
server {
listen 443;
..............
}
{% endif %}
Когда я запускаю выше случае второй серверный блок не выполняется, это означает, что в конфигурации vhost печатается только серверное прослушивание 80.
Однако если удалить Истинную для if
заявления и добавить stat.exists
в шаблоне, то я получаю сообщение об ошибке:
# This issues error
{% if ssl_cert_check.stat.exists %}
server {
listen 443;
..............
}
{% endif %}
Ошибка является: "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'stat'
даже если я использовал модуль стата перед регистрацией переменного.
Есть ли другой способ передать переменную, определенную в Ansible task, и использовать ее в шаблоне Jinja2?
Значение, отображаемое на - debug: var=ssl_cert_check
задачи перед Create vhost from template
является:
"ssl_cert_check": {
"changed": false,
"msg": "All items completed",
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"invocation": {
"module_args": {
"checksum_algorithm": "sha1",
"follow": false,
"get_checksum": true,
"get_md5": true,
"mime": false,
"path": "/etc/nginx/ssl/abc.pem"
},
"module_name": "stat"
},
"item": {
........
},
"stat": {
"exists": false
}
}
]
}
Я обновил вопрос с помощью отладочного сообщения, пожалуйста, взгляните на него. –