Ansible-当数组已经具有变量时,无法向数组中的每个项目添加前缀“ ansible_hostname”

时间:2020-06-16 14:48:59

标签: ansible ansible-facts

我试图将'ansible_hostname'作为前缀添加到数组中的每个项目,但是得到两个不同的结果。

  • 当数组是静态的,没有任何变量时,将添加主机名。
  • 当数组声明了一个变量时,事实'ansible_hostname'不会得到解析,而是以字符串形式传递。

我用变量声明了数组,在不使用循环的情况下传递主机名时需要帮助。

方案1:

  - name: test_array
    set_fact:
     test_array: ["This is test1 {{ansible_hostname}}", "This is test2"]     
  - set_fact: 
      test_fact: "{{ test_array | map('regex_replace', '^(.*)$', ' {{ansible_hostname}}, \\1') | join('\n') }}" 

output:
"test_fact": " {{ansible_hostname}}, This is test1 control\n {{ansible_hostname}}, This is test2"

方案2:

 - name: test_array
    set_fact:
     test_array: ["This is test1", "This is test2"]    
  - set_fact: 
      test_fact: "{{ test_array | map('regex_replace', '^(.*)$', ' {{ansible_hostname}}, \\1') | join('\n') }}" 

output:
"test_fact": " host, This is test1 control\n host, This is test2"

1 个答案:

答案 0 :(得分:2)

您不能在jinja2扩展中使用jinja2扩展。您必须使用+运算符将主机名与其​​余的regexp替换连接起来:

- set_fact: 
    test_fact: "{{ test_array | map('regex_replace', '^(.*)$', ansible_hostname + ', \\1') | join('\n') }}"