uda*_*ran 8 terraform terraform-provider-azure
我的地形片段:
\nvariable "machine_details" {\n type = object({\n name = string\n size = string\n username = string\n password = string\n })\n\n default = [\n {\n name = "example-vm"\n size = "Standard_F2"\n username = "adminuser"\n password = "Notallowed1!"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n我收到如下错误。
\n Error: Invalid default value for variable\n \xe2\x94\x82\n \xe2\x94\x82 on variables.tf line 38, in variable "machine_details":\n \xe2\x94\x82 38: default = [\n \xe2\x94\x82 39: {\n \xe2\x94\x82 40: name = "example-vm"\n \xe2\x94\x82 41: size = "Standard_F2"\n \xe2\x94\x82 42: username = "adminuser"\n \xe2\x94\x82 43: password = "Notallowed1!"\n \xe2\x94\x82 44: }\n \xe2\x94\x82 45: ]\nThis default value is not compatible with the variable's type constraint: object required.\nRun Code Online (Sandbox Code Playgroud)\n我尝试了 map(string) 但也不起作用。
\n也有相似的列表(字符串)。
\n我正在尝试最新的 azurerm 提供程序。
\n另外,在 gcp 中,我们可以选择提供计数(对于实例),因此如果我提供 2,将创建两个实例。
\n如何使用 azure 和 aws 做同样的事情?
\n如何解决这个问题?
\nuda*_*ran 14
它就是这样工作的。
variable "machine_details" {
type = object({
name = string
size = string
username = string
password = string
})
default = {
name = "example-vm"
size = "Standard_F2"
username = "adminuser"
password = "Notallowed1!"
}
}
Run Code Online (Sandbox Code Playgroud)
并且可以这样引用:var.machine_details.name
正如Marko E前面luk2302提到的,您必须声明并传递变量,如下所示:
variable "machine_details" {
type = list(object({
name = string
size = string
username = string
password = string
}))
default = [
{
name = "example-vm"
size = "Standard_F2"
username = "adminuser"
password = "Notallowed1!"
},
{
name = "example2-vm"
size = "Standard_F2"
username = "adminuser1"
password = "Notallowed2!"
}
]
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您想使用count,则可以使用如下所示的内容:
provider "azurerm" {
features{}
}
data "azurerm_resource_group" "example" {
name = "ansumantest"
}
resource "azurerm_virtual_network" "example" {
name = "example-network"
address_space = ["10.0.0.0/16"]
location = data.azurerm_resource_group.example.location
resource_group_name = data.azurerm_resource_group.example.name
}
resource "azurerm_subnet" "example" {
name = "internal"
resource_group_name = data.azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = ["10.0.2.0/24"]
}
resource "azurerm_public_ip" "example" {
count = length(var.machine_details)
name = "aks-nfs-public-ip${count.index}"
location = data.azurerm_resource_group.example.location
resource_group_name = data.azurerm_resource_group.example.name
allocation_method = "Dynamic"
tags = {
environment = "Production"
}
}
resource "azurerm_network_interface" "example" {
count = length(var.machine_details)
name = "example-nic-${count.index}"
location = data.azurerm_resource_group.example.location
resource_group_name = data.azurerm_resource_group.example.name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.example.id
public_ip_address_id = "${element(azurerm_public_ip.example.*.id, count.index)}"
private_ip_address_allocation = "Dynamic"
}
}
resource "azurerm_ssh_public_key" "example" {
name = "ansuman-sshkey"
resource_group_name = data.azurerm_resource_group.example.name
location = data.azurerm_resource_group.example.location
public_key = file("~/.ssh/id_rsa.pub")
}
resource "azurerm_linux_virtual_machine" "example" {
count = length(var.machine_details)
name = var.machine_details[count.index].name
resource_group_name = data.azurerm_resource_group.example.name
location = data.azurerm_resource_group.example.location
size = var.machine_details[count.index].size
admin_username = var.machine_details[count.index].username
admin_password = var.machine_details[count.index].password
disable_password_authentication = true
network_interface_ids = ["${element(azurerm_network_interface.example.*.id, count.index)}"]
admin_ssh_key {
username = var.machine_details[count.index].username
public_key = azurerm_ssh_public_key.example.public_key
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
| 归档时间: |
|
| 查看次数: |
29792 次 |
| 最近记录: |