@@ -42,7 +42,7 @@ terraform {
42
42
43
43
variable "instance_name" {
44
44
# set with set-name.sh <instance_name>
45
- type = string
45
+ type = string
46
46
default = " hpcs.main"
47
47
}
48
48
@@ -52,27 +52,27 @@ locals {
52
52
" cloud-config.yaml" ,
53
53
{
54
54
kind_dashboard_admin_yaml = base64encode (file (" files/admin-user.yaml" )),
55
- setup_sha512 = base64encode (sha512 (file (" files/setup.sh" ))),
56
- ed25519_private = indent (4 , file (" secrets/ssh_host_ed25519_key" )),
57
- ed25519_public = file (" secrets/ssh_host_ed25519_key.pub" ),
58
- hpcs_cluster_yaml = base64encode (file (" files/hpcs-cluster.yaml" )),
59
- public_keys = setsubtract (split (" \n " , trim (file (" secrets/public_keys" ), " \n " )), [" " ] ),
60
- tunnel_keys = setsubtract (split (" \n " , trim (file (" secrets/tunnel_keys" ), " \n " )), [" " ] ),
61
- setup_sh = base64encode (file (" files/setup.sh" )),
62
- })
55
+ setup_sha512 = base64encode (sha512 (file (" files/setup.sh" ))),
56
+ ed25519_private = indent (4 , file (" secrets/ssh_host_ed25519_key" )),
57
+ ed25519_public = file (" secrets/ssh_host_ed25519_key.pub" ),
58
+ hpcs_cluster_yaml = base64encode (file (" files/hpcs-cluster.yaml" )),
59
+ public_keys = setsubtract (split (" \n " , trim (file (" secrets/public_keys" ), " \n " )), [" " ]),
60
+ tunnel_keys = setsubtract (split (" \n " , trim (file (" secrets/tunnel_keys" ), " \n " )), [" " ]),
61
+ setup_sh = base64encode (file (" files/setup.sh" )),
62
+ })
63
63
}
64
64
65
65
# The actual VM is defined here
66
66
resource "openstack_compute_instance_v2" "instance" {
67
- name = " ${ var . instance_name } "
68
- image_name = " Ubuntu-24.04"
67
+ name = var. instance_name
68
+ image_name = " Ubuntu-24.04"
69
69
flavor_name = " standard.small"
70
- user_data = local. cloud_init
70
+ user_data = local. cloud_init
71
71
security_groups = [
72
72
openstack_networking_secgroup_v2 . security_group . name ,
73
73
]
74
74
network {
75
- uuid = " ${ openstack_networking_network_v2 . instance_net . id } "
75
+ uuid = openstack_networking_network_v2. instance_net . id
76
76
}
77
77
# Pouta API refuses to create the instance unless the subnet is ready to go
78
78
depends_on = [
@@ -86,13 +86,13 @@ resource "openstack_compute_instance_v2" "instance" {
86
86
# Network for the VM to be in. It is not allowed in most cases to have
87
87
# VMs directly in the public network on Pouta
88
88
resource "openstack_networking_network_v2" "instance_net" {
89
- name = " ${ var . instance_name } -net"
89
+ name = " ${ var . instance_name } -net"
90
90
admin_state_up = " true"
91
91
}
92
92
93
93
# A router to attach the network defined earlier to the public network
94
94
resource "openstack_networking_router_v2" "router" {
95
- name = " ${ var . instance_name } -router"
95
+ name = " ${ var . instance_name } -router"
96
96
admin_state_up = " true"
97
97
# Magic UUID is the UUID of our public network, somewhat difficult
98
98
# to refer to it by name here so we are stuck with the magic thing
@@ -102,13 +102,13 @@ resource "openstack_networking_router_v2" "router" {
102
102
103
103
# Attachment of the router to the VM subnet
104
104
resource "openstack_networking_router_interface_v2" "interface" {
105
- router_id = " ${ openstack_networking_router_v2 . router . id } "
106
- subnet_id = " ${ openstack_networking_subnet_v2 . instance_subnet . id } "
105
+ router_id = openstack_networking_router_v2. router . id
106
+ subnet_id = openstack_networking_subnet_v2. instance_subnet . id
107
107
}
108
108
109
109
# The floating ip, which will be a public IP used to access the VM
110
110
resource "openstack_networking_floatingip_v2" "ip" {
111
- pool = " public"
111
+ pool = " public"
112
112
depends_on = [openstack_networking_router_interface_v2 . interface ]
113
113
lifecycle {
114
114
# Protect the public IP
@@ -121,23 +121,23 @@ resource "openstack_networking_floatingip_v2" "ip" {
121
121
# one can redeploy an instance and attach the IP to the new instance
122
122
# without the need to do anything about the IP object itself.
123
123
resource "openstack_compute_floatingip_associate_v2" "ip_attach" {
124
- floating_ip = " ${ openstack_networking_floatingip_v2 . ip . address } "
125
- instance_id = " ${ openstack_compute_instance_v2 . instance . id } "
124
+ floating_ip = openstack_networking_floatingip_v2. ip . address
125
+ instance_id = openstack_compute_instance_v2. instance . id
126
126
}
127
127
128
128
# Volume to store some data that we want to preserve during re-deployments
129
129
resource "openstack_blockstorage_volume_v3" "data" {
130
- name = " ${ var . instance_name } -data"
131
- size = 10
130
+ name = " ${ var . instance_name } -data"
131
+ size = 10
132
132
lifecycle {
133
133
# Do not destroy the volume... ever...
134
134
prevent_destroy = true
135
135
}
136
136
}
137
137
138
138
resource "openstack_blockstorage_volume_v3" "docker" {
139
- name = " ${ var . instance_name } -docker"
140
- size = 20
139
+ name = " ${ var . instance_name } -docker"
140
+ size = 20
141
141
lifecycle {
142
142
# Do not destroy the volume... ever...
143
143
prevent_destroy = true
@@ -147,20 +147,20 @@ resource "openstack_blockstorage_volume_v3" "docker" {
147
147
# Similarly to the floating ip case, we need an attachment of the volume
148
148
# defined above
149
149
resource "openstack_compute_volume_attach_v2" "data" {
150
- instance_id = " ${ openstack_compute_instance_v2 . instance . id } "
151
- volume_id = " ${ openstack_blockstorage_volume_v3 . data . id } "
150
+ instance_id = openstack_compute_instance_v2. instance . id
151
+ volume_id = openstack_blockstorage_volume_v3. data . id
152
152
}
153
153
154
154
resource "openstack_compute_volume_attach_v2" "docker" {
155
- instance_id = " ${ openstack_compute_instance_v2 . instance . id } "
156
- volume_id = " ${ openstack_blockstorage_volume_v3 . docker . id } "
155
+ instance_id = openstack_compute_instance_v2. instance . id
156
+ volume_id = openstack_blockstorage_volume_v3. docker . id
157
157
}
158
158
159
159
# ######################################################################
160
160
# Security group and its rules
161
161
# ######################################################################
162
162
resource "openstack_networking_secgroup_v2" "security_group" {
163
- name = " ${ var . instance_name } "
163
+ name = var. instance_name
164
164
}
165
165
166
166
resource "openstack_networking_secgroup_rule_v2" "ssh-in-staff-vpn" {
@@ -170,7 +170,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-staff-vpn" {
170
170
port_range_min = 22
171
171
port_range_max = 22
172
172
remote_ip_prefix = " 193.166.85.0/24"
173
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
173
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
174
174
}
175
175
176
176
resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-00" {
@@ -180,7 +180,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-00" {
180
180
port_range_min = 22
181
181
port_range_max = 22
182
182
remote_ip_prefix = " 193.166.1.0/24"
183
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
183
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
184
184
}
185
185
186
186
resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-01" {
@@ -190,7 +190,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-01" {
190
190
port_range_min = 22
191
191
port_range_max = 22
192
192
remote_ip_prefix = " 193.166.2.0/24"
193
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
193
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
194
194
}
195
195
196
196
resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-02" {
@@ -200,7 +200,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-espoo-office-02" {
200
200
port_range_min = 22
201
201
port_range_max = 22
202
202
remote_ip_prefix = " 193.166.80.0/23"
203
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
203
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
204
204
}
205
205
206
206
resource "openstack_networking_secgroup_rule_v2" "ssh-in-kajaani-office-00" {
@@ -210,7 +210,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-kajaani-office-00" {
210
210
port_range_min = 22
211
211
port_range_max = 22
212
212
remote_ip_prefix = " 193.166.86.0/24"
213
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
213
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
214
214
}
215
215
216
216
resource "openstack_networking_secgroup_rule_v2" "ssh-in-pa-vpn-00" {
@@ -220,7 +220,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-pa-vpn-00" {
220
220
port_range_min = 22
221
221
port_range_max = 22
222
222
remote_ip_prefix = " 193.166.83.0/24"
223
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
223
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
224
224
}
225
225
226
226
resource "openstack_networking_secgroup_rule_v2" "ssh-in-jaroslaw-00" {
@@ -230,7 +230,7 @@ resource "openstack_networking_secgroup_rule_v2" "ssh-in-jaroslaw-00" {
230
230
port_range_min = 22
231
231
port_range_max = 22
232
232
remote_ip_prefix = " 87.94.57.247/24"
233
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
233
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
234
234
}
235
235
236
236
resource "openstack_networking_secgroup_rule_v2" "http-out" {
@@ -240,7 +240,7 @@ resource "openstack_networking_secgroup_rule_v2" "http-out" {
240
240
port_range_min = 80
241
241
port_range_max = 80
242
242
remote_ip_prefix = " 0.0.0.0/0"
243
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
243
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
244
244
}
245
245
246
246
resource "openstack_networking_secgroup_rule_v2" "http-in" {
@@ -260,7 +260,7 @@ resource "openstack_networking_secgroup_rule_v2" "https-out" {
260
260
port_range_min = 443
261
261
port_range_max = 443
262
262
remote_ip_prefix = " 0.0.0.0/0"
263
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
263
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
264
264
}
265
265
resource "openstack_networking_secgroup_rule_v2" "https-in" {
266
266
direction = " ingress"
@@ -269,7 +269,7 @@ resource "openstack_networking_secgroup_rule_v2" "https-in" {
269
269
port_range_min = 443
270
270
port_range_max = 443
271
271
remote_ip_prefix = " 0.0.0.0/0"
272
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
272
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
273
273
}
274
274
resource "openstack_networking_secgroup_rule_v2" "k8s-api-in-pa-vpn" {
275
275
direction = " ingress"
@@ -278,7 +278,7 @@ resource "openstack_networking_secgroup_rule_v2" "k8s-api-in-pa-vpn" {
278
278
port_range_min = 6444
279
279
port_range_max = 6444
280
280
remote_ip_prefix = " 193.166.83.0/24"
281
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
281
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
282
282
}
283
283
resource "openstack_networking_secgroup_rule_v2" "aux-k8s-portsp-in" {
284
284
direction = " ingress"
@@ -287,7 +287,7 @@ resource "openstack_networking_secgroup_rule_v2" "aux-k8s-portsp-in" {
287
287
port_range_min = 30001
288
288
port_range_max = 30004
289
289
remote_ip_prefix = " 0.0.0.0/0"
290
- security_group_id = " ${ openstack_networking_secgroup_v2 . security_group . id } "
290
+ security_group_id = openstack_networking_secgroup_v2. security_group . id
291
291
}
292
292
293
293
resource "openstack_networking_secgroup_rule_v2" "icinga-api-in" {
@@ -309,9 +309,9 @@ resource "openstack_networking_secgroup_rule_v2" "icmp-in" {
309
309
}
310
310
# Subnet for the VM. On Pouta all VMs need to be in subnets to boot properly
311
311
resource "openstack_networking_subnet_v2" "instance_subnet" {
312
- name = " ${ var . instance_name } -subnet"
313
- network_id = " ${ openstack_networking_network_v2 . instance_net . id } "
314
- cidr = " 10.0.0.0/24"
312
+ name = " ${ var . instance_name } -subnet"
313
+ network_id = openstack_networking_network_v2. instance_net . id
314
+ cidr = " 10.0.0.0/24"
315
315
ip_version = 4
316
316
dns_nameservers = [
317
317
" 1.1.1.1" ,
@@ -321,7 +321,7 @@ resource "openstack_networking_subnet_v2" "instance_subnet" {
321
321
322
322
# Handy output to get the IP address that we've got in the output
323
323
output "address" {
324
- value = " ${ openstack_networking_floatingip_v2 . ip . address } "
324
+ value = openstack_networking_floatingip_v2. ip . address
325
325
}
326
326
output "cloud-init" {
327
327
value = local. cloud_init
0 commit comments