- Пример файла playbook.yml
- Пример файла requirements.yml
- Пример файла vault-password
- Пример файла .gitignore
- Пример файла example.txt
- Пример файла host_vars/localhost/vars.yml
- Пример файла host_vars/localhost/vault.yml
- Пример файла templates/example.j2
Ниже приведён пример автоматизации создания дроплетов (серверов) Digital Ocean, а также генерация файлов инвентаризации из шаблона при помощи Ansible.
Пример файла playbook.yml
- name: Create Digital Ocean droplets
# Запросы на создание выполняются на локальной машине
# и стучатся в API Digital ocean
hosts: localhost
connection: local
# Не используем факты с рабочей машины, поэтому отключаем
gather_facts: no
tasks:
- name: Register DO ssh key
# Регистрируем список ключей
register: do_ssh_key
community.digitalocean.digital_ocean_sshkey_info:
# Все обращения к DO через модуль выполняются с использованием токена
# Другой вариант - задавать переменную окружения DO_API_TOKEN
oauth_token: "{{ do_oauth_token }}"
- name: Create a new droplets
community.digitalocean.digital_ocean_droplet:
state: active
wait: yes
unique_name: yes
wait_timeout: 120
name: "example-droplet"
oauth_token: "{{ do_oauth_token }}"
# https://slugs.do-api.dev/
size: "s-1vcpu-1gb"
region: "ams3"
image: "docker-20-04"
# Добавляем в дроплет ключи, это может быть один ключ или несколько.
# Для добавления нужны их ID
ssh_keys:
- "{{ do_ssh_key.data.0.id }}"
# Если нам нужно нужно создать отдельные дроплеты, то используем цикл
# with_items: "{{ droplets_params | list }}"
- name: Create example from loop template
# Файл будет искаться в tempplates
# Переменные внутри файла будут браться из объявленных,
# либо можно объявить свои переменные через vars
# vars:
# my_list:
# - name: abc
# description: example
template:
src: example.j2
dest: example.txt
Пример файла requirements.yml
roles: []
# Коллекция для работы с DO
collections:
- community.digitalocean
Пример файла vault-password
vault-password
Пример файла .gitignore
# Файл с паролем должен быть в игноре и не попадать в репозиторий
# Закомментирован, чтобы показать пример
# vault-password
Пример файла example.txt
test test
Пример файла host_vars/localhost/vars.yml
config:
param1: value1
param2: value2
param3: value2
my_list:
- name: value1
description: example description 1
- name: value2
description: example description 2
# Шифрованная переменная находится в файле, ссылаемся на нее
some_token: "{{ vault_some_token }}"
Пример файла host_vars/localhost/vault.yml
$ANSIBLE_VAULT;1.1;AES256
62326639633236353537626166386639376164346137383433333862356138343734333732373161
3033383764303031393337633131613363383737306133340a396466326130663533393036313762
33623532303134323261326239383336663961616364316335323432383830353637343961643035
6663643732626563310a326364396164303239663332646435353336386263303138366331366430
62663130666564396462666135306137396438346336303032336161363133353366
Пример файла templates/example.j2
{# выполнение цикла #}
{% for my_item in my_list %}
{{my_item.name}} {{my_item.description}}
{% endfor %}
Самостоятельная работа
Ранее вы могли создавать инфраструктуру в облаке и вероятно делали это руками. Чем больше ручного участия, тем больше риск совершить ошибку или потратить на задачу больше времени. В современные технологи позволяют создавать необходимое количество серверов одной-двумя командами, меняя только переменные.
В этом задании научимся создавать инфраструктуру в Digital Ocean используя для этого коллекцию модулей. Внутри себя эти модули обращаются к API облака. Примерно по такому же принципу работает инструмент Terraform с которыми вы познакомитесь позднее.
-
Создайте 2 дроплета в Digital Ocean с параметрами, указанными ниже:
-
Образ -
docker-20-04
(Ubuntu с предустановленным Docker) -
Размер -
s-1vcpu-1gb
-
Регион -
ams3
-
Имя -
as-a-code-homework-XX
, где XX - это номер сервера. Пример итогового имени сервера - as-a-code-homework-02. Имя должно быть уникально -
Состояние -
active
-
-
Сформируйте инвентори файл с группой
digital-ocean
-
Создайте в Makefile команду
ping
, которая с помощью ad-hoc Ansible пингует созданную группу серверов. Проверьте, что команда выполняется успешно, созданные сервера должны ответить pong
Дополнительные материалы
- Ansible Galaxy - digitalocean collection — Коллекция для работы с облаком Digital Ocean
- Документация для работы с модулями Digital Ocean
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты