Запускайте разные задачи в зависимости от хоста через playbook

Я довольно новичок в ansible, пожалуйста, будьте осторожны, если это очевидный вопрос. У меня есть playbook, который я использую для первоначальной настройки/защиты систем CentOS после установки. У меня есть 3 разные группы серверов, и все они настраиваются в основном одинаково, с небольшими отличиями в файлах конфигурации. В частности, каждая группа серверов должна получить свою уникальную конфигурацию iptables. Как я могу использовать один плейбук для отправки iptables1 в hostgroup1, iptables2 в hostgroup2 и iptables3 в hostgroup3 и при этом выполнять все остальные задачи на каждом сервере?

---
 - name: Initial OS configuration
   hosts: all
   remote_user: myuser
   sudo: yes
   tasks:
    - name: Deploy sshd_config
      copy: src=/opt/ansible/files/sshd_config dest=/etc/ssh/sshd_config owner=root group=root mode=600
      register: sshd

    - name: Restart sshd service
      service: name=sshd state=restarted
      when: sshd.changed

    # HELP HERE
    - name: Deploy iptables
      copy: src=/opt/ansible/files/iptables1 dest=/etc/sysconfig/iptables owner=root group=root mode=600
      register: iptables

    - name: Restart iptables service
      service: name=iptables state=restarted
      when: iptables.changed

    - name: Set bash history timestamp
      copy: src=/opt/ansible/files/history.sh dest=/etc/profile.d/history.sh mode=644 owner=root group=root

    - name: Install screen
      yum: name=screen state=latest

person Adam    schedule 12.03.2015    source источник


Ответы (2)


один из способов сделать это — использовать переменные в вашем инвентаре:

[group1:vars]
iptable_path=/opt/ansible/files/iptables1

[group2:vars]
iptable_path=/opt/ansible/files/iptables2

[group3:vars]
iptable_path=/opt/ansible/files/iptables3

Затем в плейбуке:

...
- name: Deploy iptables
  copy: src={{ iptable_path }} dest=/etc/sysconfig/iptables owner=root group=root mode=600
  register: iptables
...
person 0xFC    schedule 12.03.2015
comment
Есть ли способ получить доступ к имени группы из доступных переменных? - person Adam; 12.03.2015
comment
Кажется, нет переменной, относящейся к текущей группе. Ближе всего это group_names, перечисляющие все группы, к которым принадлежит текущий хост. См. docs.ansible. .com/ - person 0xFC; 12.03.2015

Вот что у меня получилось, используя предложение «group_names» от 0xFC:

---
 - name: Initial OS configuration
   hosts: all
   remote_user: myuser
   sudo: yes
   tasks:

    ...

    - name: Deploy iptables to group1
      copy: src=/opt/ansible/files/iptables1 dest=/etc/sysconfig/iptables owner=root group=root mode=600
      register: iptables
      when: "'group1' in group_names"

    - name: Deploy iptables to group2
      copy: src=/opt/ansible/files/iptables2 dest=/etc/sysconfig/iptables owner=root group=root mode=600
      register: iptables
      when: "'group2' in group_names"

    - name: Deploy iptables to group3
      copy: src=/opt/ansible/files/iptables3 dest=/etc/sysconfig/iptables owner=root group=root mode=600
      register: iptables
      when: "'group3' in group_names"

    - name: Restart iptables service
      service: name=iptables state=restarted
      when: iptables.changed

    ...
person Adam    schedule 13.03.2015
comment
Спасибо за ваш вклад, я искал это. - person Ortomala Lokni; 20.07.2017