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

时间:2017-04-26 10:20:22

标签: 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}}'

输出

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分: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}}'

或者如果你想要一个清单:

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

答案 1 :(得分:0)

这是我使用的方式之一

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

答案 2 :(得分:0)

您可以将默认的reversed_ip分配为列表并将该项目附加到列表中。

- name: set convert ips from cli to matchable reversed ip
  set_fact: reversed_ip='{{ reversed_ip |default([]) + [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}}'