Terraform - инструмент для создания виртуальных окружений в соответствии с подходом IaaS - инфраструктура как сервис и Iac - инфраструктура как код.
Инструкция описывает порядок действий на примере диструбутива Ubuntu.
Установите виртуальный сервер из шаблона 'Ansible & Openstack' или пройдите установку софта по инструкции в статье
Установка клиента Openstack и подключение Ansible.
В случае установки хоста из Heat шаблона, виртуальный сервер будет уже настроен и можно сразу переходить к пункту 3.
Установленный виртуальный сервер будет содержать файл /root/keystone_<datacenter_name> c переменными окружения для авторизации вида:
unset OS_USERNAME OS_PASSWORD OS_TENANT_NAME OS_AUTH_URL OS_TOKEN OS_URL
unset SERVICE_TOKEN SERVICE_ENDPOINT
unset OS_USER_DOMAIN_NAME OS_PROJECT_DOMAIN_NAME OS_PROJECT_NAME
export OS_IMAGE_API_VERSION=2
export OS_URL=<< dc_endpoint_public_url >>
export OS_AUTH_URL=<< dc_endpoint_public_url >>
export NEW_OS_AUTH_URL=<< dc_endpoint_public_url >>
export OS_USER_DOMAIN_NAME=myaccount003-domain
export OS_PROJECT_DOMAIN_NAME=myaccount003-domain
export OS_USERNAME=myaccount003
export OS_PROJECT_NAME=myaccount003-dc01
export OS_PASSWORD=<< openstack_password >>
export OS_IDENTITY_API_VERSION=3
EOF
Или создаем файл самостоятельно.
1. Заходим на хост и устанавливаем необходимые пакеты:
myhost$ ssh-agent bash
myhost$ ssh -A ubuntu@shellbox01
shellbox01$ sudo -i
shellbox01# curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
shellbox01# apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
2. Cоздаем директорию Terraform проекта и файл описания ресурсов
shellbox01:~# mkdir testtf
shellbox01:~# cat > testtf/main.tf <<EOF
resource "openstack_compute_instance_v2" "tf-01" {
name = "tf-01"
image_name = "Ubuntu Focal 20.04 (2020-05-16)"
flavor_name = "vibox1"
key_pair = "my_ssh_pub_key"
# можно указывать уже добавленный SSH ключ или создать новый, используя
# ресурс openstack_compute_keypair_v2
}
EOF
3. Подгружаем переменные окружения, дальше мы готовы к использованию Terraform
shellbox01:~# cd testtf
shellbox01:~/testtf# source /root/keystone_dc01
shellbox01:~/testtf# terraform 0.13upgrade -yes
shellbox01:~/testtf# terraform init
Initializing the backend...
Initializing provider plugins...
- Using previously-installed terraform-providers/openstack v1.31.0
Terraform has been successfully initialized!
shellbox01:~/testtf# terraform apply
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# openstack_compute_instance_v2.terraform will be created
+ resource "openstack_compute_instance_v2" "tf-01" {
+ flavor_name = "vibox1"
+ force_delete = false
+ image_name = "Ubuntu Focal 20.04 (2020-05-16)"
+ key_pair = "my_ssh_pub_key"
+ name = "terraform"
+ power_state = "active"
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Enter a value: yes
openstack_compute_instance_v2.terraform: Creating...
openstack_compute_instance_v2.terraform: Still creating... [10s 20s 30s 40s elapsed]
openstack_compute_instance_v2.terraform: Creation complete after 43s [id=84227b14-4743-4564-9413-3f05ee90e3a5]
shellbox01:~/testtf# terraform show
# openstack_compute_instance_v2.tf-01:
resource "openstack_compute_instance_v2" "tf-01" {
access_ip_v4 = "10.20.1.12"
all_metadata = {}
all_tags = []
availability_zone = "nova"
flavor_id = "49ca3a66-df84-4d73-a28d-177152ac1179"
flavor_name = "vibox1"
force_delete = false
id = "a4ddb7ce-3f59-48ae-94a5-007962cf6122"
image_id = "828376f9-61f3-4d94-ae14-f09f568e56d7"
image_name = "Ubuntu Focal 20.04 (2020-05-16)"
key_pair = "my_ssh_pub_key"
name = "tf-01"
power_state = "active"
security_groups = [
"default",
]
stop_before_destroy = false
network {
access_network = false
fixed_ip_v4 = "10.20.1.12"
mac = "fa:16:3e:b1:04:c3"
name = "myaccount-dc01-lan"
}
}
shellbox01:~/testtf# openstack server list -c 'Name' \
-c 'Status' -c 'Image' -c 'Flavor'
+-------------------+--------+----------------------------------+--------+
| Name | Status | Image | Flavor |
+-------------------+--------+----------------------------------+--------+
| shellbox | ACTIVE | Ubuntu Bionic 18.04 (2020-03-27) | vibox2 |
| tf-01 | ACTIVE | Ubuntu Focal 20.04 (2020-05-16) | vibox1 |
+-------------------+--------+----------------------------------+--------+
Официальная документация по использованию Terraform в Openstack:
https://www.terraform.io/docs/providers/openstack/index.html