2

我有一个简单的角色,它只是获取剧中所有主机的 IP/主机名,并更新 /etc/hosts 文件。

- name: Add the inventory into /etc/hosts
  lineinfile:
    dest: /etc/hosts
    regexp: '.*{{ item }}$'
    line: "{{ hostvars[item]['ansible_default_ipv4']['address'] }} {{item}}"
    state: present
  when: hostvars[item]['ansible_facts']['default_ipv4'] is defined
  with_items:
    - "{{ groups['all'] }}"
  become: true

我也想对此进行测试,对于分子。我对分子/testinfra 有点熟悉,并且知道如何使测试循环,以及如何检查文件的内容等。我不知道如何从这个测试中获取 ip/主机名,然后使用它们来验证它们存在于 /etc/hosts 文件中。

v = host.ansible.get_variables()

我想这将包含我需要的信息,但我看不到从分子/testinfra 打印出这些信息的方法,所以我实际上可以看到它。如果我能够真正看到 IP,我知道我可以像下面这样使用它们:

def test_conf_custom(host):
    conf = host.file(
        '/etc/hosts'
        ).content
    expected = [
        b'hostname',
        b'443',

    ]
    for line in expected:
        assert line in conf
4

0 回答 0