Управление инфраструктурой. Terraform.
Подготовка окружения
-
Установите vscode
-
Установите плагин Remote SSH
-
Создайте VM для роли управления terraform
-
Добавить конфигурацию узла в VScode с ранее созданным узлом
Если при подключении запрашивается пароль, то можно модифицировать конфигурацию ssh(
~/.ssh/config
)Host 172.17.* User cloudadmin IdentityFile ~/.ssh/id_ed25519
В
IdentityFile
нужно вписать путь до вашего приватного ключа -
Во вкладке с файлами откройте домашнюю директорию пользователя
cloudadmin
-
Установите на узле плагин terraform от hashicorp
Установка terraform
- Перейти на сайт: https://developer.hashicorp.com/terraform/install
- Убеждаемся, что HashiCorp не очень любит Россию и либо пользуемся зеркалом https://cloud.vk.com/docs/manage/tools-for-using-services/terraform/quick-start (первый пункт)
либо скачиваем с google дискаcurl -l -O https://hashicorp-releases.mcs.mail.ru/terraform/1.7.4/terraform_1.7.4_linux_amd64.zip
pip install gdown gdown https://drive.google.com/uc?id=1W6z0_-DDcEobFHoNz4lErO1wMHF2wnyc
- Разархивируем
sudo unzip terraform_1.7.4_linux_amd64.zip -d /usr/local/bin
- Проверим, что все установилось
Подготовка terraform
-
Добавим зеркало для работы с terraform без vpn
Создаем файл
.terraformrc
touch ~/. terraformrc
Заполним содержимое:
provider_installation { network_mirror { url = "https://terraform-mirror.mcs.mail.ru" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }
-
Создать директорию
terraform_openstack
и в ней файлы:data.tf
,main.tf
,outputs.tf
,provider.tf
,variables.tf
-
Заполнить
provider.tf
terraform { required_version = ">= 0.14.0" required_providers { openstack = { source = "terraform-provider-openstack/openstack" version = "~> 1.53.0" } } }
-
Выполнить команду
terraform init
и убедиться что все прошло успешно -
Перейти в openstack в меню API ACCESS Скачайте
clouds.yml
Добавить его в рабочую директорию и добавить графуpassword
-
в
provider.tf
добавьте директивуprovider "openstack" { cloud = "openstack" }
Задание 1.
Чтобы создать виртуальную машину, нам нужен какой-то образ, в openstack образы можно называть одинаково, но вот id образов будет разный, необходимо получить id необходимого нам образа Для этого пользуемся документацией(она работает тоже только с vpn или прокси) https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/data-sources/images_image_v2
В моем случае я буду пользоваться Ubuntu-server-20.04
Суть задания, добавить переменную с названием образа, создать data source образа и вывести его id в outputs
Пример:
variable "image" {
type = string
default = "Ubuntu-server-20.04"
}
data "openstack_images_image_v2" "ubuntu20" {
name = var.image
most_recent = true
}
output "image_id" {
value = data.openstack_images_image_v2.ubuntu20.id
}
Выполнить terraform plan
и убедиться что именно это мы и хотели создать
Ну и выполняем(terraform apply
):
Задание 2
Создать 2 виртуальные машины. Ссылка: https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/compute_instance_v2
Требования:
- Ресурсы создать в main.tf
- Flavor должен быть small
- Id образа не вписывать в ручную
- У машин должен быть разный образ, но обе должны быть ubuntu
- У машин должен быть разный объем диска
- Outputs должен быть вида: имя машины: IP адрес машины, дополнительные сведения можно добавить по желанию
- В переменные необходимо занести: объем диска, имя машин
- Убедиться, что к машинам можно подключиться по ssh
Задание 3:
Удалить все что создали с помощью terraform