Хакатон MaxPatrol VM, часть 2: Ansible playbook для установки ПО из TAR-архива. Прошлая часть была про то, как я подготавливал виртуалку на Linux, чтобы работать с ней с помощью Ansible. По первому заданию мне нужно было поставить с помощью Ansible некоторые программное обеспечение из TAR-архива (обозначим здесь как Libre Data Analytics). Чтобы его установить необходимо просто скачать архив с сайта и распаковать в любую директорию. Я решил делать это прямо в домашнюю директорию пользователя vmuser. 🙂
Сам playbook аналогичен тестовому, который я запускал в прошлый раз. Такая же последовательность task-ов Ansible. Только в этот раз кроме тасков типа , который позволяет выполнять bash-скрипты, я использовал более специализированные.
1. - создание временной директории
2. - скачивание файла архива
3. - разархивирование архива
4. - удаление файла архива
5. - копирование из временно директории в постоянную
6. - удаление временной директории
7. - получение фактической версии ПО и запуск ПО с дефолтными параметрами (требуется по условию задания)
8. - вывод фактической версии ПО
Необходимую версию ПО и путь до директории, куда будет установлено ПО, оформил в виде переменных и .
Код плейбука:
- name: Install Libre Data Analytics from tar.gz file
hosts: all
vars:
libre_data_analytics_version: 2.13.0
libre_data_analytics_path: "/home/{{ ansible_user }}/"
tasks:
- name: Create temporary download directory
ansible.builtin.tempfile:
state: directory
prefix: libre-data-analytics-
register: download_dir
- name: Download Libre Data Analytics archive
ansible.builtin.get_url:
url: "https://artifacts.libre-data-analytics.org/releases/bundle/libre-data-analytics/{{ libre_data_analytics_version }}/libre-data-analytics-{{ libre_data_analytics_version }}-linux-x64.tar.gz"
dest: "{{ download_dir.path }}/libre-data-analytics.tar.gz"
mode: '0640'
- name: Extract Libre Data Analytics files
ansible.builtin.unarchive:
src: "{{ download_dir.path }}/libre-data-analytics.tar.gz"
dest: "{{ download_dir.path }}"
remote_src: true
- name: Remove libre_data_analytics_path
ansible.builtin.file:
path: "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"
state: absent
- name: Copy files to the libre_data_analytics_path
ansible.builtin.copy:
src: "{{ download_dir.path }}/libre-data-analytics-{{ libre_data_analytics_version }}"
dest: "{{ libre_data_analytics_path }}"
remote_src: true
- name: Remove temporary download directory
ansible.builtin.file:
path: "{{ download_dir.path }}"
state: absent
- name: Get Libre Data Analytics version
ansible.builtin.shell: cd "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"; ./bin/libre-data-analytics -V
register: installed_version
- name: Libre Data Analytics
ansible.builtin.shell: cd "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"; nohup ./bin/libre-data-analytics /dev/null 2>&1 &
- name: Display Outputs
debug:
msg: "Path: {{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}, installed version from binary {{ installed_version.stdout }}"
Для сдачи я разбил плейбук на файлы и директории, как это было сделано в примере выполненного задания:
nginx_from_repo_on_ubuntu
├── playbook.yaml
└── roles
└── nginx_from_repo_on_ubuntu
├── defaults
│ └── main.yaml
└── tasks
└── main.yaml
В итоге задание у меня успешно приняли. 👍 Можно двигаться дальше. 🙂