Google cloud platform 具有多磁盘GCP的Terraform多VM
我正在尝试创建虚拟机列表,每个虚拟机都有需要创建和连接的磁盘列表 在下面的示例中,我必须使用3个磁盘test-d01-data和test-d01-data-disk以及test-d01-commitlog-disk创建test-d01计算 类似地,test-d02使用2个磁盘test-d02-data-01和test-d02-data-02进行计算 对于expample,下面的VM_信息表示所需的配置,它将Google cloud platform 具有多磁盘GCP的Terraform多VM,google-cloud-platform,virtual-machine,terraform,disk,terraform-provider-gcp,Google Cloud Platform,Virtual Machine,Terraform,Disk,Terraform Provider Gcp,我正在尝试创建虚拟机列表,每个虚拟机都有需要创建和连接的磁盘列表 在下面的示例中,我必须使用3个磁盘test-d01-data和test-d01-data-disk以及test-d01-commitlog-disk创建test-d01计算 类似地,test-d02使用2个磁盘test-d02-data-01和test-d02-data-02进行计算 对于expample,下面的VM_信息表示所需的配置,它将 { name = "test-d01"
{
name = "test-d01"
zone = "us-east1-b"
disk = [
{
disk_name = "test-d01-data"
disk_type = "pd-ssd"
disk_size = "60"
},
{
disk_name = "test-d01-data-disk"
disk_type = "pd-standard"
disk_size = "15"
},
{
disk_name = "test-d01-commitlog-disk"
disk_type = "pd-ssd"
disk_size = "30"
}
]
},
{
name = "test-d02"
zone = "us-east1-b"
disk=[
{
disk_name = "test-d02-data"
disk_type = "pd-ssd"
disk_size = "60"
},
{
disk_name = "test-d02-data-disk"
disk_type = "pd-standard"
disk_size = "15"
}
]
},
]
:
可以使用
计算实例配置中的附加磁盘部分。
但是,在某些情况下,可能会通过
compute实例配置不可取或不可能,例如
使用count
变量附加动态磁盘数
因此,在这种情况下,创建带有属性的google\u compute\u实例
的简单方法可能不适用
简而言之,这个想法是先创建持久磁盘,然后创建VM实例,并将新磁盘附加到新创建的实例上。此测试部署由根配置文件my_instances.tf
和可重用模块/instance/main.tf
组成
1.可以独立创建持久磁盘google\u compute\u disk
。为了简单起见,在根文件my_instances.tf
中使用了5个文本块
2.调用可重用模块instance/main.tf
并将VM属性和磁盘列表传递给模块,以便:
- 创建一个VM实例
google_compute_实例
李>
- 使用binding objects
将新的空磁盘附加到新创建的VM实例google\u compute\u attached\u disk
- 使用binding objects
。
由于for_each
只接受一个映射或一组字符串,因此toset
函数用于将磁盘列表转换为一组
:
可以使用
计算实例配置中的附加磁盘
部分。
但是,在某些情况下,可能会通过
compute实例配置不可取或不可能,例如
使用count
变量附加动态磁盘数
因此,在这种情况下,创建带有属性的google\u compute\u实例
的简单方法可能不适用
简而言之,这个想法是先创建持久磁盘,然后创建VM实例,并将新磁盘附加到新创建的实例上。此测试部署由根配置文件my_instances.tf
和可重用模块/instance/main.tf
组成
1.可以独立创建持久磁盘google\u compute\u disk
。为了简单起见,在根文件my_instances.tf
中使用了5个文本块
2.调用可重用模块instance/main.tf
并将VM属性和磁盘列表传递给模块,以便:
- 创建一个VM实例
google_compute_实例
李>
- 使用binding objects
将新的空磁盘附加到新创建的VM实例google\u compute\u attached\u disk
- 使用binding objects
。
由于for_each
只接受一个映射或一组字符串,因此toset
函数用于将磁盘列表转换为一组
好主意。当我用这个的时候,我会得到一个
terraform plan
var.disks
Enter a value: 2
var.instance_name
Enter a value: DDVE5
Error: Reference to undeclared resource
on main.tf line 39, in resource "google_compute_attached_disk" "vm_attached_disk":
39: instance = google_compute_instance.vm_instance.self_link
A managed resource "google_compute_instance" "vm_instance" has not been
declared in the root module.
cat main.tf
variable "instance_name" {}
variable "instance_zone" {
default = "europe-west3-c"
}
variable "instance_type" {
default = "n1-standard-1"
}
variable "instance_subnetwork" {
default = "default"
}
variable "disks" {}
provider "google" {
credentials = file("key.json")
project = "ddve50"
region = "europe-west3"
zone = "europe-west3-a"
}
resource "google_compute_instance" "vm-instance" {
name = "ddve-gcp-5-7-2-0-20-65"
machine_type = "f1-micro"
tags = ["creator", "juergen"]
boot_disk {
initialize_params {
image = "ddve"
type = "pd-ssd"
}
}
network_interface {
network = "default"
}
}
resource "google_compute_attached_disk" "vm_attached_disk" {
for_each = toset(var.disks)
disk = each.key
instance = google_compute_instance.vm_instance.self_link
}
cat../my_instances.tf
resource "google_compute_disk" "ddve-gcp-5-7-2-0-20-65-nvram" {
name = "ddve-gcp-5-7-2-0-20-65-nvram"
type = "pd-ssd"
size = 10
}
resource "google_compute_disk" "ddve-gcp-5-7-2-0-20-65-m1" {
name = "ddve-gcp-5-7-2-0-20-65-m1"
type = "pd-standard"
size = 1024
}
module "ddve-test-d01" {
source = "./instance"
instance_name = "ddve-test-d01"
disks = [
google_compute_disk.ddve-gcp-5-7-2-0-20-65-nvram,
google_compute_disk.ddve-gcp-5-7-2-0-20-65-m1
]
}
好主意。当我用这个的时候,我会得到一个
terraform plan
var.disks
Enter a value: 2
var.instance_name
Enter a value: DDVE5
Error: Reference to undeclared resource
on main.tf line 39, in resource "google_compute_attached_disk" "vm_attached_disk":
39: instance = google_compute_instance.vm_instance.self_link
A managed resource "google_compute_instance" "vm_instance" has not been
declared in the root module.
cat main.tf
variable "instance_name" {}
variable "instance_zone" {
default = "europe-west3-c"
}
variable "instance_type" {
default = "n1-standard-1"
}
variable "instance_subnetwork" {
default = "default"
}
variable "disks" {}
provider "google" {
credentials = file("key.json")
project = "ddve50"
region = "europe-west3"
zone = "europe-west3-a"
}
resource "google_compute_instance" "vm-instance" {
name = "ddve-gcp-5-7-2-0-20-65"
machine_type = "f1-micro"
tags = ["creator", "juergen"]
boot_disk {
initialize_params {
image = "ddve"
type = "pd-ssd"
}
}
network_interface {
network = "default"
}
}
resource "google_compute_attached_disk" "vm_attached_disk" {
for_each = toset(var.disks)
disk = each.key
instance = google_compute_instance.vm_instance.self_link
}
cat../my_instances.tf
resource "google_compute_disk" "ddve-gcp-5-7-2-0-20-65-nvram" {
name = "ddve-gcp-5-7-2-0-20-65-nvram"
type = "pd-ssd"
size = 10
}
resource "google_compute_disk" "ddve-gcp-5-7-2-0-20-65-m1" {
name = "ddve-gcp-5-7-2-0-20-65-m1"
type = "pd-standard"
size = 1024
}
module "ddve-test-d01" {
source = "./instance"
instance_name = "ddve-test-d01"
disks = [
google_compute_disk.ddve-gcp-5-7-2-0-20-65-nvram,
google_compute_disk.ddve-gcp-5-7-2-0-20-65-m1
]
}
您可以将磁盘连接到:
resource "google_compute_disk" "default" {
name = "test-disk"
type = "pd-ssd"
zone = var.instance_zone
# image = "debian-9-stretch-v20200805"
labels = {
environment = "dev"
}
physical_block_size_bytes = 4096
}
resource "google_compute_attached_disk" "vm_attached_disk" {
count = var.disks
disk = google_compute_disk.default.id
instance = google_compute_instance.vm-instance.id
}
您可以将磁盘连接到:
resource "google_compute_disk" "default" {
name = "test-disk"
type = "pd-ssd"
zone = var.instance_zone
# image = "debian-9-stretch-v20200805"
labels = {
environment = "dev"
}
physical_block_size_bytes = 4096
}
resource "google_compute_attached_disk" "vm_attached_disk" {
count = var.disks
disk = google_compute_disk.default.id
instance = google_compute_instance.vm-instance.id
}
你怎么回事啊?你的错误是什么?我们能提供什么帮助?基本上我需要创建terraform共享模块,以实现上述要求。现在我可以用相同数量的磁盘创建虚拟机。但是现在我需要用不同数量的磁盘更新模块,比如第一个虚拟机有3个磁盘,第二个虚拟机有2个磁盘,然后继续…那么在terraform中是否可以使用任何集合或任何其他方式…需要帮助吗?你有什么问题?你的错误是什么?我们能提供什么帮助?基本上我需要创建terraform共享模块,以实现上述要求。现在我可以用相同数量的磁盘创建虚拟机。但现在我需要用不同数量的磁盘更新模块,比如第一个虚拟机有3个磁盘,第二个虚拟机有2个磁盘,然后继续…所以在terraform中是否可以使用任何集合或任何其他方式…需要帮助吗