我目前只想从明显的事实中专门选择Windows适配器名称。 所以我的问题是我无法仅检索此值。
具有Winrm和Kerberos身份验证的Ansible 2.8.2_1正在服务器上运行。
我试图发行这本剧本:
- hosts: win_clients
gather_facts: true
strategy: free
tasks:
- name: Get Ansible network facts
debug:
msg: "{{ ansible_facts['interfaces'] }}"
,它工作正常,但我具有有关接口的所有信息。我只想要“ connection_name”。
当我将这一行放在剧本中时:
msg: "{{ ansible_facts['interfaces']['connection_name'] }}"
它在执行时显示此消息:
失败! => {“ msg”:“该任务包括带有未定义变量的选项。错误是:'列表对象'没有属性'connection_name'\ n \ n错误似乎出在'/ home / sopra / git / rnd -windows / automation / playbooks / Dns / test.yaml':第5行,第5列,但是\ n根据确切的语法问题,可能\ n在文件的其他位置。\ n \ n有问题的行似乎是:\ n \ n任务:\ n-名称:获取Ansible网络事实\ n ^这里\ n“}
我不明白,因为变量“ connection_name”定义正确。
有人可以帮我吗?谢谢。 祝你有美好的一天!
答案 0 :(得分:0)
如果要列出连接名称,请在下面使用,因为ansible_facts ['interfaces']是一个数组
- hosts: win_clients
gather_facts: true
strategy: free
tasks:
- name: Get Ansible network facts
debug:
msg: "{{ item.connection_name }}"
with_items:
- "{{ ansible_facts['interfaces'] }}"
答案 1 :(得分:0)
非常感谢您的支持。我确实解决了我的问题。 基本上,我的剧本包括如果发现一个(旧的)DNS IP,则更改DNS配置。
# tasks file for configureDnsServerAddresses
# Get the configuration state about DNS
# If one occurrence of 'old_dnsserver' is found...
- name: Get DNS configuration
win_shell: ipconfig /all | findstr {{ old_dnsserver }}
register: check_old_dns
changed_when: false
# '.rc' means the return code
failed_when: check_old_dns.rc != 0 and check_old_dns.rc != 1
# ... it will be replaced by 2 new ones
- name: Change the DNS only if the IP {{ old_dnsserver }} is found
win_dns_client:
adapter_names: "{{ item.connection_name }}"
ipv4_addresses:
- "{{ dnsserver1 }}"
- "{{ dnsserver2 }}"
# Array based on Ansible facts
with_items:
- "{{ ansible_facts['interfaces'] }}"
# Apply only if 'check_old_dns' is not empty, which means that the old DNS is found
when: check_old_dns.stdout | length > 0
此剧本是基于角色的,因此变量存储在“默认”文件夹中。 上面提到的代码旨在用于测试。