微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过openstack中的terraform将多个卷动态附加到多个实例?

如何解决如何通过openstack中的terraform将多个卷动态附加到多个实例?

我编写了一个 terraform 模块 (v0.14),可用于在 openstack 中配置多个实例,具有正确的可用性区域、网络端口、正确的风格,可以基于布尔输入变量创建 1 个本地磁盘或 1 个块存储卷,以及等等。现在我收到了一个功能请求,希望能够在多个实例上动态添加多个块存储卷(=网络/共享存储卷)。

所有实例如何在多个实例上为 1 个 blockstorage_volume 动态工作的示例:

#Dynamically create this resource ONLY if boolean "volume_storage" = true
resource "openstack_blockstorage_volume_v3" "shared_storage" {
  for_each          = var.volume_storage ? var.nodes : {}
  name              = "${each.value}-${each.key}.${var.domain}"
  size              = var.volume_s
  availability_zone = each.key
  volume_type       = var.volume_type
  image_id          = var.os_image
}
resource "openstack_compute_instance_v2" "instance" {
  for_each          = var.nodes
  name              = "${each.value}-${each.key}.${var.domain}"
  flavor_name       = var.flavor
  availability_zone = each.key
  key_pair          = var.key_pair
  image_id     = (var.volume_storage == true ? "" : var.os_image)
  config_drive = true
  #Dynamically create this parameter ONLY if boolean "volume_storage" = true
  dynamic "block_device" {
    for_each = var.volume_storage ? var.volume : {}
    content {
      uuid                  = openstack_blockstorage_volume_v3.shared_storage[each.key].id
      source_type           = "volume"
      destination_type      = "volume"
      delete_on_termination = var.volume_delete_termination
    }
  }
  user_data = data.template_file.cloud-init[each.key].rendered
  scheduler_hints {
    group = openstack_compute_servergroup_v2.servergroup.id
  }
  network {
    port = openstack_networking_port_v2.network-port[each.key].id
  }
}

现在假设我有 2 个实例,我想动态地向每个实例添加 2 个额外的 blockstorage_volumes,我的第一个想法是添加 2 个额外的动态资源作为试验:

#Dynamically create this resource if boolean "multiple_volume_storage" = true
resource "openstack_blockstorage_volume_v3" "multiple_shared_storage" {
  for_each          = var.multiple_volume_storage ? var.multiple_volumes : {}
  name              = each.value
  size              = var.volume_s
  availability_zone = each.key
  volume_type       = var.volume_type
  image_id          = var.os_image
}

.tf 文件中定义的 2 个额外块存储卷的示例:

variable "multiple_volumes" {
  type = map(any)
  default = {
    dc1 = "/volume/MysqL"
    dc2 = "/volume/postgres"

  }
}

.tf 文件中定义的 2 个实例的示例:

  nodes = {
    dc1 = "app-stage"
    dc2 = "app-stage"
  }

这里我尝试动态地将 2 个额外的 blockstorage_volumes 附加到每个实例:

resource "openstack_compute_volume_attach_v2" "attach_multiple_shared_storage" {
  for_each  = var.multiple_volume_storage ? var.multiple_volumes : {}
  instance_id = openstack_compute_instance_v2.instance[each.key].id
  volume_id   = openstack_blockstorage_volume_v3.multiple_shared_storage[each.key].id
}

openstack_compute_instance_v2.instance [each.key] 显然不正确,因为它现在每个实例只创建 1 个额外的 blockstorage_volume。有没有干净/优雅的方法解决这个问题?所以基本上将变量“multiple_volumes”中的所有给定卷附加到 var.nodes 中定义的每个单个实例

亲切的问候, 乔纳斯

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。