Files
netology-devops/src/homework/07-terraform/7.4
..
2022-06-28 13:48:50 +07:00
2022-06-28 13:48:50 +07:00
2022-06-28 13:48:50 +07:00
2022-06-28 13:48:50 +07:00
2022-06-28 13:48:50 +07:00

Выполнение домашнего задания по теме "7.4. Средства командной работы над инфраструктурой".

Q/A

Задание 1

Настроить terraform cloud

Не выполнил, так как нет доступа и есть вероятность, что terraform cloud не будет работать с инфраструктурой yandex.cloud.

Задание 2

Написать серверный конфиг для атлантиса.

Смысл задания познакомиться с документацией о серверной конфигурации и конфигурации уровня репозитория.

Создай server.yaml который скажет атлантису:

  1. Укажите, что атлантис должен работать только для репозиториев в вашем github (или любом другом) аккаунте.
  2. На стороне клиентского конфига разрешите изменять workflow, то есть для каждого репозитория можно будет указать свои дополнительные команды.
  3. В workflow используемом по-умолчанию сделайте так, что бы во время планирования не происходил lock состояния.

Создай atlantis.yaml который, если поместить в корень terraform проекта, скажет атлантису:

  1. Надо запускать планирование и аплай для двух воркспейсов stage и prod.
  2. Необходимо включить автопланирование при изменении любых файлов *.tf.

В качестве результата приложите ссылку на файлы server.yaml и atlantis.yaml.

Создан файл server.yaml для конфигурации сервера, указанной в задании. А именно:

  • id: - задаёт текущий репозиторий в качестве отслеживаемого atlantis.
  • allowed_overrides: [apply_requirements] - указывает возможность изменения workflow на уровне репозитория.
  • в ключе workflows.default.plan задаётся поведение команды atlatis plan по умолчанию для всех конфигураций.

В файле atlantis.yaml добавлены два проекта, чтобы разграничить workspace, для которых применяются изменения. При этом у каждого проекта определён массив autoplan.when_modified, в котором закреплено, что необходимо автоматически запускать команды terraform при изменении любых файлов *.tf

Задание 3

Знакомство с каталогом модулей.

  1. В каталоге модулей найдите готовый модуль для создания yandex_compute_instance.
  2. Изучите как устроен модуль. Задумайтесь, будете ли в своем проекте использовать этот модуль или непосредственно ресурс yandex_compute_instance без помощи модуля?
  3. В рамках предпоследнего задания был создан yandex_compute_instance. Создайте аналогичный инстанс при помощи найденного модуля.

В качестве результата задания приложите ссылку на созданный блок конфигураций.

В качестве готового модуля для yandex.cloud можно использовать реализацию от hamnsk.

В данном случае, лучше всего будет использовать напрямую yandex_compute_instance, так как лишние внешние зависимости только усложняют построение конфигурации. Лучше всего будет взять за основу и переработать данный модуль "под себя". К тому же, из-за блокировки реестра terraform, использование модулей может быть затруднено.

Для инициализации данного модуля необходимо добавить следующий конфиг в main.tf:

module "yc-vpc" {
  name = terraform.workspace
  source  = "git@github.com:hamnsk/terraform-yandex-vpc.git?ref=v0.5.0"
  create_folder = false
  yc_folder_id = var.YC_FOLDER_ID
  yc_cloud_id = var.YC_CLOUD_ID
  nat_instance = true
  subnets = [
    {
      zone           = var.YC_ZONE
      v4_cidr_blocks = ["192.168.10.0/24"]
    }
  ]
}

При этом необходимо добавить новые переменные в variables.tf, а так же инициализировать их новыми переменными окружения.

К сожалению, в данной конфигурации не получилось инициализировать данный модуль из-за ошибки:

Error: failed to find latest image with family "nat-instance-ubuntu"

Выглядит это так, будто модуль опирается на образ ОС, которой теперь нет в реестре. Это ещё один пункт к тому, что лучше самостоятельно создавать и поддерживать модули для terraform.