Ansible set_fact 数组并从循环中填充它

pol*_*olx 2 ansible

我想创建一个数组并将数组中的值插入IP_TO_DNS到反向 IP 地址中。

这个想法是重构参数中给出的 IP 地址,以便稍后在我的代码中进行匹配。

代码

- name: create array reversed
  set_fact: reversed_ip=[]

- name: set convert ips from cli to matchable reversed ip
  set_fact: reversed_ip='{{ item | regex_replace('^(?P<first_range>\d{1,3})\.(?P<second_range>\d{1,3})\.(?P<third_range>\d{1,3})\.', 'named.\\g<third_range>.\\g<second_range>.\\g<first_range>')}}'
  with_items: '{{IP_TO_DNS}}'

- name: Match first block of results in path name
  debug: var=item
  with_items: '{{reversed_ip}}'
Run Code Online (Sandbox Code Playgroud)

输出

TASK [dns : set convert ips from cli to matchable reversed ip] *****************
ok: [10.1.10.5] => (item=10.1.10.1)
ok: [10.1.10.5] => (item=10.1.10.2)
ok: [10.1.10.5] => (item=10.1.10.3)

TASK [dns : Match first block of results in path name] *************************
ok: [10.1.10.5] => (item=named.10.1.103) => {
    "item": "named.10.1.103"
}
Run Code Online (Sandbox Code Playgroud)

看起来我的变量没有设置为数组,并且只填充了第一个值。

有任何想法吗 ?

小智 10

这是我使用的方法之一

vars:
   my_new_list: []
tasks:
 - name: Get list of elements from list_vars
   set_fact:
     my_new_list: "{{ my_new_list + [item] }}"
  with_items: "{{ list_vars }}"
Run Code Online (Sandbox Code Playgroud)

  • 如果您设置这样的事实:“my_new_list: "{{ my_new_list | default([]) | union([item]) }}"`,则不需要“vars:”部分。 (5认同)

tec*_*raf 5

您将相同的事实设置了 3 次,但它会被覆盖。

您应该注册输出:

- name: set convert ips from cli to matchable reversed ip
  set_fact: reversed_ip='{{ item | regex_replace('^(?P<first_range>\d{1,3})\.(?P<second_range>\d{1,3})\.(?P<third_range>\d{1,3})\.', 'named.\\g<third_range>.\\g<second_range>.\\g<first_range>')}}'
  with_items: '{{IP_TO_DNS}}'
  register: reversed_ip_results_list

- name: Match first block of results in path name
  debug: var=item.ansible_facts.reversed_ip
  with_items: '{{reversed_ip_results_list.results}}'
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个列表:

- debug: msg="{{ reversed_ip_results_list.results | map(attribute='ansible_facts.reversed_ip') | list }}"
Run Code Online (Sandbox Code Playgroud)