You are here

Ansible: YAML формат и первый Playbook. Lesson 3

Linux: 

Изучаем Ansible: YAML формат и первый Playbook. Урок 3.

Прежде чем приступить к написанию Playbook, необходимо изучить основу создания структуры на языке YAML, так как это очень важно. Главное на что стоит уделить внимание: нельзя применять "TAB" как пробел и необходимо четко соблюдать расположение элементов друг над другом. И если кто-то задается вопросом, что такое Playbook - это файлы в формате YAML (.yml) которые содержат описание необходимых для выполнения операций (ad-Hoc команд).

Создадим пустой файл(где вам удобно) и начнем его заполнять:

  1. sudo nano new.yml

Содержимое файла согласно оф.сайта для первичного ознакомления:

  1. ---
  2. - petua
  3. nick: petik
  4. position: developer
  5. skills:
  6. - python
  7. - php
  8.  
  9. - petua
  10. nick: "pettya: petik"
  11. position: developer
  12. skills:
  13. - python
  14. - php
  15.  
  16. - fructs
  17. - apple
  18. - orange
  19. - mango

Теперь подробнее, примерное составление:

  • каждый файл начинается с первой строчки и указывается "---"
  • следющая строчка пробел
  • следующая строка начинается с отступа, нельзя применять "TAB", просто пробелы " - petua"
  • ниже через пробелы атрибуты " nick: petik"

... главное соблюдать структуру.

Пример выше можно записать еще так:

  1. ---
  2.  
  3. - petua: { nick: petik, position: developer, skills: ['python', 'php'] }
  4.  
  5. - fructs: ['apple', 'orange', 'mango']

Мы кратко познакомились со структурой файла YAML. Теперь перейдем к практике на рабочем сервере. Напишем наш первый Playbook.

Ранее мы писали как установить Ansible. Теперь переходим в каталог с Ansible и создаем папку для Playbook:

  1. cd /etc/ansible/
  2. sudo mkdir playbooks
  3. # переходим в каталог playbooks
  4. cd playbooks

Напишем максимально простой Playbook по установке "MC", ранее мы ставили его через ad-Hoc команды. Создаем файл:

  1. sudo nano install_mc.yml

и заполняем структуру в редакторе nano (вы можете пользоваться своим редактором, тем же vim. Но так как уроки для новичков, мы предполагаем, что vim для новичка сложный редактор):

* в коде ниже будут комментарии

  1. # начало файла YAML "---", name - название, hosts - где запускать, become права root
  2. ---
  3. - name: MC
  4. hosts: all
  5. become: yes
  6.  
  7. # первый tasks(их может быть несколько) в котором пишем name - имя, обозначение
  8. tasks:
  9. - name: install mc webserver
  10. # При установке на CentOS, дальше надо писать так: "yum: name=mc state=latest"
  11. # При установке на Debian: apt - установка в Debian, name - что, state - установить
  12. apt: name=mc state=latest

Теперь тот же самый код без лишних комментариев:

  1. ---
  2. - name: MC
  3. hosts: all
  4. become: yes
  5.  
  6. tasks:
  7. - name: install mc webserver
  8. apt: name=mc state=latest

Приступим к проверке. У нас есть текущий сервер, где стоит Ansible и сервер на который мы будем удаленно ставить пакет MC:

  1. ansible-playbook install_mc.yml
  2.  
  3. PLAY [Test connect] ************************************************************
  4.  
  5. TASK [Gathering Facts] *********************************************************
  6. ok: [debi]
  7.  
  8. TASK [install mc webserver] ****************************************************
  9. changed: [debi]
  10.  
  11. PLAY RECAP *********************************************************************
  12. debi : ok=2 changed=1 unreachable=0 failed=0

Все прошло успешно. Сервер на который мы установили прописан в файле hosts с именем debi. Проверим:

  1. nano hosts

Часть содержимого:

  1. ...
  2. [debi_servers]
  3. debi ansible_host=192.168.0.77
  4. ...

Если у вас несколько серверов, допустим 20...30... и вы хотите понять куда у вас есть доступ, а куда нет. Пишем еще один простенький Playbook.

Как проверить доступ к серверу, в самом простом варианте? Сделать ping:

  1. nano ping.yml

Содержимое файла:

  1. ---
  2. - name: ping
  3. hosts: all
  4. become: yes
  5.  
  6. tasks:
  7. - name: test ping servers
  8. ping:

Для чего это нужно? Вы пришли на работу, вам дали 30 серверов. В файле host прописаны ключи и сервера. И вы хотите понимать, а есть ли реально доступ ко всем серверам? Самое простое, их пингануть и посмотреть откуда придет отказ. Для примера ниже у нас два удаленных сервера:

  1. ansible-playbook ping.yml
  2.  
  3. PLAY [Test connect] ************************************************************
  4.  
  5. TASK [Gathering Facts] *********************************************************
  6. ok: [debi]
  7. fatal: [debi2]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.0.80 port 22: Connection timed out", "unreachable": true}
  8.  
  9. TASK [test ping servers] *******************************************************
  10. ok: [debi]
  11. [WARNING]: Could not create retry file
  12. '/etc/ansible/playbooks/ping.retry'. [Errno 13] Permission
  13. denied: '/etc/ansible/playbooks/ping.retry'
  14.  
  15.  
  16. PLAY RECAP *********************************************************************
  17. debi : ok=2 changed=0 unreachable=0 failed=0
  18. debi2 : ok=0 changed=0 unreachable=1 failed=0
  19.  
  20. debuser@debsv:/etc/ansible/playbooks$

Мы видим, что один сервер работает (есть отклик), а ко второму нет доступа. Тем самым мы можем обратиться к вышестоящему администратору, чтобы он настроил доступ и туда. Все просто! В следующих статьях будем рассматривать более сложные Playbook.

Источник: http://linuxsql.ru