Ansible

Материал из support.qbpro.ru

Установка Ansible на Debian 9

Ansible это система управления конфигурациями, которая используется для управления большим количеством однотипных (выполняющих одни и те же функции) хостов. В отличие от большинства конкурентов, таких как Puppet, Chef не требует установки собственного программного обеспечения - достаточно иметь доступ к компьютеру, например по SSH. Для управления конфигурациями Ansible использует Playbooks - специальным образом описанные на языке YAML сценарии.

Для установки Ansible на системах, использующих пакетный менеджер apt достаточно выполнить apt-get install.

apt-get instal ansible

Проверить, что ansible установился корректно можно командой:

ansible --version

Все настройки ansible находятся в папке /etc/ansible.

Для того, чтобы ansible могу управлять каким-либо хостом, необходимо сгенерировать ему файл ключа ssh с помощью ssh-keygen. На первый вопрос о том, в какой файл сгенерировать ключ нажать enter, на второй можно ввести парольную фразу с подтверждением, но тогда ее придется вводить всякий раз когда будет запрашиваться доступ к серверу, поэтому ее также оставляем пустой.

root@debian9:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AJZ2E5a+V+dNUvMbGdAwaj8xLiCJ9EkV7TaeSA5pr4I root@debian9
The key's randomart image is:
+---[RSA 2048]----+
|	ooo+.oo  ++  |
|   .+oB o  .. +o |
|   . +.*...o + oo|
|  	.=..++= +o.|
|  	..S.++oB  o|
|  	. .+ oo o. |
|	.  ..    	|
|   E . .     	|
|  	.      	|
+----[SHA256]-----+

Обменяться открытыми ключами с управляемым сервером с помощью команды ssh-copy-id <имя или ip сервера>. После этого при попытке соединиться с данным сервером автоматически прочтется ключ доступа и произойдет вход на целевой сервер без дополнительных запросов.

ssh-copy-id 10.0.0.2
ssh 10.0.0.2

ssh-copy-id root@10.0.0.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.2's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@10.0.0.2'"
and check to make sure that only the key(s) you wanted were added.

root@debian9:~# ssh 10.0.0.2
Last login: Thu Jul 26 15:49:46 2018 from 185.11.35.28

Теперь можно добавить этот хост в файл:

/etc/ansible/hosts

Хост можно добавить отдельно или в любую группу, если хостов несколько, например в webservers

[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
10.0.0.2

Теперь создадим какой-нибудь плейбук - например установим nginx на сервер с ОС Centos. ОС на управляющем и управляемом могут не совпадать.

nano /etc/ansible/nginst.yml
---
- hosts: 10.0.0.2
  tasks:
   - name: Install Nginx
 	yum: pkg=nginx state=latest

Здесь используются следующие команды:

   hosts: задает имя или ip хоста к которому применять данное действие. Можно вписать имя группы - тогда применится ко всем членам данной группы
   tasks: описание задачи
   name: Install Nginx - наименование задачи
   yum: pkg=nginx state=latest -действие. В данном случае это установить пакет nginx через yum, ключ state определяет что делать с пакетом
   latest означает установить или обновить до последней версии, если пакет есть
   present - просто установить
   absent - удалить пакет

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

ansible-playbook /etc/ansible/nginst.yml

Если все сделано правильно, то вывод должен быть такой:

root@debian9:~# ansible-playbook /etc/ansible/nginst.yml

PLAY [10.0.0.2] ****************************************************************

TASK [setup] *******************************************************************
ok: [10.0.0.2]

TASK [Install Nginx] ***********************************************************
changed: [10.0.0.2]

PLAY RECAP *********************************************************************
10.0.0.2               	: ok=2	changed=1	unreachable=0	failed=0

После этого надо запустить nginx на целевом сервере.

Для системы Debian пример для обновления нескольких хостов:

# apt-update for servers
- hosts: mediaservers
  tasks:
    - name: Update dvr
      apt: upgrade=yes update_cache=yes cache_valid_time=86400
# update all web
- hosts: webservers
  tasks:
    - name: Update www
      apt: upgrade=yes update_cache=yes cache_valid_time=86400
# update mail
- hosts: mailservers
  tasks:
    - name: Update mail
      apt: upgrade=yes update_cache=yes cache_valid_time=86400

ПОЛЕЗНОЕ: