在ansible中评估动态变量名称

Jor*_*sov 7 dynamic-variables ansible

我有vars,我把这样的东西:

vars/main.yml
hello_port: 80
world_port: 81
Run Code Online (Sandbox Code Playgroud)

在我的ansbile文件中,我加载变量

vars_files:
  - ./vars/main.yml
Run Code Online (Sandbox Code Playgroud)

这是我初始化m_name的方式:

 - name: set_fact
     set_fact:
        m_name:
          - 'hello'
          - 'world'
Run Code Online (Sandbox Code Playgroud)

然后我使用with_items进行迭代任务:

 - debug:
      msg: "{{ (item + '_port') }}"
   with_items: "{{ m_name }}"
Run Code Online (Sandbox Code Playgroud)

但我得到了输出

hello_port
world_port
Run Code Online (Sandbox Code Playgroud)

不是他们的价值观


好吧,我发现如果我使用debug var它正在工作.但是如果我想把这个表达式"{{ (item + '_port') }}"放在shell任务中的一个例子中,它就不会对它进行评估.有没有办法评估动态创建的变量名称 - 获取值?

小智 14

https://docs.ansible.com/ansible/2.5/plugins/lookup/vars.html

- name: Show value of 'variablename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  vars:
    variablename: hello
    myvar: ename
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为您正在寻找:

{{ vars[item ~ '_port'] }}
Run Code Online (Sandbox Code Playgroud)

  • vars 没有记录,是一个内部实现细节。hostvars magic dict 或 vars 查找已记录在案,并在其他答案中。 (3认同)