From 15e64885aaaaaf1db5b28925e02bccc5e5ad2f02 Mon Sep 17 00:00:00 2001 From: dannc Date: Wed, 13 Jul 2022 10:36:57 +0700 Subject: [PATCH] add homework 8.1, task 1 and partial task 2 --- readme.md | 1 + .../08-ansible/8.1/playbook/docker_run.sh | 2 + .../8.1/playbook/group_vars/all/example.yml | 2 + .../8.1/playbook/group_vars/deb/example.yml | 2 + .../8.1/playbook/group_vars/el/example.yml | 2 + .../8.1/playbook/inventory/prod.yml | 9 + .../8.1/playbook/inventory/test.yml | 5 + src/homework/08-ansible/8.1/playbook/site.yml | 10 + src/homework/08-ansible/8.1/readme.md | 184 ++++++++++++++++++ 9 files changed, 217 insertions(+) create mode 100755 src/homework/08-ansible/8.1/playbook/docker_run.sh create mode 100644 src/homework/08-ansible/8.1/playbook/group_vars/all/example.yml create mode 100644 src/homework/08-ansible/8.1/playbook/group_vars/deb/example.yml create mode 100644 src/homework/08-ansible/8.1/playbook/group_vars/el/example.yml create mode 100644 src/homework/08-ansible/8.1/playbook/inventory/prod.yml create mode 100644 src/homework/08-ansible/8.1/playbook/inventory/test.yml create mode 100644 src/homework/08-ansible/8.1/playbook/site.yml create mode 100644 src/homework/08-ansible/8.1/readme.md diff --git a/readme.md b/readme.md index 95b89ee..766ca1d 100644 --- a/readme.md +++ b/readme.md @@ -36,3 +36,4 @@ * [7.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4) * [7.5. Основы golang](/src/homework/07-terraform/7.5) * [7.6. Написание собственных провайдеров для Terraform](/src/homework/07-terraform/7.6) +* [8.1. Введение в Ansible](/src/homework/08-ansible/8.1) diff --git a/src/homework/08-ansible/8.1/playbook/docker_run.sh b/src/homework/08-ansible/8.1/playbook/docker_run.sh new file mode 100755 index 0000000..cfc635a --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/docker_run.sh @@ -0,0 +1,2 @@ +docker run --rm -d --name=centos7 centos:7 tail -f /dev/null \ + && docker run --rm -d --name=debian debian:stable-slim tail -f /dev/null diff --git a/src/homework/08-ansible/8.1/playbook/group_vars/all/example.yml b/src/homework/08-ansible/8.1/playbook/group_vars/all/example.yml new file mode 100644 index 0000000..51b24d4 --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/group_vars/all/example.yml @@ -0,0 +1,2 @@ +--- +some_fact: "all default fact" diff --git a/src/homework/08-ansible/8.1/playbook/group_vars/deb/example.yml b/src/homework/08-ansible/8.1/playbook/group_vars/deb/example.yml new file mode 100644 index 0000000..4bb3a22 --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/group_vars/deb/example.yml @@ -0,0 +1,2 @@ +--- +some_fact: "deb default fact" diff --git a/src/homework/08-ansible/8.1/playbook/group_vars/el/example.yml b/src/homework/08-ansible/8.1/playbook/group_vars/el/example.yml new file mode 100644 index 0000000..375c3b9 --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/group_vars/el/example.yml @@ -0,0 +1,2 @@ +--- +some_fact: "el default fact" diff --git a/src/homework/08-ansible/8.1/playbook/inventory/prod.yml b/src/homework/08-ansible/8.1/playbook/inventory/prod.yml new file mode 100644 index 0000000..08f1fcc --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/inventory/prod.yml @@ -0,0 +1,9 @@ +--- +el: + hosts: + centos7: + ansible_connection: docker +deb: + hosts: + debian: + ansible_connection: docker diff --git a/src/homework/08-ansible/8.1/playbook/inventory/test.yml b/src/homework/08-ansible/8.1/playbook/inventory/test.yml new file mode 100644 index 0000000..e6d250d --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/inventory/test.yml @@ -0,0 +1,5 @@ +--- +inside: + hosts: + localhost: + ansible_connection: local diff --git a/src/homework/08-ansible/8.1/playbook/site.yml b/src/homework/08-ansible/8.1/playbook/site.yml new file mode 100644 index 0000000..e7fa869 --- /dev/null +++ b/src/homework/08-ansible/8.1/playbook/site.yml @@ -0,0 +1,10 @@ +--- +- name: Print os facts + hosts: all + tasks: + - name: Print OS + debug: + msg: "{{ ansible_distribution }}" + - name: Print fact + debug: + msg: "{{ some_fact }}" diff --git a/src/homework/08-ansible/8.1/readme.md b/src/homework/08-ansible/8.1/readme.md new file mode 100644 index 0000000..b47c62c --- /dev/null +++ b/src/homework/08-ansible/8.1/readme.md @@ -0,0 +1,184 @@ +Выполнение [домашнего задания](https://github.com/netology-code/mnt-homeworks/blob/MNT-13/08-ansible-01-base/README.md) +по теме "8.1. Введение в Ansible". + +## Q/A + +### Задание 1 + +> Подготовка к выполнению +> 1. Установите ansible версии 2.10 или выше +> 2. Создайте свой собственный публичный репозиторий на github с произвольным именем. +> 3. Скачайте playbook из репозитория с домашним заданием и перенесите его в свой репозиторий. + +Установку `ansible` производил через `pip`. + +```shell +ansible --version +``` + +```text +ansible [core 2.13.1] +``` + +Репозиторий расположен по [ссылке](https://github.com/Dannecron/netology-devops). + +Playbook расположен в директории [playbook](./playbook). + +### Задание 2 + +> Основная часть. +> 1. Попробуйте запустить playbook на окружении из `test.yml`, зафиксируйте какое значение имеет факт `some_fact` для указанного хоста при выполнении playbook'a. + +```shell +ansible-playbook -i inventory/test.yml site.yml +``` + +```text +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`. + +> 2. Найдите файл с переменными (group_vars) в котором задаётся найденное в первом пункте значение и поменяйте его на 'all default fact'. + +Переменная задаётся в файле [group_vars/all/example.yml](./playbook/group_vars/all/example.yml). После изменения файл будет выглядеть следующим образом: + +```yaml +--- +some_fact: "all default fact" +``` + +> 3. Воспользуйтесь подготовленным (используется `docker`) или создайте собственное окружение для проведения дальнейших испытаний. + +Заменил образ `ubuntu` на образ `debian` ([официальный образ `python`](https://hub.docker.com/_/python), основанный на debian) +и, соответственно, изменил название контейнера в [inventory/prod.yml](./playbook/inventory/prod.yml). + +Запуск контейнеров производится командой: + +```shell +docker run --rm -d --name=centos7 centos:7 tail -f /dev/null \ + && docker run --rm -d --name=debian python:slim tail -f /dev/null +``` + +> 4. Проведите запуск playbook на окружении из `prod.yml`. Зафиксируйте полученные значения `some_fact` для каждого из `managed host`. + +```shell +ansible-playbook -i inventory/prod.yml site.yml +``` + +```text +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` + +> 5. Добавьте факты в `group_vars` каждой из групп хостов так, чтобы для `some_fact` получились следующие значения: для `deb` - 'deb default fact', для `el` - 'el default fact'. + +В данном случае необходимо отредактировать файлы [group_vars/deb/example.yml](./playbook/group_vars/deb/example.yml) +и [group_vars/el/example.yml](./playbook/group_vars/el/example.yml). + +> 6. Повторите запуск playbook на окружении `prod.yml`. Убедитесь, что выдаются корректные значения для всех хостов. + + +```shell +ansible-playbook -i inventory/prod.yml site.yml +``` + +```text +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 +``` + + +> 7. При помощи `ansible-vault` зашифруйте факты в `group_vars/deb` и `group_vars/el` с паролем `netology`. + +//todo + +> 8. Запустите playbook на окружении `prod.yml`. При запуске `ansible` должен запросить у вас пароль. Убедитесь в работоспособности. + +//todo + +> 9. Посмотрите при помощи `ansible-doc` список плагинов для подключения. Выберите подходящий для работы на `control node`. + +//todo + +> 10. В `prod.yml` добавьте новую группу хостов с именем `local`, в ней разместите localhost с необходимым типом подключения. + +//todo + +> 11. Запустите playbook на окружении `prod.yml`. При запуске `ansible` должен запросить у вас пароль. Убедитесь что факты `some_fact` для каждого из хостов определены из верных `group_vars`. + +//todo + +> 12. Заполните `README.md` ответами на вопросы. Сделайте `git push` в ветку `master`. В ответе отправьте ссылку на ваш открытый репозиторий с изменённым `playbook` и заполненным `README.md`. + +//todo