VK Cloud logo
Обновлена25 сентября 2023 г. в 06:01

Примеры манифестов

Создание ресурсов группы сервисов «Виртуальные машины»

С помощью этого манифеста будут созданы следующие объекты группы сервисов Виртуальные машины:

  • Виртуальная машина;
  • Тип виртуальной машины;
  • Образ виртуальной машины;
  • Ключевая пара.

Листинг манифеста для создания ресурсов группы сервисов Виртуальные машины:

1terraform {
2  required_providers {
3    vkcs = {
4      source="vk-cs/vkcs"
5      version=" ~> 0.1.12"
6    }
7  }
8}

Создание диска (volume)

1resource "vkcs_blockstorage_volume" "vol" {
2 name = "instance1_vol"
3 size = 10
4 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47"
5 volume_type = "ceph"
6 availability_zone = "AZ1"
7}
8resource "vkcs_compute_instance" "instance1" {
9 # Имя инстанса внутри Платформы
10 name = "terraform-test"
11 # ID флейвора для инстанса. Можно узнать с помощью команды: openstack flavor list
12 flavor_id = "dc84b839-a97b-4074-83d6-233531ffd8b3"
13 # Имя ключевой пары для инстанса. Можно узнать с помощью команды: openstack keypair list
14 key_pair = "some_keypair"
15 # SG для инстанса
16 security_groups = ["default"]
17 block_device {
18 uuid = "${vkcs_blockstorage_volume.vol.id}"
19 source_type = "volume"
20 boot_index = 0
21  destination_type = "volume"
22 delete_on_termination = true
23 }
24 # Сеть для инстанса.
25 network {
26 name = "net-project001"
27 }
28}

Создание блочных устройств без ВМ

С помощью этого манифеста будут созданы следующие объекты:

  • Блочное хранилище;
  • Снимок блочного хранилища.

Листинг манифеста создания блочных устройств без ВМ:

1terraform {
2 required_providers {
3  vkcs = {
4   source = "vk-cs/vkcs"
5   version = "~> 0.1.12"
6  }
7 }
8}
9resource "vkcs_blockstorage_volume" "vol" {
10 name = "vol"
11 size = 10
12 volume_type = "ceph"
13 availability_zone = "AZ1"
14}
15resource "vkcs_blockstorage_snapshot" "vol-snapshot" {
16 name = "vol_snapshot"
17 volume_id = "${vkcs_blockstorage_volume.vol.id}"
18}

Создание сетевых устройств без ВМ

С помощью этого манифеста будут созданы следующие объекты сетевой подсистемы:

  • Виртуальная сеть;
  • Подсеть;
  • Виртуальный роутер;
  • Группа безопасности.

Листинг манифеста создания сетевых устройств без ВМ:

1terraform {
2 required_providers {
3  vkcs = {
4   source = "vk-cs/vkcs"
5   version = "~> 0.1.12"
6  }
7 }
8}
9resource "vkcs_networking_network" "network_test" {
10 name = "test_network"
11 admin_state_up = "true"
12 port_security_enabled = false
13}
14resource "vkcs_networking_subnet" "subnet_test" {
15 name = "test_subnet"
16 network_id = "${vkcs_networking_network.network_test.id}"
17 cidr = "192.168.199.0/24"
18}
19resource "vkcs_networking_router" "router_test" {
20 name = "router_test"
21 admin_state_up = true
22 external_network_id = "76dfd377-b303-4b69-8cab-0d2f640130c5"
23}
24resource "vkcs_networking_router_interface" "router_interface_test" {
25 router_id = "${vkcs_networking_router.router_test.id}"
26 subnet_id = "${vkcs_networking_subnet.subnet_test.id}"
27}
28resource "vkcs_networking_secgroup" "secgroup_test" {
29 name = "secgroup_test"
30 description = "My security group"
31}
32resource "vkcs_networking_secgroup_rule" "secgroup_rule_test" {
33 direction = "ingress"
34 ethertype = "IPv4"
35 protocol = "tcp"
36 port_range_min = 22
37 port_range_max = 22
38 remote_ip_prefix = "0.0.0.0/0"
39 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}"
40}

Создание ресурсов группы сервисов «Балансировщики нагрузки»

С помощью этого манифеста будут созданы следующие объекты группы сервисов «Балансировщики нагрузки»:

  • HTTP балансировщики нагрузки.
  • TCP балансировщики нагрузки.

Дополнительно будут созданы:

  • Тестовая сеть, подсеть, группа безопасности.
  • Инстанс ВМ.
  • Блочное хранилище.
1terraform {
2 required_providers {
3  vkcs = {
4   source = "vk-cs/vkcs"
5   version = "~> 0.1.12"
6  }
7 }
8}
9resource "vkcs_networking_network" "network_test" {
10 name = "network_test"
11 admin_state_up = "true"
12 port_security_enabled = "true"
13}
14resource "vkcs_networking_subnet" "subnet_test" {
15 name = "test_subnet"
16 network_id = "${vkcs_networking_network.network_test.id}"
17 cidr = "192.168.199.0/24"
18}
19resource "vkcs_networking_router" "router_test" {
20 name = "router_test"
21 admin_state_up = true
22 external_network_id = "76dfd377-b303-4b69-8cab-0d2f640130c5"
23}
24resource "vkcs_networking_router_interface" "router_interface_test" {
25 router_id = "${vkcs_networking_router.router_test.id}"
26 subnet_id = "${vkcs_networking_subnet.subnet_test.id}"
27}
28resource "vkcs_networking_secgroup" "secgroup_test" {
29 name = "secgroup_test"
30 description = "My security group"
31}
32resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_ssh" {
33 direction = "ingress"
34 ethertype = "IPv4"
35 protocol = "tcp"
36 port_range_min = 22
37 port_range_max = 22
38 remote_ip_prefix = "0.0.0.0/0"
39 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}"
40}
41resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_http" {
42 direction = "ingress"
43 ethertype = "IPv4"
44 protocol = "tcp"
45 port_range_min = 8080
46 port_range_max = 8080
47 remote_ip_prefix = "0.0.0.0/0"
48 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}"
49}
50resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_tcp" {
51 direction = "ingress"
52 ethertype = "IPv4"
53 protocol = "tcp"
54 port_range_min = 9090
55 port_range_max = 9090
56 remote_ip_prefix = "0.0.0.0/0"
57 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}"
58}
59resource "vkcs_lb_loadbalancer" "loadbalancer_test_http" {
60 name = "loadbalancer_test_http"
61 vip_subnet_id = "${vkcs_networking_subnet.subnet_test.id}"
62 security_group_ids = [ "${vkcs_networking_secgroup.secgroup_test.id}" ]
63}
64resource "vkcs_lb_loadbalancer" "loadbalancer_test_tcp" {
65 name = "loadbalancer_test_tcp"
66 vip_subnet_id = "${vkcs_networking_subnet.subnet_test.id}"
67 security_group_ids = [ "${vkcs_networking_secgroup.secgroup_test.id}" ]
68}
69resource "vkcs_lb_listener" "listener_test_http" {
70 name = "listener_test_http"
71 protocol = "HTTP"
72 protocol_port = 8080
73 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_http.id}"
74}
75resource "vkcs_lb_listener" "listener_test_tcp" {
76 name = "listener_test_tcp"
77 protocol = "TCP"
78 protocol_port = 9090
79 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_tcp.id}"
80}
81resource "vkcs_lb_pool" "pool_test_http" {
82 name = "pool_test_http"
83 protocol = "HTTP"
84 lb_method = "ROUND_ROBIN"
85 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_http.id}"
86}
87resource "vkcs_lb_pool" "pool_test_tcp" {
88 name = "pool_test_tcp"
89 protocol = "TCP"
90 lb_method = "ROUND_ROBIN"
91 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_tcp.id}"
92}
93resource "vkcs_lb_l7policy" "l7policy_test_http" {
94 name = "test"
95 action = "REDIRECT_TO_URL"
96 description = "test description"
97 position = 1
98 listener_id = "${vkcs_lb_listener.listener_test_http.id}"
99 redirect_url = "http://www.example.com"
100}
101resource "vkcs_lb_l7rule" "l7rule_test" {
102 l7policy_id = "${vkcs_lb_l7policy.l7policy_test_http.id}"
103 compare_type = "EQUAL_TO"
104 type = "PATH"
105 value = "/api"
106}
107resource "vkcs_blockstorage_volume" "vol1_test" {
108 name = "instance1_vol"
109 size = 10
110 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47"
111 volume_type = "ceph"
112 availability_zone = "AZ1"
113}
114resource "vkcs_blockstorage_volume" "vol2_test" {
115 name = "instance1_vol"
116 size = 10
117 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47"
118 volume_type = "ceph"
119 availability_zone = "AZ1"
120}
121resource "vkcs_compute_instance" "instance1_test" {
122 name = "terraform-instance1-test"
123 flavor_id = "fc83b839-a97b-4074-83d6-211531ffd8b3"
124 key_pair = "CentOS-Basic-1-1-10GB-5CDfA91u"
125 security_groups = ["secgroup_test"]
126 block_device {
127 uuid = "${vkcs_blockstorage_volume.vol1_test.id}"
128 source_type = "volume"
129 boot_index = 0
130 destination_type = "volume"
131 delete_on_termination = true
132 }
133 network {
134 name = "network_test"
135 }
136 depends_on = [
137 vkcs_networking_network.network_test,
138 vkcs_networking_subnet.subnet_test,
139 vkcs_networking_secgroup.secgroup_test
140 ]
141}
142resource "vkcs_compute_instance" "instance2_test" {
143 name = "terraform-instance2-test"
144 flavor_id = "fc83b839-a97b-4074-83d6-211531ffd8b3"
145 key_pair = "CentOS-Basic-1-1-10GB-5CDfA91u"
146 security_groups = ["secgroup_test"]
147 block_device {
148 uuid = "${vkcs_blockstorage_volume.vol2_test.id}"
149 source_type = "volume"
150 boot_index = 0
151 destination_type = "volume"
152 delete_on_termination = true
153 }
154 network {
155 name = "network_test"
156 }
157 depends_on = [
158 vkcs_networking_network.network_test,
159 vkcs_networking_subnet.subnet_test,
160 vkcs_networking_secgroup.secgroup_test
161 ]
162}
163resource "vkcs_lb_members" "members_http_test" {
164 pool_id = "${vkcs_lb_pool.pool_test_http.id}"
165 member {
166 address = "${vkcs_compute_instance.instance1_test.access_ip_v4}"
167 protocol_port = 8080
168 weight = 2
169 }
170  member {
171 address = "${vkcs_compute_instance.instance2_test.access_ip_v4}"
172 protocol_port = 8080
173 weight = 10
174 }
175}
176resource "vkcs_lb_members" "members_tcp_test" {
177 pool_id = "${vkcs_lb_pool.pool_test_tcp.id}"
178 member {
179 address = "${vkcs_compute_instance.instance1_test.access_ip_v4}"
180 protocol_port = 9090
181 weight = 10
182 }
183 member {
184 address = "${vkcs_compute_instance.instance2_test.access_ip_v4}"
185 protocol_port = 9090
186 weight = 2
187 }
188}

Создание ресурсов группы сервисов «Кластеры Kubernetes»

С помощью этого манифеста будут созданы следующие объекты группы сервисов Кластеры Kubernetes:

  • Кластер Kubernetes.
  • Группа кластеров Kubernetes.

Листинг манифеста создания ресурсов группы сервисов Кластеры Kubernetes:

1terraform {
2 required_providers {
3 vkcs = {
4 source = "vk-cs/vkcs"
5 version = "0.1.4"
6 }
7 }
8}
9data "vkcs_kubernetes_clustertemplate" "cluster_template" {
10 name = "Kubernetes-almalinux-v1.22.6-mcs.external"
11}
12data "vkcs_networking_subnet" "subnet_project" {
13 name = "subnet-project001"
14}
15data "vkcs_networking_network" "network_project" {
16 name = "net-project001"
17}
18data "vkcs_compute_flavor" "k8s_flavor" {
19 name = "Standard-2-4"
20}

Создание кластера k8s

1resource "vkcs_kubernetes_cluster" "cluster_test" {
2 name = "cluster-test"
3 cluster_template_id = data.vkcs_kubernetes_clustertemplate.cluster_template.id
4 subnet_id = data.vkcs_networking_subnet.subnet_project.id
5 network_id = data.vkcs_networking_network.network_project.id
6 master_flavor = data.vkcs_compute_flavor.k8s_flavor.id
7 master_count = 1
8 # Имя ключевой пары для инстанса кластера. Можно узнать с помощью команды: openstack 
9keypair list
10 keypair = "my_keys"
11 availability_zone = "AZ1"
12 floating_ip_enabled = true
13}

Создание группы кластеров k8s

1resource "vkcs_kubernetes_node_group" "nodegroup_k8s" {
2 name = "nodegroup-k8s"
3 cluster_id = vkcs_kubernetes_cluster.cluster_test.id
4 node_count = 1
5 availability_zones = ["AZ1"]
6 volume_type = "ceph"
7 volume_size = 30
8 max_node_unavailable = 1
9}

Создание ресурсов группы сервисов «Управляемые БД»

С помощью этого манифеста будут созданы следующие объекты группы сервисов Управляемые БД:

  • Экземпляр БД.
  • Кластер БД.

Листинг манифеста создания ресурсов группы сервисов Управляемые БД:

1terraform {
2 required_providers {
3 vkcs = {
4 source = "vk-cs/vkcs"
5 version = "~> 0.1.12"
6 }
7 }
8}
9data "vkcs_networking_subnet" "subnet_project" {
10 name = "subnet-project001"
11}
12data "vkcs_networking_network" "network_project" {
13 name = "net-project001"
14}
15data "vkcs_compute_flavor" "db_flavor" {
16 name = "Basic-1-2"
17}
18resource "vkcs_db_cluster" "db_cluster" {
19 name = "db-cluster"
20# Версии можно взять из UI портала Самообслуживания
21 datastore {
22 type = "postgresql"
23 version = "12"
24 }
25 cluster_size = 3
26 flavor_id = data.vkcs_compute_flavor.db_flavor.id
27 volume_size = 10
28 volume_type = "ceph"
29 network {
30 uuid = data.vkcs_networking_network.network_project.id
31 }
32}
33resource "vkcs_db_instance" "db_instance" {
34 name = "db-instance"
35# Версии можно взять из UI портала самообслуживания
36 datastore {
37 type = "mysql"
38 version = "5.7"
39 }
40 flavor_id = data.vkcs_compute_flavor.db_flavor.id
41 size = 10
42 volume_type = "ceph"
43 network {
44 uuid = data.vkcs_networking_network.network_project.id
45 }
46}