Syntax Ansible剧本中的语法和逻辑

Syntax Ansible剧本中的语法和逻辑,syntax,ansible,logic,Syntax,Ansible,Logic,在编排文件中,我定义变量“secret\u name”和“vault\u name”,如下所示: - hosts: host1 roles: - role: launch-playbook playbook_name: '{{playbook_dir}}/{{Pos_playbook}}' secret_name: vault_name: 如您所见,secret_name和vault_name未定义(无值)。但是,当我打印出命令时,它会发现它像sec

在编排文件中,我定义变量“secret\u name”和“vault\u name”,如下所示:

- hosts: host1
  roles:
   - role: launch-playbook 
     playbook_name:  '{{playbook_dir}}/{{Pos_playbook}}'
     secret_name:
     vault_name:
如您所见,secret_name和vault_name未定义(无值)。但是,当我打印出命令时,它会发现它像secret\u name和vault\u 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密码文件”不应存在!!因为未定义机密和vault值!!但是,他们认为他们只是存在,他们的价值观是“。” 我找不到我的语法/逻辑有什么问题

Q:“它们(变量)存在,它们的值为”“。我找不到我的语法/逻辑有什么问题?”

答:语法是正确的。存在“非类型”类型的对象。比如说

  vars:
    vault_name:
  tasks:
    - debug:
        msg: "Variable vault_name: {{ vault_name }}"
      when: vault_name is defined
    - debug:
        var: vault_name
      when:
        - vault_name is string
        - vault_name|length > 0
给予

正确的逻辑可能是测试变量是否为非空字符串。比如说

  vars:
    vault_name:
  tasks:
    - debug:
        msg: "Variable vault_name: {{ vault_name }}"
      when: vault_name is defined
    - debug:
        var: vault_name
      when:
        - vault_name is string
        - vault_name|length > 0
这将转化为Jinja

{% if (vault_name is string) and (vault_name|length > 0) %}