- Установите ansible версии 2.10 или выше.
ansible --version
ansible [core 2.12.10]
- Создайте свой собственный публичный репозиторий на github с произвольным именем.
- Скачайте playbook из репозитория с домашним заданием и перенесите его в свой репозиторий.
- Попробуйте запустить playbook на окружении из
test.yml
, зафиксируйте какое значение имеет фактsome_fact
для указанного хоста при выполнении playbook'a.
playbook$ ansible-playbook site.yml -i inventory/test.yml
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": 12
}
some_fact = 12 2. Найдите файл с переменными (group_vars) в котором задаётся найденное в первом пункте значение и поменяйте его на 'all default fact'.
playbook$ ansible-playbook site.yml -i inventory/test.yml
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "all default fact"
}
- Воспользуйтесь подготовленным (используется
docker
) или создайте собственное окружение для проведения дальнейших испытаний. Т.к. в этом дз нет установки ПО через ansible, для простоты воспользуюсь окружением local. - Проведите запуск playbook на окружении из
prod.yml
. Зафиксируйте полученные значенияsome_fact
для каждого изmanaged host
.
playbook$ ansible-playbook -i inventory/prod.yml site.yml
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el"
}
ok: [ubuntu] => {
"msg": "deb"
}
- Добавьте факты в
group_vars
каждой из групп хостов так, чтобы дляsome_fact
получились следующие значения: дляdeb
- 'deb default fact', дляel
- 'el default fact'. - Повторите запуск playbook на окружении
prod.yml
. Убедитесь, что выдаются корректные значения для всех хостов.
playbook$ ansible-playbook -i inventory/prod.yml site.yml
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [ubuntu] => {
"msg": "deb default fact"
}
- При помощи
ansible-vault
зашифруйте факты вgroup_vars/deb
иgroup_vars/el
с паролемnetology
.
playbook$ ansible-vault encrypt group_vars/deb/examp.yml
New Vault password:
Confirm New Vault password:
Encryption successful
playbook$ ansible-vault encrypt group_vars/el/examp.yml
New Vault password:
Confirm New Vault password:
Encryption successful
- Запустите playbook на окружении
prod.yml
. При запускеansible
должен запросить у вас пароль. Убедитесь в работоспособности.
playbook$ ansible-playbook -i inventory/prod.yml site.yml --ask-vault-pass
Vault password:
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [ubuntu] => {
"msg": "deb default fact"
}
- Посмотрите при помощи
ansible-doc
список плагинов для подключения. Выберите подходящий для работы наcontrol node
.
playbook$ ansible-doc --list --type=connection
...
local execute on controller
paramiko_ssh Run tasks via python ssh (paramiko)
psrp Run tasks over Microsoft PowerShell Remoting Protocol
ssh connect via SSH client binary
- В
prod.yml
добавьте новую группу хостов с именемlocal
, в ней разместите localhost с необходимым типом подключения.
playbook$ cat inventory/prod.yml
...
local:
hosts:
localhost:
ansible_connection: local
- Запустите playbook на окружении
prod.yml
. При запускеansible
должен запросить у вас пароль. Убедитесь что фактыsome_fact
для каждого из хостов определены из верныхgroup_vars
.
playbook$ ansible-playbook -i inventory/prod.yml site.yml --ask-vault-pass
Vault password:
TASK [Print fact] *************************************************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [ubuntu] => {
"msg": "deb default fact"
}
ok: [localhost] => {
"msg": "all default fact"
}
- Заполните
README.md
ответами на вопросы. Сделайтеgit push
в веткуmaster
. В ответе отправьте ссылку на ваш открытый репозиторий с изменённымplaybook
и заполненнымREADME.md
.
- При помощи
ansible-vault
расшифруйте все зашифрованные файлы с переменными. - Зашифруйте отдельное значение
PaSSw0rd
для переменнойsome_fact
паролемnetology
. Добавьте полученное значение вgroup_vars/all/exmp.yml
. - Запустите
playbook
, убедитесь, что для нужных хостов применился новыйfact
. - Добавьте новую группу хостов
fedora
, самостоятельно придумайте для неё переменную. В качестве образа можно использовать этот. - Напишите скрипт на bash: автоматизируйте поднятие необходимых контейнеров, запуск ansible-playbook и остановку контейнеров.
- Все изменения должны быть зафиксированы и отправлены в вашей личный репозиторий.