Подготовка
Ознакомитесь со статьей – Terraform быстрый старт.
Выполните все действия по настройке провайдера, составлению основных конфигурационных файлов.
Добавить описание ресурсов
После блока авторизации provider “openstack” {} необходимо добавить следующее:
Network
resource "openstack_networking_network_v2" "network" {
name = "my_network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet" {
name = "my_subnet"
network_id = openstack_networking_network_v2.network.id
cidr = "10.0.0.0/24"
ip_version = 4
}
resource "openstack_networking_port_v2" "port" {
name = "my_port"
network_id = openstack_networking_network_v2.network.id
admin_state_up = "true"
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet.id
ip_address = "10.0.0.10"
}
}
Так как сеть состоит из разных ресурсов, требуется описания самой сети, подсети, и порта (IP адрес), который добавится к инстансу.
- 1.
openstack_networking_network_v2– описываем название сети и включаем её. - 2.
openstack_networking_subnet_v2– определяем подсеть в сети. - 3.
openstack_networking_network_v2.network.id– забираем аттрибут ресурса, что позволит не заполнять ID созданной сети. - 4.
cidr– указываем подсеть, её размерность. - 5.
ip_version– какой протокол используется (в примере, IP v4).
Добавление IP к ВМ
- 1.
openstack_networking_port_v2– указываем ID сети, к которой привязываем порт (ID сети можно узнать выполнив –openstack_networking_network_v2.network.id). - 2. Выделяем IP-адрес в блоке –
fixed_ip. - 3. В данном блоке ссылаемся на подсеть, созданную ранее –
openstack_networking_subnet_v2.subnet.id. - 4.
ip_address– указываем сам IP адрес. Если этого не сделать, то адрес присвоится автоматически.
Создание инстанса с IP-адресом
Появляется новый блок – network, в котором при создании ВМ идёт ссылка на ID уже созданного порта в блоке – openstack_networking_port_v2.port.id.
openstack_compute_instance_v2
resource "openstack_compute_instance_v2" "instance" {
name = "my_instance"
image_name = "Ubuntu 22.04"
flavor_name = "4vcpu.8ram"
key_pair = openstack_compute_keypair_v2.keypair.name
network {
port = openstack_networking_port_v2.port.id
}
}
Запуск развертывания
terraform plan
# openstack_networking_network_v2.network will be created
+ resource "openstack_networking_network_v2" "network" {
+ admin_state_up = true
+ all_tags = (known after apply)
+ availability_zone_hints = (known after apply)
+ dns_domain = (known after apply)
+ external = (known after apply)
+ id = (known after apply)
+ mtu = (known after apply)
+ name = "my_network"
+ port_security_enabled = (known after apply)
+ qos_policy_id = (known after apply)
+ region = (known after apply)
+ shared = (known after apply)
+ tenant_id = (known after apply)
+ transparent_vlan = (known after apply)
}
# openstack_networking_subnet_v2.subnet will be created
+ resource "openstack_networking_subnet_v2" "subnet" {
+ all_tags = (known after apply)
+ cidr = "10.0.0.0/24"
+ enable_dhcp = true
+ gateway_ip = (known after apply)
+ id = (known after apply)
+ ip_version = 4
+ ipv6_address_mode = (known after apply)
+ ipv6_ra_mode = (known after apply)
+ name = "my_subnet"
+ network_id = (known after apply)
+ no_gateway = false
+ region = (known after apply)
+ service_types = (known after apply)
+ tenant_id = (known after apply)
}
# openstack_networking_port_v2.port will be created
+ resource "openstack_networking_port_v2" "port" {
+ admin_state_up = true
+ all_fixed_ips = (known after apply)
+ all_security_group_ids = (known after apply)
+ all_tags = (known after apply)
+ device_id = (known after apply)
+ device_owner = (known after apply)
+ dns_assignment = (known after apply)
+ dns_name = (known after apply)
+ id = (known after apply)
+ mac_address = (known after apply)
+ name = "my_port"
+ network_id = (known after apply)
+ port_security_enabled = (known after apply)
+ qos_policy_id = (known after apply)
+ region = (known after apply)
+ tenant_id = (known after apply)
+ fixed_ip {
+ ip_address = "10.0.0.10"
+ subnet_id = (known after apply)
}
}
# openstack_compute_instance_v2.instance will be created
+ resource "openstack_compute_instance_v2" "instance" {
+ access_ip_v4 = (known after apply)
+ access_ip_v6 = (known after apply)
+ all_metadata = (known after apply)
+ all_tags = (known after apply)
+ availability_zone = (known after apply)
+ created = (known after apply)
+ flavor_id = (known after apply)
+ flavor_name = "4vcpu.8ram"
+ force_delete = false
+ id = (known after apply)
+ image_id = (known after apply)
+ image_name = "Ubuntu 22.04"
+ key_pair = "my_key_pair_name"
+ name = "my_instance"
+ power_state = "active"
+ region = (known after apply)
+ security_groups = (known after apply)
+ stop_before_destroy = false
+ updated = (known after apply)
+ network {
+ access_network = false
+ fixed_ip_v4 = (known after apply)
+ fixed_ip_v6 = (known after apply)
+ floating_ip = (known after apply)
+ mac = (known after apply)
+ name = (known after apply)
+ port = (known after apply)
+ uuid = (known after apply)
}
}
Если всё корректно, то:
terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Подтвердите выполнение командой yes.
Ресурсы создадутся, и информация будет добавлена в новый файл состояний.
Если какие-то ресурсы удалены из кода, но они присутствуют в файле состояния, то они будут удалены!
Применяйте команду terraform plan осторожно, во избежание непредвиденных последствий!