Ansible: установка и первоначальная настройка

Автор: | 03/07/2015
 

ansible_logo_black_squareAnsible — система управления конфигурациями, написанная на Python, которая позволяет выполнять управление и настройку удалённых серверов с одного хоста.

Ближайшая аналогия — Puppet.

Для установки Ansible из репозитория — потребуется добавить репозиторий Epel.

Находим пакет Ansible:

 # yum search ansible
...
ansible-lint.noarch : Best practices checker for Ansible
ansible-inventory-grapher.noarch : Creates graphs representing ansible inventory
ansible.noarch : SSH-based configuration management, deployment, and task execution system

Устанавливаем:

# yum install ansible

...

Installed:
  ansible.noarch 0:1.8.4-1.el6

Dependency Installed:
  PyYAML.i686 0:3.10-3.1.el6                  libyaml.i686 0:0.1.3-4.el6_6               python-babel.noarch 0:0.9.4-5.1.el6     python-crypto.i686 0:2.0.1-22.el6          python-crypto2.6.i686 0:2.6.1-2.el6
  python-httplib2.noarch 0:0.7.7-1.el6        python-jinja2.i686 0:2.2.1-2.el6_5         python-keyczar.noarch 0:0.71c-1.el6     python-paramiko.noarch 0:1.7.5-2.1.el6     python-pyasn1.noarch 0:0.0.12a-1.el6
  python-setuptools.noarch 0:0.6.10-3.el6     python-simplejson.i686 0:2.0.9-3.1.el6

Complete!

Можно установить используя PIP:

# pip install ansible

Настройки удалённых хостов хранятся в файле /etc/ansible/hosts.

Бекапим его:

# mv /etc/ansible/hosts /etc/ansible/hosts.default

Создаём заново, и добавляем сервер cent1, который будет находится в группе test box, и группу local — для машины, на которой работает сам Ansible, с именем cent1:

[test box]
cent2

[local]
cent1

Оба хоста добавлены в /etc/hosts:

# grep -E "cent1|cent2" /etc/hosts
10.***.***.250 cent2
127.0.0.1 cent1

Работа Ansible с удалёнными серверами по умолчанию предполагает, что у вас имеется настроенное SSH-подключение с авторизацией по RSA-ключам.

На сервере с Ansible переключаемся на пользователя, под которым будем выполнять подключение:

# su -l setevoy

Создаём RSA-ключ:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/setevoy/.ssh/id_rsa):
Created directory '/home/setevoy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/setevoy/.ssh/id_rsa.
Your public key has been saved in /home/setevoy/.ssh/id_rsa.pub.
The key fingerprint is:
30:43:ca:a8:2f:0d:a8:eb:af:c7:d9:95:d9:43:77:01 setevoy@cent1
The key's randomart image is:
+--[ RSA 2048]----+
|      .    E.    |
|   o o       .   |
|  . o +       .  |
|..     + . . .   |
|+       S . .    |
|.+     + o       |
|o + o .   .      |
| o + .           |
|oo+.             |
+-----------------+

На удалённом сервере — включаем авторизацию по ключам. В файле /etc/ssh/sshd_config убираем комментарии перед строками RSAAuthentication yesPubkeyAuthentication yes и AuthorizedKeysFile .ssh/authorized_keys. Перезапускаем SSH-сервер:

# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

На сервере c Ansible — копируем id_pub.pub на сервер cent2 с помощью ssh-copy-id:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub setevoy@cent2
setevoy@cent2's password:
Now try logging into the machine, with "ssh 'setevoy@cent2'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Пробуем подключиться:

$ ssh cent2
The authenticity of host 'cent2 (10.***.***.250)' can't be established.
RSA key fingerprint is d1:25:28:1f:5c:17:26:eb:0d:9a:72:ae:7c:44:ce:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cent2' (RSA) to the list of known hosts.
Last login: Thu Mar  5 13:56:55 2015 from 10.249.140.93

Повторяем добавление ключа в файл authorized_keys для локального пользователя:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub setevoy@cent1

Теперь мы можем использовать Ansible.

Для проверки — обычный ping всех серверов, описанных в /etc/ansible/hosts:

 $ ansible all -m ping
cent2 | success >> {
    "changed": false,
    "ping": "pong"
}

cent1 | success >> {
    "changed": false,
    "ping": "pong"
}

Можно обойтись и без создания ключей, но для этого потребуется установить sshpass:

# yum install sshpass
$ ansible cent2 -m ping -k -u root
SSH password:
cent2 | success >> {
    "changed": false,
    "ping": "pong"
}

Тут мы указываем:

  • cent2 вместо all — обратиться к конкретной машине из списка в /etc/ansible/hosts;
  • -m — модуль Ansible ping;
  • -k — запросить пароль, вместо использования RSA-ключей;
  • -u — использовать заданное имя пользователя;

Полный список опций доступен по:

$ ansible --help

Продолжение — Ansible: модули