Выполнение домашнего задания по теме "8.2. Работа с Playbook".
Q/A
Задание 1
Подготовка к выполнению
- (Необязательно) Изучите, что такое clickhouse и vector
- Создайте свой собственный (или используйте старый) публичный репозиторий на github с произвольным именем.
- Скачайте playbook из репозитория с домашним заданием и перенесите его в свой репозиторий.
- Подготовьте хосты в соответствии с группами из предподготовленного playbook.
Новый playbook расположен в одноимённой директории. Хосты прописываются в файле inventory/prod.yml, который необходимо создать из playbook.yml.example.
Дополнительно перенёс handler с именем Start clickhouse service в отдельный task, так как по какой-то причине handler
иногда не отрабатывал из-за таймаута. При этом следующий task не отрабатывал из-за того, что сервис clickhouse-server не был запущен.
Задание 2
Основная часть
- Приготовьте свой собственный inventory файл prod.yml
Файл inventory/prod.yml будет выглядеть в точности как playbook.yml.example, только с прописанным ip-адресом.
- Допишите playbook: нужно сделать ещё один play, который устанавливает и настраивает vector.
- При создании tasks рекомендуется использовать модули:
get_url,template,unarchive,file.- Tasks должны: скачать нужной версии дистрибутив, выполнить распаковку в выбранную директорию, установить
vector
На официальном сайте есть несколько путей установить vector:
- Через установщик, но в таком случае не понятно, как указать версию.
- Через пакетный менеджер yum.
Этот вариант требует добавление нового стороннего репозитория в систему. - Путём скачивания скомпилированного исполняемого файла.
Был выбран последний вариант как наиболее надёжный. В таком случае будут определены следующие шаги выполнения установки:
- установка менеджера архивов
tarна машине - скачивание архива с официального сайта
- распаковка архива
- копирование исполняемого файла в одну из директорий из списка
PATH(например,/usr/local/bin)
С учётом данных шагов весь play по установке будет выглядеть следующим образом:
- 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.
vector:
hosts:
vector-01:
ansible_host: <IP_here>
- Запустите ansible-lint site.yml и исправьте ошибки, если они есть.
ansible-playbook -i inventory/prod.yml site.yml --tags=vector
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
- Попробуйте запустить playbook на этом окружении с флагом --check.
ansible-playbook -i inventory/prod.yml site.yml --tags=vector --check
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
- Запустите playbook на prod.yml окружении с флагом --diff. Убедитесь, что изменения на системе произведены.
ansible-playbook -i inventory/prod.yml site.yml --tags=vector --diff
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
- Повторно запустите playbook с флагом --diff и убедитесь, что playbook идемпотентен
ansible-playbook -i inventory/prod.yml site.yml --tags=vector --diff
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
- Подготовьте README.md файл по своему playbook. В нём должно быть описано: что делает playbook, какие у него есть параметры и теги.
Написан playbook/readme.md.