-
Notifications
You must be signed in to change notification settings - Fork 9
/
main.tf
109 lines (96 loc) · 3.45 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Создание SSH-ключа
resource "openstack_compute_keypair_v2" "key_tf" {
name = "key_tf"
region = var.region
public_key = var.public_key
}
# Запрос ID внешней сети по имени
data "openstack_networking_network_v2" "external_net" {
name = "external-network"
}
# Создание роутера
resource "openstack_networking_router_v2" "router_tf" {
name = "router_tf"
external_network_id = data.openstack_networking_network_v2.external_net.id
}
# Создание сети
resource "openstack_networking_network_v2" "network_tf" {
name = "network_tf"
}
# Создание подсети
resource "openstack_networking_subnet_v2" "subnet_tf" {
network_id = openstack_networking_network_v2.network_tf.id
name = "subnet_tf"
cidr = var.subnet_cidr
}
# Подключение роутера к подсети
resource "openstack_networking_router_interface_v2" "router_interface_tf" {
router_id = openstack_networking_router_v2.router_tf.id
subnet_id = openstack_networking_subnet_v2.subnet_tf.id
}
# Поиск ID образа (из которого будет создан сервер) по его имени
data "openstack_images_image_v2" "ubuntu_image" {
most_recent = true
visibility = "public"
name = "Ubuntu 20.04 LTS 64-bit"
}
# Создание уникального имени флейвора
resource "random_string" "random_name_server" {
length = 16
special = false
}
# Создание конфигурации сервера с 1 ГБ RAM и 1 vCPU
# Параметр disk = 0 делает сетевой диск загрузочным
resource "openstack_compute_flavor_v2" "flavor_server" {
name = "server-${random_string.random_name_server.result}"
ram = "1024"
vcpus = "1"
disk = "0"
is_public = "false"
}
# Создание сетевого загрузочного диска размером 5 ГБ из образа
resource "openstack_blockstorage_volume_v3" "volume_server" {
name = "volume-for-server1"
size = "10"
image_id = data.openstack_images_image_v2.ubuntu_image.id
volume_type = var.volume_type
availability_zone = var.az_zone
enable_online_resize = true
lifecycle {
ignore_changes = [image_id]
}
}
# Создание сервера
resource "openstack_compute_instance_v2" "server_tf" {
name = "server_tf"
flavor_id = openstack_compute_flavor_v2.flavor_server.id
key_pair = openstack_compute_keypair_v2.key_tf.id
availability_zone = var.az_zone
network {
uuid = openstack_networking_network_v2.network_tf.id
}
block_device {
uuid = openstack_blockstorage_volume_v3.volume_server.id
source_type = "volume"
destination_type = "volume"
boot_index = 0
}
vendor_options {
ignore_resize_confirmation = true
}
lifecycle {
ignore_changes = [image_id]
}
}
# Создание публичного IP-адреса
resource "openstack_networking_floatingip_v2" "fip_tf" {
pool = "external-network"
}
# Привязка публичного IP-адреса к серверу
resource "openstack_compute_floatingip_associate_v2" "fip_tf" {
floating_ip = openstack_networking_floatingip_v2.fip_tf.address
instance_id = openstack_compute_instance_v2.server_tf.id
}
output "server_outputs" {
value = "ssh root@${openstack_networking_floatingip_v2.fip_tf.address}"
}