Выполнение домашнего задания по теме "8.1. Введение в Ansible".
Q/A
Задание 1
Подготовка к выполнению
- Установите ansible версии 2.10 или выше
- Создайте свой собственный публичный репозиторий на github с произвольным именем.
- Скачайте playbook из репозитория с домашним заданием и перенесите его в свой репозиторий.
Установку ansible производил через pip.
ansible --version
ansible [core 2.13.1]
Репозиторий расположен по ссылке.
Playbook расположен в директории playbook.
Задание 2
Основная часть.
- Попробуйте запустить playbook на окружении из
test.yml, зафиксируйте какое значение имеет фактsome_factдля указанного хоста при выполнении playbook'a.
ansible-playbook -i inventory/test.yml site.yml
PLAY [Print os facts] ******************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************
ok: [localhost]
TASK [Print OS] ************************************************************************************************************
ok: [localhost] => {
"msg": "Ubuntu"
}
TASK [Print fact] **********************************************************************************************************
ok: [localhost] => {
"msg": 12
}
PLAY RECAP *****************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Переменная some_fact в данном случае равна 12.
- Найдите файл с переменными (group_vars) в котором задаётся найденное в первом пункте значение и поменяйте его на 'all default fact'.
Переменная задаётся в файле group_vars/all/example.yml. После изменения файл будет выглядеть следующим образом:
---
some_fact: "all default fact"
- Воспользуйтесь подготовленным (используется
docker) или создайте собственное окружение для проведения дальнейших испытаний.
Заменил образ ubuntu на образ debian (официальный образ python, основанный на debian)
и, соответственно, изменил название контейнера в inventory/prod.yml.
Запуск контейнеров производится командой:
docker run --rm -d --name=centos7 centos:7 tail -f /dev/null \
&& docker run --rm -d --name=debian python:slim tail -f /dev/null
- Проведите запуск playbook на окружении из
prod.yml. Зафиксируйте полученные значенияsome_factдля каждого изmanaged host.
ansible-playbook -i inventory/prod.yml site.yml
PLAY [Print os facts] ********************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************
[WARNING]: Distribution debian 11 on host debian should use /usr/bin/python3, but is using /usr/local/bin/python3.10, since the discovered platform python interpreter was
not present. See https://docs.ansible.com/ansible-core/2.13/reference_appendices/interpreter_discovery.html for more information.
ok: [debian]
ok: [centos7]
TASK [Print OS] **************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "CentOS"
}
ok: [debian] => {
"msg": "Debian"
}
TASK [Print fact] ************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el"
}
ok: [debian] => {
"msg": "deb"
}
PLAY RECAP *******************************************************************************************************************************************************************
centos7 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
debian : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Таким образом, переменная some_fact имеет следующие значения:
- для
debian-deb - для
centos7-el
- Добавьте факты в
group_varsкаждой из групп хостов так, чтобы дляsome_factполучились следующие значения: дляdeb- 'deb default fact', дляel- 'el default fact'.
В данном случае необходимо отредактировать файлы group_vars/deb/example.yml и group_vars/el/example.yml.
- Повторите запуск playbook на окружении
prod.yml. Убедитесь, что выдаются корректные значения для всех хостов.
ansible-playbook -i inventory/prod.yml site.yml
PLAY [Print os facts] ********************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************
[WARNING]: Distribution debian 11 on host debian should use /usr/bin/python3, but is using /usr/local/bin/python3.10, since the discovered platform python interpreter was
not present. See https://docs.ansible.com/ansible-core/2.13/reference_appendices/interpreter_discovery.html for more information.
ok: [debian]
ok: [centos7]
TASK [Print OS] **************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "CentOS"
}
ok: [debian] => {
"msg": "Debian"
}
TASK [Print fact] ************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [debian] => {
"msg": "deb default fact"
}
PLAY RECAP *******************************************************************************************************************************************************************
centos7 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
debian : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- При помощи
ansible-vaultзашифруйте факты вgroup_vars/debиgroup_vars/elс паролемnetology.
ansible-vault encrypt group_vars/deb/example.yml
ansible-vault encrypt group_vars/el/example.yml
- Запустите playbook на окружении
prod.yml. При запускеansibleдолжен запросить у вас пароль. Убедитесь в работоспособности.
ansible-playbook --ask-vault-pass -i inventory/prod.yml site.yml
PLAY [Print os facts] ******************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************************
[WARNING]: Distribution debian 11 on host debian should use /usr/bin/python3, but is using /usr/local/bin/python3.10, since the discovered platform python interpreter was not present.
See https://docs.ansible.com/ansible-core/2.13/reference_appendices/interpreter_discovery.html for more information.
ok: [debian]
ok: [centos7]
TASK [Print OS] ************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "CentOS"
}
ok: [debian] => {
"msg": "Debian"
}
TASK [Print fact] **********************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [debian] => {
"msg": "deb default fact"
}
PLAY RECAP *****************************************************************************************************************************************************************************
centos7 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
debian : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- Посмотрите при помощи
ansible-docсписок плагинов для подключения. Выберите подходящий для работы наcontrol node.
Для выполнения команд на control node (машине, с которой производится запуск playbook), можно использовать модуль local_action.
К сожалению, в ansible-doc не смог найти встроенных модулей, а документации к local_action в данной утилите нет.
ansible-doc local_action
[WARNING]: module local_action not found in: ~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules:~/.local/lib/python3.8/site-packages/ansible/modules
- В
prod.ymlдобавьте новую группу хостов с именемlocal, в ней разместите localhost с необходимым типом подключения.
Новая группа хостов будет выглядеть следующим образом:
local:
hosts:
localhost:
ansible_connection: local
- Запустите playbook на окружении
prod.yml. При запускеansibleдолжен запросить у вас пароль. Убедитесь что фактыsome_factдля каждого из хостов определены из верныхgroup_vars.
ansible-playbook --ask-vault-pass -i inventory/prod.yml site.yml
PLAY [Print os facts] ******************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************************
ok: [localhost]
[WARNING]: Distribution debian 11 on host debian should use /usr/bin/python3, but is using /usr/local/bin/python3.10, since the discovered platform python interpreter was not present.
See https://docs.ansible.com/ansible-core/2.13/reference_appendices/interpreter_discovery.html for more information.
ok: [debian]
ok: [centos7]
TASK [Print OS] ************************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "CentOS"
}
ok: [debian] => {
"msg": "Debian"
}
ok: [localhost] => {
"msg": "Ubuntu"
}
TASK [Print fact] **********************************************************************************************************************************************************************
ok: [centos7] => {
"msg": "el default fact"
}
ok: [debian] => {
"msg": "deb default fact"
}
ok: [localhost] => {
"msg": "all default fact"
}
PLAY RECAP *****************************************************************************************************************************************************************************
centos7 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
debian : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- Заполните
README.mdответами на вопросы. Сделайтеgit pushв веткуmaster. В ответе отправьте ссылку на ваш открытый репозиторий с изменённымplaybookи заполненнымREADME.md.
//todo