Skip to content

Latest commit

 

History

History
132 lines (104 loc) · 7.24 KB

README.md

File metadata and controls

132 lines (104 loc) · 7.24 KB

Домашнее задание к занятию «Введение в Terraform»

Чеклист готовности к домашнему заданию

  1. Скачайте и установите актуальную версию terraform >=1.4.X . Приложите скриншот вывода команды terraform --version.

------

Задание 1

  1. Перейдите в каталог src. Скачайте все необходимые зависимости, использованные в проекте.
  2. Изучите файл .gitignore. В каком terraform файле согласно этому .gitignore допустимо сохранить личную, секретную информацию?

personal.auto.tfvars

  1. Выполните код проекта. Найдите в State-файле секретное содержимое созданного ресурса random_password, пришлите в качестве ответа конкретный ключ и его значение.

"result": "OImGgw8PDWu7NRRu"

  1. Раскомментируйте блок кода, примерно расположенный на строчках 29-42 файла main.tf. Выполните команду terraform validate. Объясните в чем заключаются намеренно допущенные ошибки? Исправьте их.

on main.tf line 28, in resource "docker_container" "1nginx": - Имя должно начинаться с буквы или символа подчеркивания и может содержать только буквы, цифры, символы подчеркивания и дефисы. on main.tf line 23, in resource "docker_image": - Все блоки ресурсов должны иметь 2 метки (тип, имя). on main.tf line 30, in resource "docker_container" "nginx": 30: name = "example_${random_password.random_string_FAKE.resulT}" - Управляемый ресурс «random_password» «random_string_FAKE» не был объявлен в корневом модуле.

  1. Выполните код. В качестве ответа приложите вывод команды docker ps
root@devnet:~/ter-homeworks/01/src# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES
cd095bc471ee   021283c8eb95   "/docker-entrypoint.…"   40 seconds ago   Up 39 seconds   0.0.0.0:8000->80/tcp   example_OImGgw8PDWu7NRRu
root@devnet:~/ter-homeworks/01/src# 
  1. Замените имя docker-контейнера в блоке кода на hello_world, выполните команду terraform apply -auto-approve. Объясните своими словами, в чем может быть опасность применения ключа -auto-approve? В качестве ответа дополнительно приложите вывод команды docker ps.

terraform apply -auto-approve - Применение нового плана конфигурации без запроса подтверждения, риск непредсказуемых изменений конфигурации.

root@devnet:~/ter-homeworks/01/src# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  1. Уничтожьте созданные ресурсы с помощью terraform. Убедитесь, что все ресурсы удалены. Приложите содержимое файла terraform.tfstate.
{
  "version": 4,
  "terraform_version": "1.5.2",
  "serial": 63,
  "lineage": "00d1ffe6-a1c5-daff-24f8-4e4df3a83b73",
  "outputs": {},
  "resources": [],
  "check_results": null
}
  1. Объясните, почему при этом не был удален docker образ nginx:latest ? Ответ подкрепите выдержкой из документации провайдера.
keep_locally (логическое значение) Если true, образ Docker не будет удален при операции уничтожения. 
Если это неверно, он удалит образ из локального хранилища докера при операции уничтожения.

Документация провайдера


Задание 2*

  1. Изучите в документации provider Virtualbox от shekeriev.
  2. Создайте с его помощью любую виртуальную машину. Чтобы не использовать VPN советуем выбрать любой образ с расположением в github из списка

В качестве ответа приложите plan для создаваемого ресурса и скриншот созданного в VB ресурса.

sudo terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
  + create

Terraform will perform the following actions:

  # virtualbox_vm.vm1 will be created
  + resource "virtualbox_vm" "vm1" {
      + cpus      = 1
      + id        = (known after apply)
      + image     = "https://app.vagrantup.com/shekeriev/boxes/debian-11/versions/0.2/providers/virtualbox.box"
      + memory    = "512 mib"
      + name      = "debian-111"
      + status    = "running"
      + user_data = jsonencode(
            {
              + foo  = "bar"
              + role = "worker"
            }
        )

      + network_adapter {
          + device                 = "IntelPro1000MTDesktop"
          + host_interface         = "vboxnet0"
          + ipv4_address           = (known after apply)
          + ipv4_address_available = (known after apply)
          + mac_address            = (known after apply)
          + status                 = (known after apply)
          + type                   = "hostonly"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + IPAddress = (known after apply)

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run
"terraform apply" now.

Созданный VB ресурс