Ansible剧本中的语法和逻辑

问题描述 投票:0回答:1

在我的业务流程文件中,如下定义变量“ 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”不应该存在!!因为秘密和保险库的值没有定义!但它会视其存在而将其视为“。”。

我找不到我的语法/逻辑有什么问题吗?

syntax ansible logic
1个回答
0
投票

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) %}
© www.soinside.com 2019 - 2024. All rights reserved.