0

我不确定这是可能的。

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

  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 }} "

实际结果

任务路径:/home/nor/gitrepos/iiot-iac/ansible/myUnitTest.yml:19 致命:[node1]:失败!=> { "failed": true, "msg": "模板错误,而模板字符串:预期的令牌 ':',得到 '}'。字符串:{{ {{ typeConfig }}.url_config }} " } " }

4

1 回答 1

1

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

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

请记住,这{{ ... }}不是编写变量名的方法,而是启动 Jinja2 表达式。并且在查询值时,变量是使用 Ansible 中的 Jinja2 表达式引用的,因此使用{{ {{ ... }} }}没有意义。

于 2017-04-25T11:12:11.423 回答