我有一个简单的角色,它只是获取剧中所有主机的 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