无法检索有关Windows客户端的一些Ansible事实

时间:2019-07-17 10:11:43

标签: ansible

我目前只想从明显的事实中专门选择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”定义正确。

有人可以帮我吗?谢谢。 祝你有美好的一天!

2 个答案:

答案 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

此剧本是基于角色的,因此变量存储在“默认”文件夹中。 上面提到的代码旨在用于测试。