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 на целевом сервере.