是否可以在 运行 时间定义一个 var 并使用它来访问另一个 var?

Is possible define a var at run-time and use it to access another var?

我不确定这是否可能。

我想在 运行 时定义一个 var 并用它来访问另一个 var(在文件、playbook.. 中定义)。

  1. 在 运行 时定义:

    typeConfig (possible values: "in_config" or "out_config")
    
  2. 剧本中定义:

    in_config:
      url_config: http://localhost/configuration
    
    out_config:
      url_config: http://config.pi.dyn-dns.org/configuration
    

我需要解决类似的问题:

{{ {{ typeConfig }}.url_config }}

我试试:

- name: Mytest
  hosts: all
  gather_facts: false
  sudo: yes
  vars:
    - in_config:
         url_config: http://localhost/configuration
    - out_config:
         url_config: http://config.pi.dyn-dns.org/configuration
  tasks:
     - set_fact:
          typeConfig: in_config
     - name: Value in_config.url_config
       debug: msg=" {{in_config.url_config}}"

     - name: Value out_config.url_config
       debug: msg=" {{out_config.url_config}}"

     - name: Value typeConfig
       debug: var=typeConfig

     - debug: msg="{{ {{ typeConfig }}.url_config }} "

实际结果

task path: /home/nor/gitrepos/iiot-iac/ansible/myUnitTest.yml:19 fatal: [node1]: FAILED! => { "failed": true, "msg": "template error while templating string: expected token ':', got '}'. String: {{ {{ typeConfig }}.url_config }} " } " }

您可以使用以下方式访问该值:

- debug:
    msg: "{{ vars[typeConfig].url_config }}"

记住{{ ... }}不是写变量名的方式,而是开始一个Jinja2表达式。并且在查询值时,在 Ansible 中使用 Jinja2 表达式引用变量,因此使用 {{ {{ ... }} }} 没有意义。