在我的业务流程文件中,如下定义变量“ secret_name”和“ vault_name”:
- hosts: host1
roles:
- role: launch-playbook
playbook_name: '{{playbook_dir}}/{{Pos_playbook}}'
secret_name:
vault_name:
如您所见,secret_name和vault_name是未定义的(无值)。但是,当我打印出该命令时,它会发现它像secret_name和vault_name一样存在。
这是我运行的命令:
- set_fact:
execution_command: "ansible-playbook -i {{inventory_file}} {{playbook_name}} {% if secret_name is defined %}
-e {{secret_name}} {% else %} {% endif %} {% if vault_name is defined %} --vault-password-file {{vault_name}} {% else %} {% endif %}"
这是输出:
ok: [web1] => {
"msg": "The execution_command is !ansible-playbook -i /fndusers/fnd/users/pkiadm/itay/backing-services/tbs_orchestration/playbook/inventory_itay.yml /fndusers/fnd/users/pkiadm/users/tanya/t2/PostgreSQL/pg_orchestartion.yaml
-e --vault-password-file !"
}
“-e”和“ --vault-password-file”不应该存在!!因为秘密和保险库的值没有定义!但它会视其存在而将其视为“。”。
我找不到我的语法/逻辑有什么问题吗?
Q:“它们(变量)存在并且它们的值是”“。我找不到语法/逻辑的问题吗?”
A:语法正确。存在类型为“ NoneType”的对象。例如
vars:
vault_name:
tasks:
- debug:
msg: "Variable vault_name: {{ vault_name }}"
when: vault_name is defined
给予
"msg": "Variable vault_name: "
正确的逻辑可能是测试变量是否为非空字符串。例如
- debug:
var: vault_name
when:
- vault_name is string
- vault_name|length > 0
这将转换为Jinja
{% if (vault_name is string) and (vault_name|length > 0) %}