Могу ли я получить ips всех хостов в файле инвентаря при запуске playbook с флагом --limit? - PullRequest
1 голос
/ 18 марта 2019

Я пытаюсь применить правила 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

1 Ответ

1 голос
/ 19 марта 2019

Я думаю, что ваш шаблон зацикливается на groups[all] хостах, и это включает ВСЕ хосты, а не только ограниченные. А поскольку вы ограничиваете некоторые хосты, ansible не собирает факты для остальных, и ваш шаблон не может найти ipv4 для остальных хостов.

Вы пробовали ansible_play_batch или ansible_play_hosts? https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html

...