Сегодня будем настраивать Ansible на работу внутри Terraform.
Для начала установим ansible:
sudo apt-get install -y ansible
Отредактируем terraform на заполнение инвентаря данными машин:
nano ~/bin/main.tf
data "template_file" "inventory" {
template = file("./_templates/inventory.tpl")
vars = {
user = "altlinux"
vm1 = join("", [yandex_compute_instance.vm1.name, " ansible_host=", yandex_compute_instance.vm1.network_interface.0.nat_ip_address])
vm2 = join("", [yandex_compute_instance.vm2.name, " ansible_host=", yandex_compute_instance.vm2.network_interface.0.nat_ip_address])
}
}
resource "local_file" "save_inventory" {
content = data.template_file.inventory.rendered
filename = "/home/altlinux/ansible/inventory"
}
Создаём директорию для шаблонов:
mkdir ~/bin/_templates/
Cоздадим шаблон для инвентарного файла:
nano ~/bin/_templates/inventory.tpl
${vm1}
${vm2}
[all:vars]
ansible_user = ${user}
ansible_ssh_extra_args = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
ansible_python_interpreter = /usr/bin/python3
Напишем playbook-сценарий для развёртывания и настройки Docker и App1 из нашего репозитория DockerHub на машины vm1 и vm2
nano ~/ansible/playbook.yml
---
- hosts: all
remote_user: altlinux
become: true
tasks:
- name: Install docker
apt_rpm:
name:
- docker-ce
- python3-module-pip
state: present
update_cache: true
ignore_errors: true
- name: Started and enabled docker
systemd:
name: docker
state: started
enabled: true
- name: Install docker-py
command:
cmd: pip3 install docker-py
- name: Start a container App1
docker_container:
name: app1
hostname: "{{ ansible_hostname }}"
image: defeaded/app1:1.0
ports:
- "80:80"
Для установки Docker в данном примере используется модуль пакетного менеджера apt_rpm и модуль docker_container для разворачивания приложения.
Сделаем скрипт для автоматического запуска ansible playbook:
nano /home/altlinux/bin/DeployApp.sh
#!/bin/bash
cd /home/altlinux/ansible
ansible-playbook -i inventory playbook.yml
Дадим права на выполнение скрипта:
chmod +x /home/altlinux/bin/DeployApp.sh
Запустим скрипт:
DeployApp.sh
И проверим работу:
cat /home/altlinux/lb.ip
Открываем сайт по адресу в файле и проверяем балансировку обновляя страницу.