Прежде чем приступить к написанию Playbook, необходимо изучить основу создания структуры на языке YAML, так как это очень важно. Главное на что стоит уделить внимание: нельзя применять "TAB" как пробел и необходимо четко соблюдать расположение элементов друг над другом. И если кто-то задается вопросом, что такое Playbook - это файлы в формате YAML (.yml) которые содержат описание необходимых для выполнения операций (ad-Hoc команд).
Создадим пустой файл(где вам удобно) и начнем его заполнять:
sudo nano new.yml
Содержимое файла согласно оф.сайта для первичного ознакомления:
--- - petua nick: petik position: developer skills: - python - php - petua nick: "pettya: petik" position: developer skills: - python - php - fructs - apple - orange - mango
Теперь подробнее, примерное составление:
... главное соблюдать структуру.
Пример выше можно записать еще так:
--- - petua: { nick: petik, position: developer, skills: ['python', 'php'] } - fructs: ['apple', 'orange', 'mango']
Мы кратко познакомились со структурой файла YAML. Теперь перейдем к практике на рабочем сервере. Напишем наш первый Playbook.
Ранее мы писали как установить Ansible. Теперь переходим в каталог с Ansible и создаем папку для Playbook:
cd /etc/ansible/ sudo mkdir playbooks # переходим в каталог playbooks cd playbooks
Напишем максимально простой Playbook по установке "MC", ранее мы ставили его через ad-Hoc команды. Создаем файл:
sudo nano install_mc.yml
и заполняем структуру в редакторе nano (вы можете пользоваться своим редактором, тем же vim. Но так как уроки для новичков, мы предполагаем, что vim для новичка сложный редактор):
* в коде ниже будут комментарии
# начало файла YAML "---", name - название, hosts - где запускать, become права root --- - name: MC hosts: all become: yes # первый tasks(их может быть несколько) в котором пишем name - имя, обозначение tasks: - name: install mc webserver # При установке на CentOS, дальше надо писать так: "yum: name=mc state=latest" # При установке на Debian: apt - установка в Debian, name - что, state - установить apt: name=mc state=latest
Теперь тот же самый код без лишних комментариев:
--- - name: MC hosts: all become: yes tasks: - name: install mc webserver apt: name=mc state=latest
Приступим к проверке. У нас есть текущий сервер, где стоит Ansible и сервер на который мы будем удаленно ставить пакет MC:
ansible-playbook install_mc.yml PLAY [Test connect] ************************************************************ TASK [Gathering Facts] ********************************************************* ok: [debi] TASK [install mc webserver] **************************************************** changed: [debi] PLAY RECAP ********************************************************************* debi : ok=2 changed=1 unreachable=0 failed=0
Все прошло успешно. Сервер на который мы установили прописан в файле hosts с именем debi. Проверим:
nano hosts
Часть содержимого:
... [debi_servers] debi ansible_host=192.168.0.77 ...
Если у вас несколько серверов, допустим 20...30... и вы хотите понять куда у вас есть доступ, а куда нет. Пишем еще один простенький Playbook.
Как проверить доступ к серверу, в самом простом варианте? Сделать ping:
nano ping.yml
Содержимое файла:
--- - name: ping hosts: all become: yes tasks: - name: test ping servers ping:
Для чего это нужно? Вы пришли на работу, вам дали 30 серверов. В файле host прописаны ключи и сервера. И вы хотите понимать, а есть ли реально доступ ко всем серверам? Самое простое, их пингануть и посмотреть откуда придет отказ. Для примера ниже у нас два удаленных сервера:
ansible-playbook ping.yml PLAY [Test connect] ************************************************************ TASK [Gathering Facts] ********************************************************* ok: [debi] 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} TASK [test ping servers] ******************************************************* ok: [debi] [WARNING]: Could not create retry file '/etc/ansible/playbooks/ping.retry'. [Errno 13] Permission denied: '/etc/ansible/playbooks/ping.retry' PLAY RECAP ********************************************************************* debi : ok=2 changed=0 unreachable=0 failed=0 debi2 : ok=0 changed=0 unreachable=1 failed=0 debuser@debsv:/etc/ansible/playbooks$
Мы видим, что один сервер работает (есть отклик), а ко второму нет доступа. Тем самым мы можем обратиться к вышестоящему администратору, чтобы он настроил доступ и туда. Все просто! В следующих статьях будем рассматривать более сложные Playbook.
Источник: http://linuxsql.ru