mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
add homework 8.2
This commit is contained in:
@@ -37,3 +37,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)
|
* [8.1. Введение в Ansible](/src/homework/08-ansible/8.1)
|
||||||
|
* [8.2. Работа с Playbook](/src/homework/08-ansible/8.2)
|
||||||
|
|||||||
2
src/homework/08-ansible/8.2/playbook/.gitignore
vendored
Normal file
2
src/homework/08-ansible/8.2/playbook/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
inventory/prod.yml
|
||||||
|
files/*
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
clickhouse_version: "22.3.3.44"
|
||||||
|
clickhouse_packages:
|
||||||
|
- clickhouse-client
|
||||||
|
- clickhouse-server
|
||||||
|
- clickhouse-common-sta
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
vector_version: 0.23.0
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
clickhouse:
|
||||||
|
hosts:
|
||||||
|
clickhouse-01:
|
||||||
|
ansible_host: <IP_here>
|
||||||
|
vector:
|
||||||
|
hosts:
|
||||||
|
vector-01:
|
||||||
|
ansible_host: <IP_here>
|
||||||
26
src/homework/08-ansible/8.2/playbook/readme.md
Normal file
26
src/homework/08-ansible/8.2/playbook/readme.md
Normal file
@@ -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`
|
||||||
69
src/homework/08-ansible/8.2/playbook/site.yml
Normal file
69
src/homework/08-ansible/8.2/playbook/site.yml
Normal file
@@ -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
|
||||||
227
src/homework/08-ansible/8.2/readme.md
Normal file
227
src/homework/08-ansible/8.2/readme.md
Normal file
@@ -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: <IP_here>
|
||||||
|
```
|
||||||
|
|
||||||
|
> 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).
|
||||||
Reference in New Issue
Block a user