Подготовка
Ознакомьтесь со статьей – Terraform быстрый старт.
Выполните все действия по настройке провайдера, составлению основных конфигурационных файлов.
Добавить описание ресурсов
После блока авторизации provider “openstack” {} необходимо добавить следующее:
resource "openstack_networking_secgroup_v2" "secgroup" {
name = "my_secgroup"
description = "My neutron security group"
}
openstack_networking_secgroup_v2 – описываем название новой security group. Это является обязательным параметром.
delete_default_rules = "true", – настойки по умолчанию (не обязательно).
Далее, указать настройки, ограничения и разрешения по портам.
Для этого используется ресурс – openstack_networking_secgroup_rule_v2
Пример:
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_1" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_2" {
direction = "egress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 80
port_range_max = 80
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}
- В примере создаются правила для входящего (ingress) и исходящего (egress) трафика.
- Обязательным условием является обращение к ID группы.
- Его можно получить, используя следующую конструкцию –
openstack_networking_secgroup_v2.secgroup.id. - Помимо создания самой группы, правила необходимо применить к порту.
Как создавать порт, сеть и присвоение IP-адреса к инстансу описано в статье – Создание сетей.
resource "openstack_networking_port_v2" "port" {
name = "my_port"
network_id = openstack_networking_network_v2.network.id
admin_state_up = "true"
security_group_ids = [openstack_networking_secgroup_v2.secgroup.id]
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet.id
ip_address = "10.0.0.10"
}
}
- В примере добавляется созданная группа безопасности в порт инстанса, который создавали ранее.
- Указывается параметр –
security_group_ids. - Данный параметр принимает массив значений, в связи с этим, возможно указать несколько групп через запятую.
Если у вас много отдельных правил, код можно оптимизировать, используя циклы, карты и массивы, чтобы не прописывать для каждого правила отдельный ресурс.
Запуск развертывания
После добавления нового ресурса, стоит проверить корректность выполнения команды – terraform plan:
terraform plan
# openstack_networking_secgroup_rule_v2.secgroup_rule_1 will be created
+ resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_1" {
+ direction = "ingress"
+ ethertype = "IPv4"
+ id = (known after apply)
+ port_range_max = 22
+ port_range_min = 22
+ protocol = "tcp"
+ region = (known after apply)
+ remote_group_id = (known after apply)
+ remote_ip_prefix = "0.0.0.0/0"
+ security_group_id = (known after apply)
+ tenant_id = (known after apply)
}
# openstack_networking_secgroup_rule_v2.secgroup_rule_2 will be created
+ resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_2" {
+ direction = "egress"
+ ethertype = "IPv4"
+ id = (known after apply)
+ port_range_max = 80
+ port_range_min = 80
+ protocol = "tcp"
+ region = (known after apply)
+ remote_group_id = (known after apply)
+ remote_ip_prefix = "0.0.0.0/0"
+ security_group_id = (known after apply)
+ tenant_id = (known after apply)
}
# openstack_networking_secgroup_v2.secgroup will be created
+ resource "openstack_networking_secgroup_v2" "secgroup" {
+ all_tags = (known after apply)
+ description = "My neutron security group"
+ id = (known after apply)
+ name = "my_secgroup"
+ region = (known after apply)
+ tenant_id = (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 осторожно, во избежание непредвиденных последствий!