Підручник Ansible для початківців: посібник, команди та приклад

Що таке Ansible?

Неможливо це інструмент автоматизації та оркестровки з відкритим кодом для надання програмного забезпечення, керування конфігурацією та розгортання програмного забезпечення. Ansible може легко запускати та налаштовувати Unix-подібні системи, а також Windows системи для надання інфраструктури як коду. Він містить власну декларативну мову програмування для налаштування та керування системою.

Ansible популярний через простоту встановлення, легкість використання в тому, що стосується підключення до клієнтів, відсутність агента для клієнтів Ansible і безліч навичок. Функціонує шляхом підключення через SSH клієнтам, тому не потрібен спеціальний агент на стороні клієнта, і, надсилаючи модулі клієнтам, модулі потім виконуються локально на стороні клієнта, а вихідні дані надсилаються назад на сервер Ansible.

Оскільки він використовує SSH, він може дуже легко підключатися до клієнтів за допомогою SSH-ключів, що спрощує весь процес. Деталі клієнта, як-от імена хостів або IP-адреси та порти SSH, зберігаються у файлах, які називаються файлами інвентаризації. Після того, як ви створили файл інвентаризації та заповнили його, ansible може використовувати його.

Навіщо використовувати Ansible?

Ось кілька важливих плюсів/переваг використання Ansible

  • Одна з найважливіших переваг Ansible полягає в тому, що він вільний для всіх.
  • Для встановлення та використання Ansible не потрібні спеціальні навички системного адміністратора, а офіційна документація дуже вичерпна.
  • Його модульність щодо плагінів, модулів, інвентаризації та ігор робить Ansible ідеальним компаньйоном для оркестрування великих середовищ.
  • Ansible дуже легкий і послідовний, і немає жодних обмежень щодо операційної системи чи основного обладнання.
  • Він також дуже безпечний завдяки безагентним можливостям і завдяки використанню функцій безпеки OpenSSH.
  • Ще одна перевага, яка спонукає до прийняття Ansible, — це його плавна крива навчання, що визначається повною документацією та простою для вивчення структурою та конфігурацією.

Історія Ansible

Ось важливі пам'ятки з історії ансібла:

  • У лютому 2012 року стартував проект Ansible. Його вперше розробив Майкл Де Хаан, творець Cobbler and Func, уніфікованого мережевого контролера Fedora.
  • Компанія, яка спочатку називалася AnsibleWorks Inc, фінансує інструмент ansible, була придбана RedHat у 2015 році, а пізніше разом із RedHat перейшла під егіду IBM.
  • На даний момент Ansible входить до таких дистрибутивів, як Fedora Linux, RHEL, Centos і Oracle Linux

Важливі терміни, що використовуються в Ansible

  • Ansible сервер

    Машина, на якій встановлено Ansible і з якої запускатимуться всі завдання та підручники

  • Модулі

    По суті, модуль — це команда або набір подібних команд Ansible, призначених для виконання на стороні клієнта

  • Завдання

    Завдання - це розділ, який складається з однієї процедури, яку потрібно виконати

  • Роль

    Спосіб упорядкування завдань і пов’язаних файлів, які згодом викликатимуть у посібнику

  • факт

    Інформація, отримана з клієнтської системи з глобальних змінних за допомогою операції збору фактів

  • Інвентаризація

    Файл, що містить дані про клієнтські сервери ansible. У наступних прикладах визначено як файл hosts

  • Play

    Виконання п'єси

  • Handler

    Завдання, яке викликається лише за наявності сповіщувача

  • Сповіщувач

    Розділ, приписуваний завданню, яке викликає обробник, якщо вихідні дані змінено

  • Тег

    Ім’я завдання, яке можна використовувати пізніше для виконання лише цього конкретного завдання чи групи завдань.

Інсталяція Ansible в Linux

Після того, як ви порівняли та зважили свої варіанти та вирішили вибрати Ansible, наступним кроком буде його встановлення у вашій системі. Ми розглянемо різні етапи встановлення Linux дистрибутиви, найпопулярніші з них, у наступному невеликому посібнику.

Встановіть Ansible на системи Centos/RedHat

Крок 1) Встановіть репозиторій EPEL

[root@ansible-server ~]# sudo yum install epel-release

Крок 2) Встановити пакет ansible

[root@ansible-server ~]# sudo  yum install -y ansible

Встановіть Ansible на системи Centos/RedHat

Встановити ansible на Ubuntu/Системи Debian

Крок 1) Виконайте оновлення пакетів

$ sudo apt update

Крок 2) Встановіть загальний пакет програмних властивостей

$ sudo apt install software-properties-common

Крок 3) Встановити особистий архів пакетів ansible

$ sudo apt-add-repository ppa:ansible/ansible

Крок 4) Встановити анзибл

$ sudo apt update
$ sudo apt install ansible

Ansible ad-hoc команди

Одним із найпростіших способів використання Ansible є використання спеціальних команд. Їх можна використовувати, коли ви хочете виконати деякі команди на сервері або групі серверів. Спеціальні команди не зберігаються для подальшого використання, але представляють швидкий спосіб взаємодії з потрібними серверами.

Для цього підручника Ansible буде налаштовано простий файл хостів двох серверів, який містить host1 і host2.

Ви можете переконатися, що хости доступні з сервера ansible, виконавши команду ping на всіх хостах.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible ad-hoc команди

Пояснення:

  1. Статус команди, в даному випадку SUCCESS
  2. Хост, на якому виконано команду
  3. Команда, видана через параметр -m, у даному випадку це ping
  4. За допомогою параметра -i ви можете вказати на файл hosts.


Ви можете ввести ту саму команду лише на певному хості, якщо це необхідно.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible ad-hoc команди

Пояснення:

  1. Параметр Limit можна використовувати для виконання команд лише на певних хостах у файлі хосту
  2. Ім’я хоста, як визначено у файлі інвентаризації

Якщо вам потрібно швидко скопіювати файл у кілька місць призначення, ви можете скористатися модулем копіювання в ansible, який використовує SCP. Отже, команда та її вихід виглядають так:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Ansible ad-hoc команди

Пояснення:

  1. Визначено модуль копіювання
  2. Аргументами модуля в цьому випадку є абсолютний шлях джерела та абсолютний шлях призначення.
  3. Вивід команди Ansible відображає успішність команди копіювання та інші деталі, як-от контрольні суми sha1 або md5 для перевірки цілісності файлу та метадані, як-от власник, розмір або дозволи. Легко встановити пакет на групі серверів. У Ansible є кілька модулів, які взаємодіють із використовуваними інсталяторами, наприклад yum, apt, dnf тощо.

У наступному прикладі ви дізнаєтеся, як встановити пакет за допомогою модуля yum на двох хостах Centos.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible ad-hoc команди

Пояснення:

  1. У цьому прикладі використовується модуль Yum
  2. Він визначає аргументи модуля, і в цьому випадку ви виберете назву пакета та його стан. Наприклад, якщо стан відсутній, пакет буде обшуканий і, якщо знайдений, видалений
  3. Коли позначено жовтим кольором, ви побачите результат команди ansible зі зміненим станом, тобто в цьому випадку пакунок знайдено та встановлено.
  4. Статус команди встановлення yum, виданої через ansible. У цьому випадку встановлено пакет ncdu.x86_64 0:1.14-1.el7.

Звичайно, усі параметри інсталятора yum можна використовувати через ansible, включаючи оновлення, встановлення, останню версію або видалення.

У наведеному нижче прикладі така сама команда була видана для видалення раніше встановленого пакета ncdu.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible ad-hoc команди

Пояснення:

  1. Результат команди yum показує, що пакет було видалено.

Ще одна корисна і важлива функція, яку ansible використовує для взаємодії з сервером клієнта, це збір деяких фактів про систему. Таким чином, він отримує інформацію про обладнання, програмне забезпечення та версії із системи та зберігає кожне значення у змінній, яку можна використовувати пізніше.

Якщо вам потрібна детальна інформація про системи, які потрібно змінити за допомогою ansible, можна використати наступну команду. Модуль налаштування збирає факти із системних змінних.

Ansible ad-hoc команди

Ansible Playbooks

Ansible Playbooks це спосіб надсилання команд до віддалених систем за допомогою сценаріїв. Посібники Ansible використовуються для налаштування складних системних середовищ для підвищення гнучкості шляхом виконання сценарію в одній або кількох системах. Ansible playbooks більше схожі на мову конфігурації, ніж мову програмування.

Команди Ansible playbook використовують формат YAML, тому не потрібно багато синтаксису, але потрібно дотримуватися відступів. Як випливає з назви, п’єса – це збірка п’єс. За допомогою посібника ви можете призначити конкретні ролі для деяких хостів і інші ролі для інших хостів. Таким чином, ви можете оркеструвати кілька серверів у дуже різноманітних сценаріях, все в одному посібнику.

Щоб уточнити всі деталі, перш ніж продовжити роботу з прикладами підручника Ansible, ми повинні спочатку визначити завдання. Це інтерфейс до анзибльних модулів для ролей і ігор.

Тепер давайте вивчимо підручник Ansible на прикладі з одним підручником з однією грою, що містить кілька завдань, як показано нижче:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Ansible Playbooks

У наведеному вище прикладі підручника Ansible група1 хостів у файлі хосту призначена для встановлення пакета lldpad за допомогою модуля yum, а потім служба lldpad, створена після інсталяції, запускається за допомогою службового модуля, який використовується переважно для взаємодії з ансамблем systemd.

Пояснення:

  1. Група хостів, на яких запускатиметься п’єса
  2. Модуль Yum використовується в цьому завданні для встановлення lldpad
  3. Сервісний модуль використовується, щоб перевірити, чи працює служба після встановлення

Кожен ansible playbook працює з файлом інвентаризації. Файл інвентаризації містить список серверів, розділених на групи для кращого контролю за такими деталями, як IP-адреса і порт SSH для кожного хоста.

Файл інвентаризації, який ви можете використовувати для цього прикладу підручника Ansible, виглядає так, як показано нижче. Є дві групи з назвами group1 і group2, кожна з яких містить host1 і host2 відповідно.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Ansible Playbooks

Пояснення:

  1. Назва групи
  2. Ім’я хосту з IP-адресою та портом ssh, у цьому випадку стандартним, 22.

Ще один корисний приклад збірки ігор Ansible, який цього разу містить дві гри для двох господарів, є наступним. Для першої групи хостів, group1, selinux буде ввімкнено. Якщо він увімкнений, то на екрані хоста з’явиться повідомлення.

Для другої групи хостів пакет httpd буде встановлено, лише якщо ansible_os_family — RedHat, а ansible_system_vendor — HP.

Ansible_os_family і ansible_system_vendor — це змінні, зібрані за допомогою параметра gather_facts, і їх можна використовувати, як у цьому умовному прикладі.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Ansible Playbooks

Пояснення:

  1. Приклад пропозиції when, у цьому випадку, коли тип ОС – Debian. Змінна ansible_os_family збирається за допомогою функції gather_facts.
  2. Вихід завдання зареєстровано для майбутнього використання під назвою enable_selinux
  3. Інший приклад речення when. У цьому випадку для користувача хоста буде показано повідомлення, якщо SELinux справді було ввімкнено раніше.
  4. Ще один приклад речення when, що складається з двох правил

Крім завдань, існують також деякі спеціальні завдання, які називаються обробниками. Обробники повинні мати унікальні назви в підручнику. Вони працюють так само, як і звичайні завдання, але обробник може бути повідомлений через сповіщувач.

Якщо обробник не буде сповіщений під час запуску посібника, він не запуститься. Однак, якщо обробник сповіщає більше одного завдання, це буде виконано лише один раз після завершення всіх завдань.

У наведеному нижче прикладі ви можете побачити, як конкретне завдання має розділ сповіщень, який викликає інше завдання. Якщо вихідні дані першого завдання змінено, буде викликано завдання обробки. Найкращий приклад — змінити файл конфігурації, а потім перезапустити цю конкретну службу.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

У цьому випадку, якщо перше завдання «sshd config file modify port» змінено, тобто якщо спочатку порт не 28675, його буде змінено, і завдання повідомить обробнику з такою самою назвою про виконання , і це перезапустить службу sshd.

Ansible Playbooks

Пояснення:

  1. Приклад сповіщувача
  2. Приклад обробника

Анзибні ролі

Коли ви маєте справу з великими підручниками, легше розподілити завдання на ролі. Це також допомагає повторно використовувати ролі в майбутньому. Ролі — це набір завдань, які можна переміщувати з одного посібника до іншого, виконувати незалежно, але лише через файл посібника.

Ролі зберігаються в окремих каталогах і мають певну структуру каталогів.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

Файл yaml у каталозі за замовчуванням містить список змінних за замовчуванням, які слід використовувати разом із посібником. Каталог обробників використовується для зберігання обробників. Мета-каталог має містити інформацію про автора та залежності ролей. У каталозі завдань є основний файл yaml для ролі.

Каталог tests містить зразок файлу yaml playbook і зразок файлу інвентаризації, і в основному використовується для тестування перед створенням фактичної ролі.

Каталог vars містить файл yaml, у якому будуть визначені всі змінні, що використовуються роллю. Шаблони каталогу та файли каталогу повинні містити файли та шаблони, які використовуватимуться завданнями в ролі.

Щоб створити дерево каталогів для ролі, слід використати таку команду з останнім параметром, іменем ролі:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible також добре працює з шаблонами. Як мова для створення шаблонів він використовує Jinja2.

У наступному прикладі ви дізнаєтесь, як виглядає базовий шаблон jinja2, і використаєте його в ролі.

Під час виконання, скажімо, залежно від того, у якому центрі даних розташований ваш сервер, ви можете вибрати з кількох серверів імен, кожен з яких відповідає центру даних, використовуючи змінну “resolver_ip_addresses”.

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

У цьому прикладі в каталозі playbook визначено кілька змінних, у тому числі змінну з назвою resolver_ip_addresses із різними значеннями залежно від центру обробки даних.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Анзибні ролі

Пояснення:

  1. Назва шаблону, який буде використовуватися. Шаблон знаходиться в каталозі шаблонів у шляху ролі
  2. Шлях призначення імені файлу, який буде замінено на шаблон, на стороні клієнта.
  3. Дозволи цільового файлу

Завдання ролей також можуть мати поле тегу, яке має назву. Кілька завдань можуть використовувати один тег. Під час запуску ansible playbook ви також можете вказати тег, щоб ці завдання виконуватися.

Ansible Case Study

У цьому розділі ми проаналізуємо тематичне дослідження важливої ​​анзибльної п’єси, яка має три ролі. Мета цього — дати практичний приклад того, про що ми говорили раніше. Деякі з прикладів, використаних раніше в цьому посібнику Ansible playbook, будуть адаптовані та використані в цьому посібнику playbook.

Нижче наведено структуру каталогів підручника. Файл Yaml, який буде використано, буде p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Посібник має три ролі, одна з яких називається резолвером, який встановлює певний сервер імен на серверах шляхом копіювання файлу з сервера до місця призначення /etc/resolv.conf. Інший називається httpd, і він встановлює пакет httpd із модулем yum, а третій увімкне SELinux і сповістить користувача, який увійшов у систему, щоб перезавантажити систему. Кожну роль було створено за допомогою команди ansible-galaxy.

Роль розв’язувача, завдання main.yml:

Ansible Case Study

Роль Httpd, завдання main.yml:

Ansible Case Study

Роль Selinux, завдання main.yml:

Ansible Case Study

Нижче наведено опис п4.yml. Він працюватиме на всіх хостах, якщо інше не вказано в командному рядку, він працюватиме як root-користувач на порту 22 (SSH), він збиратиме факти перед виконанням ролей, і він виконуватиме всі три ролі, згадані вище. Кожну роль можна запускати незалежно, вказавши тег у командному рядку ansible-playbook за допомогою параметра –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Запуск p4.yml playbook на двох хостах та інтерпретація результату. Цю ж команду можна виконати з параметром –check для сухого запуску. Якщо ви хочете використовувати автентифікацію за паролем, використовуйте параметр -k.

Ansible Case Study

Пояснення:

  1. Команда Ansible-playbook, яка запускає p4.yml
  2. Playbook пропускає роль SELinux, оскільки її вже ввімкнено.
  3. Ansible виявив, що httpd-пакет уже встановлено, тому він повертає нормально.
  4. Резолвер було налаштовано, а роль розв’язувача змінилася.

Шпаргалка Ansible Commands

Встановіть репозиторій EPEL на системах Centos/RHEL

[root@ansible-server ~]# sudo yum install epel-release

Встановіть пакет ansible на системах Centos/RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

Виконайте оновлення пакетів у Debian/Ubuntu системи

$ sudo apt update

Встановіть загальний пакунок software-properties-common на Debian/Ubuntu системи

$ sudo apt install software-properties-common

Встановіть особистий архів пакетів ansible на Debian/Ubuntu системи

$ sudo apt-add-repository ppa:ansible/ansible

Встановити ansible на Debian/Ubuntu системи

$ sudo apt update
$ sudo apt install ansible

Видайте команду ping на всіх серверах, визначених у файлі інвентаризації під назвою hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Видайте команду ping лише на host2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Скопіюйте файл «testfile» на всі хости у файлі інвентаризації

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Встановіть пакет ncdu на всіх хостах

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Видаліть пакет ncdu на всіх хостах

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Створіть структуру каталогів для ролі під назвою role1.

[root@ansible-server test2]# ansible-galaxy init role1

Посібник із застосуванням p4.yml

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Запустіть p4.yml playbook з автентифікацією пароля для всіх хостів

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Підсумки

У світі технологій, які постійно змінюються швидкими темпами та водночас неймовірно швидко розвиваються, системні адміністратори та інженери Devops повинні думати про різні підходи до того, як автоматизувати рутинні завдання та оркеструвати великі пули серверів.

Поки їх багато альтернатива Ansible (Chef, Puppet), які роблять те саме з деякими відмінностями, Ansible вдалося піднятися над усіма завдяки своїй простоті, покращеній безпеці та, що найголовніше, плавній кривій навчання. Завдяки цим якостям і швидкому засвоєнню Ansible ми створили підручник, повний прикладів, щоб ви могли мати ще більш бездоганний перший досвід роботи з Ansible.

У цьому посібнику з основ Ansible ми описали Ansible і трохи поговорили про його історію. Ми згадали сильні сторони Ansible і переваги, які ansible може принести автоматизації та оркестровці інфраструктур різного розміру. Ми визначили основні терміни, що використовуються в ансіблі, і визначили структуру підручників для анзиблів. Ґрунтовні приклади супроводжували всю інформацію детальними поясненнями.