mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
add homework 8.1, task 1 and partial task 2
This commit is contained in:
@@ -36,3 +36,4 @@
|
|||||||
* [7.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4)
|
* [7.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4)
|
||||||
* [7.5. Основы golang](/src/homework/07-terraform/7.5)
|
* [7.5. Основы golang](/src/homework/07-terraform/7.5)
|
||||||
* [7.6. Написание собственных провайдеров для Terraform](/src/homework/07-terraform/7.6)
|
* [7.6. Написание собственных провайдеров для Terraform](/src/homework/07-terraform/7.6)
|
||||||
|
* [8.1. Введение в Ansible](/src/homework/08-ansible/8.1)
|
||||||
|
|||||||
2
src/homework/08-ansible/8.1/playbook/docker_run.sh
Executable file
2
src/homework/08-ansible/8.1/playbook/docker_run.sh
Executable file
@@ -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
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
some_fact: "all default fact"
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
some_fact: "deb default fact"
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
some_fact: "el default fact"
|
||||||
9
src/homework/08-ansible/8.1/playbook/inventory/prod.yml
Normal file
9
src/homework/08-ansible/8.1/playbook/inventory/prod.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
el:
|
||||||
|
hosts:
|
||||||
|
centos7:
|
||||||
|
ansible_connection: docker
|
||||||
|
deb:
|
||||||
|
hosts:
|
||||||
|
debian:
|
||||||
|
ansible_connection: docker
|
||||||
5
src/homework/08-ansible/8.1/playbook/inventory/test.yml
Normal file
5
src/homework/08-ansible/8.1/playbook/inventory/test.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
inside:
|
||||||
|
hosts:
|
||||||
|
localhost:
|
||||||
|
ansible_connection: local
|
||||||
10
src/homework/08-ansible/8.1/playbook/site.yml
Normal file
10
src/homework/08-ansible/8.1/playbook/site.yml
Normal file
@@ -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 }}"
|
||||||
184
src/homework/08-ansible/8.1/readme.md
Normal file
184
src/homework/08-ansible/8.1/readme.md
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user