Я пытаюсь применить правила iptable к набору хостов, где я хочу, чтобы все порты были открыты для хостов в определенной группе.Но я не могу запустить этот рецепт для всех хостов вместе в производственной среде.Поэтому я использую флаг --limit для запуска playbook.Но это не сработает, выдав следующую ошибку:
fatal: [test-vm1]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_default_ipv4'"}
файл инвентаря
[all]
test-vm1 ansible_ssh_host=10.x.x.x
test-vm2 ansible_ssh_host=10.x.x.x
test-vm3 ansible_ssh_host=10.x.x.x
my-playbook.yml
- hosts: all
become: yes
gather_facts: yes
roles:
- iptables
rules-list.j2
#Allow communication within hosts in a group
{% for host in groups['all'] %}
iptables -A INPUT -s {{ hostvars[host]['ansible_default_ipv4']['address'] }} -j ACCEPT
{% endfor %}
ролей / iptables / tasks / main.yml
- name: Prepare iptables rules
template: dest='/etc/sysconfig/iptable-config' src=rules-list.j2 owner=root group=root mode=0744
notify: save iptables rules
команда, которую я пытаюсь выполнить, is-
ansible-playbook -i inventory-file my-playbook.yml --limit test-vm1
Если я запускаю указанную выше команду без установленного флага, она работает без сбоев, т.е.
ansible-playbook -i inventory-file my-playbook.yml