Ansible первые базовые шаги Уроки Linux ч.2

Автор: | 30.01.2026

Ansible Условие when

Условие when в Ansible — это условное выражение, которое позволяет выполнять задачу только если выполнено определённое условие. Условие может быть основано на переменных, фактах, результатах предыдущих задач или других критериях.

Разделение playbook в зависимости от ОС дистрибутива, добавим ip сервера RedOs (rpm) в файл inventory, а в файл install_apache.yml фильтр по условию ОС Astra Linux

cd ~/ansible_tutorial
nano inventroy

ansible all -b -K -a "cat /etc/os-release"
ansible all -m setup -a "filter=ansible_distribution*" -b -K

nano install_apache.yml
---

- hosts: all
  become: true
  tasks:

  - name: update repository index
    apt:
      update_cache: yes
    when: ansible_distribution in ["Debian", "Astra Linux"]

  - name: install apache2 package
    apt:
      name: apache2
      state: latest      when: ansible_distribution == "Astra Linux"

  - name: add php support for apache
    apt:
      name: libapache2-mod-php
      state: latest
    when: ansible_distribution == "Astra Linux"

ansible-playbook --ask-become-pass install_apache.yml

TASK [update repository index] *********************************************************************************************************
skipping: [192.168.122.59]
ok: [192.168.122.202]
ok: [192.168.122.218]
ok: [192.168.122.152]

Добавим отдельные задачи в файл playbook установки пакетов для ОС RedOS,Centos
nano install_apache.yml
---

- hosts: all
  become: true
  tasks:

  - name: update repository index
    apt:
      update_cache: yes
    when: ansible_distribution in ["Debian", "Astra Linux"]

  - name: install apache2 package
    apt:
      name: apache2
      state: latest 
    when: ansible_distribution == "Astra Linux"

  - name: add php support for apache
    apt:
      name: libapache2-mod-php
      state: latest
    when: ansible_distribution == "Astra Linux"

  - name: update repository index Centos RedOS
    dnf:
      update_cache: yes
    when: ansible_distribution in ["Centos", "RED"]

  - name: install apache2 package Centos,RED
    dnf:
      name: httpd
      state: latest 
    when: ansible_distribution == "RED"

  - name: add php support for apache Centos,RED
    dnf:
      name: php
      state: latest
    when: ansible_distribution == "RED"
PLAY RECAP *****************************************************************************************************************************
192.168.122.152            : ok=4    changed=0    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   
192.168.122.202            : ok=4    changed=0    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   
192.168.122.218            : ok=4    changed=0    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   
192.168.122.59             : ok=4    changed=2    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0

Особенность RedOs Centos , Apache httpd сервис демон не запускается по умолчанию после установки, и доступ к порту http tcp 80 иногда блокирует firewall

systemctl status httpd
○ httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
             /usr/lib/systemd/system/httpd.service.d
             └─php-fpm.conf
     Active: inactive (dead)
       Docs: man:httpd.service(8)

sudo systemctl start httpd
sudo firewall-cmd --add-port=80/tcp

Улучшаем плейбук playbook ansible

Объединяем установку пакетов и запуск кэша обновлений в файле install_apache.yml

nano install_apache.yml

---

- hosts: all
  become: true
  tasks:

  - name: install apache2 and php packages upd cache for Astra Linux,Debian
    apt:
      name:
        - apache2
        - libapache2-mod-php
      state: latest
      update_cache: yes 
    when: ansible_distribution == "Astra Linux"

  - name: install apache2 and php packages upd cache Centos,RED
    dnf:
      name:
        - httpd
        - php
      state: latest 
      update_cache: yes 
    when: ansible_distribution in ["Centos","RED"]

ansible-playbook --ask-become-pass install_apache.yml

Оптимизация плейбука до одного действия используя переменные и универсальный менеджер пакетов package

nano install_apache.yml

---

- hosts: all
  become: true
  tasks:

  - name: install apache and php packages upd cache
    package:
      name:
        - "{{ apache_package }}"
        - "{{ php_package }}"
      state: latest
      update_cache: yes

Редактируем файл инвентаризации хостов и объявляем переменные

nano inventory
192.168.122.152 apache_package=apache2 php_package=libapache2-mod-php
192.168.122.218 apache_package=apache2 php_package=libapache2-mod-php
192.168.122.202 apache_package=apache2 php_package=libapache2-mod-php
192.168.122.59 apache_package=httpd php_package=php

Нацеливаемся на конкретные узлы хосты группы

Создание групп в списке инвентаризации хостов

nano inventory

[web_servers]
192.168.122.152
192.168.122.59

[db_servers]
192.168.122.218

[file_servers]
192.168.122.202

[git_servers]
192.168.122.152
192.168.122.202
192.168.122.59
cp install_apache.yml site.yml
nano site.yml

Обновим кэш пакетов и обновим пакеты в зависимости от ОС Astra Linux, RedOS, настройка серверов, для web серверов установка apache и php


---

- hosts: all
  become: true
  tasks:

  - name: install updates (RedOS,Centos)
    dnf:
      update_only: yes
      update_cache: yes
    when: ansible_distribution in ["Centos","RED"]

  - name: install updates (Astra Linux)
    apt:
      upgrade: dist
      update_cache: yes
    when: ansible_distribution == "Astra Linux"

- hosts: web_servers
  become: true
  tasks:

  - name: install apache2 and php packages for Astra Linux,Debian
    apt:
      name:
        - apache2
        - libapache2-mod-php
      state: latest
    when: ansible_distribution == "Astra Linux"

  - name: install apache2 and php packages Centos,RED
    dnf:
      name:
        - httpd
        - php
      state: latest  
    when: ansible_distribution in ["Centos","RED"]

ansible-playbook --ask-become-pass site.yml

Предварительные задачи pre_tasks — задачи которые требуется выполнить в первую очерель, добавим в site2.yml раздел ,для серверов баз данных

ansible-playbook --syntax-check site2.yml
ansible-playbook --ask-become-pass site2.yml
TASK [install mariadb package (Astra linux)] *************************************************************************************
changed: [192.168.122.218]

andrey@astra2:~$ systemctl status mariadb.service 
● mariadb.service - MariaDB 10.3.39 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2026-01-15 15:08:12 MSK; 8min ago

добавим в site2.yml раздел, для файловых серверов

nano site2.yml

---

- hosts: all
  become: true
  tasks:

  - name: install updates (RedOS,Centos)
    dnf:
      update_only: yes
      update_cache: yes
    when: ansible_distribution in ["Centos","RED"]

  - name: install updates (Astra Linux)
    apt:
      upgrade: dist
      update_cache: yes
    when: ansible_distribution == "Astra Linux"

- hosts: web_servers
  become: true
  tasks:

  - name: install apache2 and php packages for Astra Linux,Debian
    apt:
      name:
        - apache2
        - libapache2-mod-php
      state: latest
    when: ansible_distribution == "Astra Linux"

  - name: install apache2 and php packages Centos,RED
    dnf:
      name:
        - httpd
        - php
      state: latest  
    when: ansible_distribution in ["Centos","RED"]

- hosts: db_servers
  become: true
  tasks:

  - name: install mariadb package (RedOS,Centos)
    dnf:
      name: mariadb
      state: latest
    when: ansible_distribution in ["Centos","RED"]

  - name: install mariadb package (Astra linux) 
    apt:
      name: mariadb-server
      state: latest
    when: ansible_distribution == "Astra Linux"
 
- hosts: file_servers
  become: true
  tasks:

  - name: install samba package
    package:
      name: samba
      state: latest

- hosts: git_servers
  become: true
  tasks:

  - name: install git package
    package:
      name: git
      state: latest

ansible-playbook --syntax-check site2.yml
ansible-playbook --ask-become-pass site2.yml

Ansible Теги

Tags Теги позволяют выполнять не весь плейбук, а только его определенные части, помеченные нужными тегами

nano site.yml

---

- hosts: all
  become: true
  tasks:

  - name: install updates (RedOS,Centos)
    tags: always
    dnf:
      update_only: yes
      update_cache: yes
    when: ansible_distribution in ["Centos","RED"]

  - name: install updates (Astra Linux)
    tags: always
    apt:
      upgrade: dist
      update_cache: yes
    when: ansible_distribution == "Astra Linux"

- hosts: web_servers
  become: true
  tasks:

  - name: install apache2 and php packages for Astra Linux,Debian
    tags: apache,apache2,astra,debian
    apt:
      name:
        - apache2
        - libapache2-mod-php
      state: latest
    when: ansible_distribution == "Astra Linux"

  - name: install apache2 and php packages Centos,RED
    tags: apache,centos,httpd.redos
    dnf:
      name:
        - httpd
        - php
      state: latest
    when: ansible_distribution in ["Centos","RED"]

- hosts: db_servers
  become: true
  tasks:

  - name: install mariadb package (RedOS,Centos)
    tags: centos,redos,db,mariadb
    dnf:
      name: mariadb
      state: latest
    when: ansible_distribution in ["Centos","RED"]

  - name: install mariadb package (Astra linux)
    tags: db,mariadb,debian,astra
    apt:
      name: mariadb-server
      state: latest
    when: ansible_distribution == "Astra Linux"

- hosts: file_servers
  become: true
  tasks:

  - name: install samba package
    tags: samba
    package:
      name: samba
      state: latest

- hosts: git_servers
  become: true
  tasks:

  - name: install git package
    tags: git
    package:
      name: git
      state: latest

Вывести доступные теги из файла playbook

ansible-playbook --list-tags site2.yml

Запуск задач из файла playbook для ОС centos используя тег tags.
тег always выполняется всегда

ansible-playbook --tags centos --ask-become-pass site2.yml
ansible-playbook --tags apache --ask-become-pass site2.yml

Запуск задач из файла playbook используя несколько тегов

ansible-playbook --tags "apache,db" --ask-become-pass site2.yml

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *