From aa356db95c154c84b0c07c61fa05da10a62e1a82 Mon Sep 17 00:00:00 2001 From: dannc Date: Fri, 22 Jul 2022 10:58:37 +0700 Subject: [PATCH] add homework 8.2 --- readme.md | 1 + .../08-ansible/8.2/playbook/.gitignore | 2 + .../playbook/group_vars/clickhouse/vars.yml | 6 + .../8.2/playbook/group_vars/vector/vars.yml | 2 + .../8.2/playbook/inventory/prod.yml.example | 9 + .../08-ansible/8.2/playbook/readme.md | 26 ++ src/homework/08-ansible/8.2/playbook/site.yml | 69 ++++++ src/homework/08-ansible/8.2/readme.md | 227 ++++++++++++++++++ 8 files changed, 342 insertions(+) create mode 100644 src/homework/08-ansible/8.2/playbook/.gitignore create mode 100644 src/homework/08-ansible/8.2/playbook/group_vars/clickhouse/vars.yml create mode 100644 src/homework/08-ansible/8.2/playbook/group_vars/vector/vars.yml create mode 100644 src/homework/08-ansible/8.2/playbook/inventory/prod.yml.example create mode 100644 src/homework/08-ansible/8.2/playbook/readme.md create mode 100644 src/homework/08-ansible/8.2/playbook/site.yml create mode 100644 src/homework/08-ansible/8.2/readme.md diff --git a/readme.md b/readme.md index 766ca1d..2792da7 100644 --- a/readme.md +++ b/readme.md @@ -37,3 +37,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) +* [8.2. Работа с Playbook](/src/homework/08-ansible/8.2) diff --git a/src/homework/08-ansible/8.2/playbook/.gitignore b/src/homework/08-ansible/8.2/playbook/.gitignore new file mode 100644 index 0000000..9da7295 --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/.gitignore @@ -0,0 +1,2 @@ +inventory/prod.yml +files/* diff --git a/src/homework/08-ansible/8.2/playbook/group_vars/clickhouse/vars.yml b/src/homework/08-ansible/8.2/playbook/group_vars/clickhouse/vars.yml new file mode 100644 index 0000000..383879b --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/group_vars/clickhouse/vars.yml @@ -0,0 +1,6 @@ +--- +clickhouse_version: "22.3.3.44" +clickhouse_packages: + - clickhouse-client + - clickhouse-server + - clickhouse-common-sta diff --git a/src/homework/08-ansible/8.2/playbook/group_vars/vector/vars.yml b/src/homework/08-ansible/8.2/playbook/group_vars/vector/vars.yml new file mode 100644 index 0000000..9e918cd --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/group_vars/vector/vars.yml @@ -0,0 +1,2 @@ +--- +vector_version: 0.23.0 diff --git a/src/homework/08-ansible/8.2/playbook/inventory/prod.yml.example b/src/homework/08-ansible/8.2/playbook/inventory/prod.yml.example new file mode 100644 index 0000000..f2263d9 --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/inventory/prod.yml.example @@ -0,0 +1,9 @@ +--- +clickhouse: + hosts: + clickhouse-01: + ansible_host: +vector: + hosts: + vector-01: + ansible_host: diff --git a/src/homework/08-ansible/8.2/playbook/readme.md b/src/homework/08-ansible/8.2/playbook/readme.md new file mode 100644 index 0000000..dd72185 --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/readme.md @@ -0,0 +1,26 @@ +# Clickhouse and vector playbook + +Данный playbook устанавливает `clickhouse` и `vector` на хосты, перечисленные в inventory. +Для каждой утилиты может быть указан свой хост для установки. + +## Parameters + +### Clickhouse + +- `clickhouse_version` - версия `clickhouse`, которая будет установлена +- `clickhouse_packages` - конкретные приложения из стека `clickhouse`, которые будут установлены + +### Vector + +- `vector_version` - версия `vector`, которая будет установлена + +## Tags + +### Clickhouse + +- `clickhouse` - установка и запуск только `clickhouse` + +### Vector + +- `vector` - установка только `vector` +- `vector_check_version` - запуск только `task` для проверки текущей установленной версии `vector` diff --git a/src/homework/08-ansible/8.2/playbook/site.yml b/src/homework/08-ansible/8.2/playbook/site.yml new file mode 100644 index 0000000..97b1805 --- /dev/null +++ b/src/homework/08-ansible/8.2/playbook/site.yml @@ -0,0 +1,69 @@ +--- +- name: Install Clickhouse + hosts: clickhouse + tasks: + - block: + - name: Get clickhouse distrib + ansible.builtin.get_url: + url: "https://packages.clickhouse.com/rpm/stable/{{ item }}-{{ clickhouse_version }}.noarch.rpm" + dest: "./{{ item }}-{{ clickhouse_version }}.rpm" + with_items: "{{ clickhouse_packages }}" + rescue: + - name: Get clickhouse distrib + ansible.builtin.get_url: + url: "https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-{{ clickhouse_version }}.x86_64.rpm" + dest: "./clickhouse-common-static-{{ clickhouse_version }}.rpm" + - name: Install clickhouse packages + become: true + ansible.builtin.yum: + name: + - clickhouse-common-static-{{ clickhouse_version }}.rpm + - clickhouse-client-{{ clickhouse_version }}.rpm + - clickhouse-server-{{ clickhouse_version }}.rpm + - name: Start clickhouse service + become: true + ansible.builtin.service: + name: clickhouse-server + state: restarted + - name: Create database + ansible.builtin.command: "clickhouse-client -q 'create database logs;'" + register: create_db + failed_when: create_db.rc != 0 and create_db.rc !=82 + changed_when: create_db.rc == 0 + tags: + - clickhouse + +- name: Install vector + hosts: vector + tasks: + - name: Install archive manager + become: true + ansible.builtin.yum: + name: + - tar + - name: Get vector distrib + ansible.builtin.get_url: + url: "https://packages.timber.io/vector/{{ vector_version }}/vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + dest: "./vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + - name: Unpack vector distrib + ansible.builtin.unarchive: + src: "./vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + dest: "./" + remote_src: true + - name: Install vector + become: true + ansible.builtin.copy: + src: "vector-x86_64-unknown-linux-musl/bin/vector" + dest: "/usr/local/bin/" + remote_src: true + mode: 755 + - name: Check vector version + ansible.builtin.shell: + cmd: vector --version + register: result + changed_when: + - 'vector_version not in result.stdout' + tags: + - vector_check_version + tags: + - vector diff --git a/src/homework/08-ansible/8.2/readme.md b/src/homework/08-ansible/8.2/readme.md new file mode 100644 index 0000000..8c79b03 --- /dev/null +++ b/src/homework/08-ansible/8.2/readme.md @@ -0,0 +1,227 @@ +Выполнение [домашнего задания](https://github.com/netology-code/mnt-homeworks/blob/MNT-13/08-ansible-02-playbook/README.md) +по теме "8.2. Работа с Playbook". + +## Q/A + +### Задание 1 + +> Подготовка к выполнению +> 1. (Необязательно) Изучите, что такое [clickhouse](https://www.youtube.com/watch?v=fjTNS2zkeBs) и [vector](https://www.youtube.com/watch?v=CgEhyffisLY) +> 2. Создайте свой собственный (или используйте старый) публичный репозиторий на github с произвольным именем. +> 3. Скачайте [playbook](https://github.com/netology-code/mnt-homeworks/tree/MNT-13/08-ansible-02-playbook/playbook) из репозитория с домашним заданием и перенесите его в свой репозиторий. +> 4. Подготовьте хосты в соответствии с группами из предподготовленного playbook. + +Новый playbook расположен в [одноимённой директории](./playbook). +Хосты прописываются в файле [inventory/prod.yml](./playbook/inventory/prod.yml), который необходимо создать из [playbook.yml.example](./playbook/inventory/prod.yml.example). + +Дополнительно перенёс `handler` с именем `Start clickhouse service` в отдельный `task`, так как по какой-то причине `handler` +иногда не отрабатывал из-за таймаута. При этом следующий `task` не отрабатывал из-за того, что сервис `clickhouse-server` не был запущен. + +### Задание 2 + +> Основная часть +> 1. Приготовьте свой собственный inventory файл prod.yml + +Файл [inventory/prod.yml](./playbook/inventory/prod.yml) будет выглядеть в точности как [playbook.yml.example](./playbook/inventory/prod.yml.example), +только с прописанным ip-адресом. + +> 2. Допишите playbook: нужно сделать ещё один play, который устанавливает и настраивает [vector](https://vector.dev/). +> 3. При создании tasks рекомендуется использовать модули: `get_url`, `template`, `unarchive`, `file`. +> 4. Tasks должны: скачать нужной версии дистрибутив, выполнить распаковку в выбранную директорию, установить `vector` + +На официальном сайте есть несколько путей установить `vector`: +- Через [установщик](https://vector.dev/docs/setup/installation/manual/vector-installer/), но в таком случае не понятно, + как указать версию. +- Через [пакетный менеджер yum](https://vector.dev/docs/setup/installation/package-managers/yum/). + Этот вариант требует добавление нового стороннего репозитория в систему. +- Путём [скачивания скомпилированного исполняемого файла](https://vector.dev/docs/setup/installation/manual/from-archives/). + +Был выбран последний вариант как наиболее надёжный. В таком случае будут определены следующие шаги выполнения установки: +- установка менеджера архивов `tar` на машине +- скачивание архива с официального сайта +- распаковка архива +- копирование исполняемого файла в одну из директорий из списка `PATH` (например, `/usr/local/bin`) + +С учётом данных шагов весь play по установке будет выглядеть следующим образом: + +```yaml +- name: Install vector + hosts: vector + tasks: + - name: Install archive manager + become: true + ansible.builtin.yum: + name: + - tar + - name: Get vector distrib + ansible.builtin.get_url: + url: "https://packages.timber.io/vector/{{ vector_version }}/vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + dest: "./vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + - name: Unpack vector distrib + ansible.builtin.unarchive: + src: "./vector-{{ vector_version }}-x86_64-unknown-linux-musl.tar.gz" + dest: "./" + remote_src: true + - name: Install vector + become: true + ansible.builtin.copy: + src: "vector-x86_64-unknown-linux-musl/bin/vector" + dest: "/usr/local/bin/" + remote_src: true + mode: 755 + - name: Check vector version + ansible.builtin.shell: + cmd: vector --version + register: result + changed_when: + - 'vector_version not in result.stdout' + tags: + - vector_check_version + tags: + - vector +``` + +При этом, нужно добавить новую группу хостов в [inventory/prod.yml](./playbook/inventory/prod.yml). + +```yaml +vector: + hosts: + vector-01: + ansible_host: +``` + +> 5. Запустите ansible-lint site.yml и исправьте ошибки, если они есть. + + +```shell +ansible-playbook -i inventory/prod.yml site.yml --tags=vector +``` + +```text +PLAY [Install Clickhouse] ************************************************************************************************** +PLAY [Install vector] ****************************************************************************************************** + +TASK [Gathering Facts] ***************************************************************************************************** +ok: [vector-01] + +TASK [Install archive manager] ********************************************************************************************* +ok: [vector-01] + +TASK [Get vector distrib] ************************************************************************************************** +changed: [vector-01] + +TASK [Unpack vector distrib] *********************************************************************************************** +changed: [vector-01] + +TASK [Install vector] ****************************************************************************************************** +changed: [vector-01] + +TASK [Check vector version] ************************************************************************************************ +changed: [vector-01] + +PLAY RECAP ***************************************************************************************************************** +vector-01 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +> 6. Попробуйте запустить playbook на этом окружении с флагом --check. + +```shell + ansible-playbook -i inventory/prod.yml site.yml --tags=vector --check +``` + +```text +PLAY [Install Clickhouse] ************************************************************************************************** + +PLAY [Install vector] ****************************************************************************************************** + +TASK [Gathering Facts] ***************************************************************************************************** +ok: [vector-01] + +TASK [Install archive manager] ********************************************************************************************* +ok: [vector-01] + +TASK [Get vector distrib] ************************************************************************************************** +ok: [vector-01] + +TASK [Unpack vector distrib] *********************************************************************************************** +skipping: [vector-01] + +TASK [Install vector] ****************************************************************************************************** +ok: [vector-01] + +TASK [Check vector version] ************************************************************************************************ +skipping: [vector-01] + +PLAY RECAP ***************************************************************************************************************** +vector-01 : ok=4 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0 +``` + +> 7. Запустите playbook на prod.yml окружении с флагом --diff. Убедитесь, что изменения на системе произведены. + +```shell +ansible-playbook -i inventory/prod.yml site.yml --tags=vector --diff +``` + +```text +PLAY [Install Clickhouse] ************************************************************************************************** + +PLAY [Install vector] ****************************************************************************************************** + +TASK [Gathering Facts] ***************************************************************************************************** +ok: [vector-01] + +TASK [Install archive manager] ********************************************************************************************* +ok: [vector-01] + +TASK [Get vector distrib] ************************************************************************************************** +ok: [vector-01] + +TASK [Unpack vector distrib] *********************************************************************************************** +ok: [vector-01] + +TASK [Install vector] ****************************************************************************************************** +ok: [vector-01] + +TASK [Check vector version] ************************************************************************************************ +ok: [vector-01] + +PLAY RECAP ***************************************************************************************************************** +vector-01 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +> 8. Повторно запустите playbook с флагом --diff и убедитесь, что playbook идемпотентен + +```shell +ansible-playbook -i inventory/prod.yml site.yml --tags=vector --diff +``` + +```text +PLAY [Install Clickhouse] ************************************************************************************************** + +PLAY [Install vector] ****************************************************************************************************** + +TASK [Gathering Facts] ***************************************************************************************************** +ok: [vector-01] + +TASK [Install archive manager] ********************************************************************************************* +ok: [vector-01] + +TASK [Get vector distrib] ************************************************************************************************** +ok: [vector-01] + +TASK [Unpack vector distrib] *********************************************************************************************** +ok: [vector-01] + +TASK [Install vector] ****************************************************************************************************** +ok: [vector-01] + +TASK [Check vector version] ************************************************************************************************ +ok: [vector-01] + +PLAY RECAP ***************************************************************************************************************** +vector-01 : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +> 9. Подготовьте README.md файл по своему playbook. В нём должно быть описано: что делает playbook, какие у него есть параметры и теги. + +Написан [playbook/readme.md](./playbook/readme.md).