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.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)
|
||||
|
||||
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