Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Инфраструктура как код DevOps: Управление инфраструктурой

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Ниже приведён пример автоматизации создания дроплетов (серверов) 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


Дополнительные материалы

  1. Ansible Galaxy - digitalocean collection — Коллекция для работы с облаком Digital Ocean
  2. Документация для работы с модулями Digital Ocean

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»