terraform / azure 上的奇怪错误 "Missing required argument"
odd errors on terraform / azure "Missing required argument"
我已经为 运行 Azure 上 windows VM 中的命令编写了一个非常简单的脚本。但我收到这些错误:
Error: Missing required argument
on .terraform\modules\run_command\main.tf line 23, in resource
"azurerm_virtual_machine_extension" "linux": 23: resource
"azurerm_virtual_machine_extension" "linux" {
The argument "virtual_machine_id" is required, but no definition was
found.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 26, in resource
"azurerm_virtual_machine_extension" "linux": 26: location
= "${data.azurerm_resource_group.main.location}"
An argument named "location" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 27, in resource
"azurerm_virtual_machine_extension" "linux": 27:
resource_group_name =
"${data.azurerm_resource_group.main.name}"
An argument named "resource_group_name" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 28, in resource
"azurerm_virtual_machine_extension" "linux": 28:
virtual_machine_name =
"${data.azurerm_virtual_machine.main.name}"
An argument named "virtual_machine_name" is not expected here.
Error: Missing required argument
on .terraform\modules\run_command\main.tf line 37, in resource
"azurerm_virtual_machine_extension" "windows": 37: resource
"azurerm_virtual_machine_extension" "windows" {
The argument "virtual_machine_id" is required, but no definition was
found.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 40, in resource
"azurerm_virtual_machine_extension" "windows": 40: location
= "${data.azurerm_resource_group.main.location}"
An argument named "location" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 41, in resource
"azurerm_virtual_machine_extension" "windows": 41:
resource_group_name =
"${data.azurerm_resource_group.main.name}"
An argument named "resource_group_name" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 42, in resource
"azurerm_virtual_machine_extension" "windows": 42:
virtual_machine_name =
"${data.azurerm_virtual_machine.main.name}"
但是,如果我删除“意外”参数,我会收到另一个错误,它丢失了!
有什么建议吗?非常感谢
provider "azurerm" {
tenant_id = "..."
subscription_id = "..."
features {}
}
# <https://registry.terraform.io/modules/innovationnorway/vm-run-command/azurerm/latest>
module "run_command" {
source = "innovationnorway/vm-run-command/azurerm"
resource_group_name = "dc-rg"
virtual_machine_name = "AD1"
os_type = "windows"
script = <<EOF
Install-Module -Name PSWindowsUpdate -Force -AllowClobber
Get-WUInstall -WindowsUpdate -AcceptAll -UpdateType Software -IgnoreReboot
Get-WUInstall -MicrosoftUpdate -AcceptAll -IgnoreUserInput -IgnoreReboot
EOF
}
提前谢谢你。非常感谢。
编辑以包含 run_command 的代码,我在存储库中找到了它:
运行-命令main.tf:
locals {
settings_windows = {
script = "${compact(concat(list(var.command), split("\n", var.script)))}"
fileUris = "${var.file_uris}"
}
settings_linux = {
commandToExecute = "${var.command}"
fileUris = "${var.file_uris}"
script = "${base64encode(var.script)}"
}
}
data "azurerm_resource_group" "main" {
name = "${var.resource_group_name}"
}
data "azurerm_virtual_machine" "main" {
name = "${var.virtual_machine_name}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
}
resource "azurerm_virtual_machine_extension" "linux" {
count = "${lower(var.os_type) == "linux" ? 1 : 0}"
name = "${var.virtual_machine_name}-run-command"
location = "${data.azurerm_resource_group.main.location}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"
publisher = "Microsoft.CPlat.Core"
type = "RunCommandLinux"
type_handler_version = "1.0"
auto_upgrade_minor_version = true
protected_settings = "${jsonencode(local.settings_linux)}"
tags = "${var.tags}"
}
resource "azurerm_virtual_machine_extension" "windows" {
count = "${lower(var.os_type) == "windows" ? 1 : 0}"
name = "${var.virtual_machine_name}-run-command"
location = "${data.azurerm_resource_group.main.location}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"
publisher = "Microsoft.CPlat.Core"
type = "RunCommandWindows"
type_handler_version = "1.1"
auto_upgrade_minor_version = true
settings = "${jsonencode(local.settings_windows)}"
tags = "${var.tags}"
}
运行-命令variables.tf:
variable "resource_group_name" {
description = "The name of the resource group."
}
variable "virtual_machine_name" {
description = "The name of the virtual machine."
}
variable "os_type" {
description = "Specifies the operating system type."
}
variable "command" {
default = ""
description = "Command to be executed."
}
variable "script" {
default = ""
description = "Script to be executed."
}
variable "file_uris" {
type = "list"
default = []
description = "List of files to be downloaded."
}
variable "timestamp" {
default = ""
description = "An integer, intended to trigger re-execution of the script when changed."
}
variable "tags" {
default = {}
description = "A mapping of tags to assign to the extension."
}
在 Terraform 模板的参数参考 azurerm_virtual_machine_extension 中,参数 virtual_machine_name
已停用并已替换为 virtual_machine_id
。如果您使用的是最新的 Terraform
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/azurerm v2.43.0
您可以在本地下载模块,然后手动修改相关代码,并在运行 terraform init/plan/apply.
时将source
更改为本地路径
此外,我发现已弃用的 interpolation 表达式仍在该模块中使用。 Terraform 0.11 及更早版本要求通过插值语法提供所有非常量表达式,但现在 Terraform 0.12 及更高版本已弃用此模式。
例如,我假设您已经复制了路径./modules/run_command
中的模块代码。然后根据需要修改相关代码。
在子模块中 run_command main.tf
.
resource "azurerm_virtual_machine_extension" "windows" {
count = lower(var.os_type) == "windows" ? 1 : 0
name = "${var.virtual_machine_name}-run-command"
virtual_machine_id = data.azurerm_virtual_machine.main.id
publisher = "Microsoft.CPlat.Core"
type = "RunCommandWindows"
type_handler_version = "1.1"
auto_upgrade_minor_version = true
settings = jsonencode(local.settings_windows)
tags = var.tags
}
在父模块中main.tf
。
module "run_command" {
source = "./modules/run_command"
resource_group_name = "dc-rg"
virtual_machine_name = "AD1"
os_type = "windows"
script = <<EOF
Install-Module -Name PSWindowsUpdate -Force -AllowClobber
Get-WUInstall -WindowsUpdate -AcceptAll -UpdateType Software -IgnoreReboot
Get-WUInstall -MicrosoftUpdate -AcceptAll -IgnoreUserInput -IgnoreReboot
EOF
}
我已经为 运行 Azure 上 windows VM 中的命令编写了一个非常简单的脚本。但我收到这些错误:
Error: Missing required argument
on .terraform\modules\run_command\main.tf line 23, in resource "azurerm_virtual_machine_extension" "linux": 23: resource "azurerm_virtual_machine_extension" "linux" {
The argument "virtual_machine_id" is required, but no definition was found.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 26, in resource "azurerm_virtual_machine_extension" "linux": 26: location
= "${data.azurerm_resource_group.main.location}"An argument named "location" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 27, in resource "azurerm_virtual_machine_extension" "linux": 27:
resource_group_name = "${data.azurerm_resource_group.main.name}"An argument named "resource_group_name" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 28, in resource "azurerm_virtual_machine_extension" "linux": 28:
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"An argument named "virtual_machine_name" is not expected here.
Error: Missing required argument
on .terraform\modules\run_command\main.tf line 37, in resource "azurerm_virtual_machine_extension" "windows": 37: resource "azurerm_virtual_machine_extension" "windows" {
The argument "virtual_machine_id" is required, but no definition was found.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 40, in resource "azurerm_virtual_machine_extension" "windows": 40: location
= "${data.azurerm_resource_group.main.location}"An argument named "location" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 41, in resource "azurerm_virtual_machine_extension" "windows": 41:
resource_group_name = "${data.azurerm_resource_group.main.name}"An argument named "resource_group_name" is not expected here.
Error: Unsupported argument
on .terraform\modules\run_command\main.tf line 42, in resource "azurerm_virtual_machine_extension" "windows": 42:
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"
但是,如果我删除“意外”参数,我会收到另一个错误,它丢失了!
有什么建议吗?非常感谢
provider "azurerm" {
tenant_id = "..."
subscription_id = "..."
features {}
}
# <https://registry.terraform.io/modules/innovationnorway/vm-run-command/azurerm/latest>
module "run_command" {
source = "innovationnorway/vm-run-command/azurerm"
resource_group_name = "dc-rg"
virtual_machine_name = "AD1"
os_type = "windows"
script = <<EOF
Install-Module -Name PSWindowsUpdate -Force -AllowClobber
Get-WUInstall -WindowsUpdate -AcceptAll -UpdateType Software -IgnoreReboot
Get-WUInstall -MicrosoftUpdate -AcceptAll -IgnoreUserInput -IgnoreReboot
EOF
}
提前谢谢你。非常感谢。
编辑以包含 run_command 的代码,我在存储库中找到了它:
运行-命令main.tf:
locals {
settings_windows = {
script = "${compact(concat(list(var.command), split("\n", var.script)))}"
fileUris = "${var.file_uris}"
}
settings_linux = {
commandToExecute = "${var.command}"
fileUris = "${var.file_uris}"
script = "${base64encode(var.script)}"
}
}
data "azurerm_resource_group" "main" {
name = "${var.resource_group_name}"
}
data "azurerm_virtual_machine" "main" {
name = "${var.virtual_machine_name}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
}
resource "azurerm_virtual_machine_extension" "linux" {
count = "${lower(var.os_type) == "linux" ? 1 : 0}"
name = "${var.virtual_machine_name}-run-command"
location = "${data.azurerm_resource_group.main.location}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"
publisher = "Microsoft.CPlat.Core"
type = "RunCommandLinux"
type_handler_version = "1.0"
auto_upgrade_minor_version = true
protected_settings = "${jsonencode(local.settings_linux)}"
tags = "${var.tags}"
}
resource "azurerm_virtual_machine_extension" "windows" {
count = "${lower(var.os_type) == "windows" ? 1 : 0}"
name = "${var.virtual_machine_name}-run-command"
location = "${data.azurerm_resource_group.main.location}"
resource_group_name = "${data.azurerm_resource_group.main.name}"
virtual_machine_name = "${data.azurerm_virtual_machine.main.name}"
publisher = "Microsoft.CPlat.Core"
type = "RunCommandWindows"
type_handler_version = "1.1"
auto_upgrade_minor_version = true
settings = "${jsonencode(local.settings_windows)}"
tags = "${var.tags}"
}
运行-命令variables.tf:
variable "resource_group_name" {
description = "The name of the resource group."
}
variable "virtual_machine_name" {
description = "The name of the virtual machine."
}
variable "os_type" {
description = "Specifies the operating system type."
}
variable "command" {
default = ""
description = "Command to be executed."
}
variable "script" {
default = ""
description = "Script to be executed."
}
variable "file_uris" {
type = "list"
default = []
description = "List of files to be downloaded."
}
variable "timestamp" {
default = ""
description = "An integer, intended to trigger re-execution of the script when changed."
}
variable "tags" {
default = {}
description = "A mapping of tags to assign to the extension."
}
在 Terraform 模板的参数参考 azurerm_virtual_machine_extension 中,参数 virtual_machine_name
已停用并已替换为 virtual_machine_id
。如果您使用的是最新的 Terraform
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/azurerm v2.43.0
您可以在本地下载模块,然后手动修改相关代码,并在运行 terraform init/plan/apply.
时将source
更改为本地路径
此外,我发现已弃用的 interpolation 表达式仍在该模块中使用。 Terraform 0.11 及更早版本要求通过插值语法提供所有非常量表达式,但现在 Terraform 0.12 及更高版本已弃用此模式。
例如,我假设您已经复制了路径./modules/run_command
中的模块代码。然后根据需要修改相关代码。
在子模块中 run_command main.tf
.
resource "azurerm_virtual_machine_extension" "windows" {
count = lower(var.os_type) == "windows" ? 1 : 0
name = "${var.virtual_machine_name}-run-command"
virtual_machine_id = data.azurerm_virtual_machine.main.id
publisher = "Microsoft.CPlat.Core"
type = "RunCommandWindows"
type_handler_version = "1.1"
auto_upgrade_minor_version = true
settings = jsonencode(local.settings_windows)
tags = var.tags
}
在父模块中main.tf
。
module "run_command" {
source = "./modules/run_command"
resource_group_name = "dc-rg"
virtual_machine_name = "AD1"
os_type = "windows"
script = <<EOF
Install-Module -Name PSWindowsUpdate -Force -AllowClobber
Get-WUInstall -WindowsUpdate -AcceptAll -UpdateType Software -IgnoreReboot
Get-WUInstall -MicrosoftUpdate -AcceptAll -IgnoreUserInput -IgnoreReboot
EOF
}