Skip to content

Commit 45a6f33

Browse files
mboissoncmd-ntrf
authored andcommitted
Add possibility for volume to be created out of terraform
1 parent daac37e commit 45a6f33

File tree

4 files changed

+81
-11
lines changed

4 files changed

+81
-11
lines changed

aws/infrastructure.tf

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,9 @@ resource "aws_instance" "instances" {
164164
}
165165

166166
resource "aws_ebs_volume" "volumes" {
167-
for_each = module.design.volumes
167+
for_each = {
168+
for x, values in module.design.volumes : x => values if lookup(values, "managed", true)
169+
}
168170
availability_zone = local.availability_zone
169171
size = each.value.size
170172
type = lookup(each.value, "type", null)
@@ -175,17 +177,32 @@ resource "aws_ebs_volume" "volumes" {
175177
}
176178
}
177179

180+
data "aws_ebs_volume" "existing_volumes" {
181+
for_each = {
182+
for x, values in module.design.volumes : x => values if !lookup(values, "managed", true)
183+
}
184+
185+
filter {
186+
name = "tag:Name"
187+
values = ["${var.cluster_name}-${each.key}"]
188+
}
189+
}
190+
178191
locals {
179192
device_names = [
180193
"/dev/sdf", "/dev/sdg", "/dev/sdh", "/dev/sdi", "/dev/sdj",
181194
"/dev/sdk", "/dev/sdl", "/dev/sdm", "/dev/sdn", "/dev/sdp"
182195
]
196+
volume_ids = {
197+
for key, values in module.design.volumes :
198+
key => lookup(values, "managed", true) ? aws_ebs_volume.volumes[key].id : data.aws_ebs_volume.existing_volumes[key].id
199+
}
183200
}
184201

185202
resource "aws_volume_attachment" "attachments" {
186203
for_each = module.design.volumes
187204
device_name = local.device_names[index(module.design.volume_per_instance[each.value.instance], replace(each.key, "${each.value.instance}-", ""))]
188-
volume_id = aws_ebs_volume.volumes[each.key].id
205+
volume_id = local.volume_ids[each.key]
189206
instance_id = aws_instance.instances[each.value.instance].id
190207
skip_destroy = true
191208
}
@@ -207,7 +224,7 @@ locals {
207224
pv_key => {
208225
for name, specs in pv_values :
209226
name => merge(
210-
{ glob = "/dev/disk/by-id/*${replace(aws_ebs_volume.volumes["${x}-${pv_key}-${name}"].id, "-", "")}" },
227+
{ glob = "/dev/disk/by-id/*${replace(local.volume_ids["${x}-${pv_key}-${name}"], "-", "")}" },
211228
specs,
212229
)
213230
} if contains(values.tags, pv_key)

azure/infrastructure.tf

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ resource "azurerm_linux_virtual_machine" "instances" {
127127
}
128128

129129
resource "azurerm_managed_disk" "volumes" {
130-
for_each = module.design.volumes
130+
for_each = {
131+
for x, values in module.design.volumes : x => values if lookup(values, "managed", true)
132+
}
131133
name = format("%s-%s", var.cluster_name, each.key)
132134
location = var.location
133135
resource_group_name = local.resource_group_name
@@ -136,9 +138,24 @@ resource "azurerm_managed_disk" "volumes" {
136138
disk_size_gb = each.value.size
137139
}
138140

141+
data "azurerm_managed_disk" "existing_volumes" {
142+
for_each = {
143+
for x, values in module.design.volumes : x => values if ! lookup(values, "managed", true)
144+
}
145+
name = format("%s-%s", var.cluster_name, each.key)
146+
resource_group_name = local.resource_group_name
147+
}
148+
149+
locals {
150+
volume_ids = {
151+
for key, values in module.design.volumes:
152+
key => lookup(values, "managed", true) ? azurerm_managed_disk.volumes[key].id: data.azurerm_managed_disk.existing_volumes[key].id
153+
}
154+
}
155+
139156
resource "azurerm_virtual_machine_data_disk_attachment" "attachments" {
140157
for_each = module.design.volumes
141-
managed_disk_id = azurerm_managed_disk.volumes[each.key].id
158+
managed_disk_id = local.volume_ids[each.key]
142159
virtual_machine_id = azurerm_linux_virtual_machine.instances[each.value.instance].id
143160
lun = index(module.design.volume_per_instance[each.value.instance], replace(each.key, "${each.value.instance}-", ""))
144161
caching = "ReadWrite"

gcp/infrastructure.tf

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,17 +134,37 @@ resource "google_compute_instance" "instances" {
134134
}
135135

136136
resource "google_compute_disk" "volumes" {
137-
for_each = module.design.volumes
137+
for_each = {
138+
for x, values in module.design.volumes : x => values if lookup(values, "managed", true)
139+
}
138140
name = "${var.cluster_name}-${each.key}"
139141
type = lookup(each.value, "type", "pd-standard")
140142
zone = local.zone
141143
size = each.value.size
142144
}
143145

146+
data "google_compute_disk" "existing_volumes" {
147+
for_each = {
148+
for x, values in module.design.volumes : x => values if ! lookup(values, "managed", true)
149+
}
150+
name = "${var.cluster_name}-${each.key}"
151+
}
152+
153+
locals{
154+
volume_self_links = {
155+
for key, values in module.design.volumes:
156+
key => lookup(values, "managed", true) ? google_compute_disk.volumes[key].self_link : data.google_compute_disk.existing_volumes[key].self_link
157+
}
158+
volume_device_names = {
159+
for key, values in module.design.volumes:
160+
key => lookup(values, "managed", true) ? google_compute_disk.volumes[key].name : data.google_compute_disk.existing_volumes[key].name
161+
}
162+
}
163+
144164
resource "google_compute_attached_disk" "attachments" {
145165
for_each = module.design.volumes
146-
disk = google_compute_disk.volumes[each.key].self_link
147-
device_name = google_compute_disk.volumes[each.key].name
166+
disk = local.volume_self_links[each.key]
167+
device_name = local.volume_device_names[each.key]
148168
mode = "READ_WRITE"
149169
instance = google_compute_instance.instances[each.value.instance].self_link
150170
}

openstack/infrastructure.tf

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ resource "openstack_compute_instance_v2" "instances" {
9797
}
9898

9999
resource "openstack_blockstorage_volume_v3" "volumes" {
100-
for_each = module.design.volumes
100+
for_each = {
101+
for x, values in module.design.volumes : x => values if lookup(values, "managed", true)
102+
}
101103
name = "${var.cluster_name}-${each.key}"
102104
description = "${var.cluster_name} ${each.key}"
103105
size = each.value.size
@@ -106,10 +108,24 @@ resource "openstack_blockstorage_volume_v3" "volumes" {
106108
enable_online_resize = lookup(each.value, "enable_resize", false)
107109
}
108110

111+
data "openstack_blockstorage_volume_v3" "existing_volumes" {
112+
for_each = {
113+
for x, values in module.design.volumes : x => values if !lookup(values, "managed", true)
114+
}
115+
name = "${var.cluster_name}-${each.key}"
116+
}
117+
118+
locals {
119+
volume_ids = {
120+
for key, values in module.design.volumes :
121+
key => lookup(values, "managed", true) ? openstack_blockstorage_volume_v3.volumes[key].id : data.openstack_blockstorage_volume_v3.existing_volumes[key].id
122+
}
123+
}
124+
109125
resource "openstack_compute_volume_attach_v2" "attachments" {
110126
for_each = module.design.volumes
111127
instance_id = openstack_compute_instance_v2.instances[each.value.instance].id
112-
volume_id = openstack_blockstorage_volume_v3.volumes[each.key].id
128+
volume_id = local.volume_ids[each.key]
113129
}
114130

115131
locals {
@@ -132,7 +148,7 @@ locals {
132148
pv_key => {
133149
for name, specs in pv_values :
134150
name => merge(
135-
{ glob = "/dev/disk/by-id/*${substr(openstack_blockstorage_volume_v3.volumes["${x}-${pv_key}-${name}"].id, 0, 20)}" },
151+
{ glob = "/dev/disk/by-id/*${substr(local.volume_ids["${x}-${pv_key}-${name}"], 0, 20)}" },
136152
specs,
137153
)
138154
} if contains(values.tags, pv_key)

0 commit comments

Comments
 (0)