使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用
Posted
技术标签:
【中文标题】使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用【英文标题】:Creating azure automation dsc configuration and dsc configuration node using terraform doesn't seems to be working 【发布时间】:2021-05-30 09:03:24 【问题描述】:作为我发布过程的第一步,我运行以下 terraform 代码
resource "azurerm_automation_account" "automation_account"
for_each = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
name = "$local.automation_account_prefix-$each.key"
location = each.key
resource_group_name = each.value.name
sku_name = "Basic"
tags =
environment = "development"
按预期创建的自动化帐户,我可以在 Azure 门户中看到这些帐户。
我也有 terraform 代码,可以创建几个 Windows 虚拟机,每个虚拟机创建伴随以下内容
resource "azurerm_virtual_machine_extension" "dsc"
name = "DevOpsDSC"
virtual_machine_id = var.vm_id
publisher = "Microsoft.Powershell"
type = "DSC"
type_handler_version = "2.83"
settings = <<SETTINGS_JSON
"configurationArguments":
"RegistrationUrl": "$var.dsc_server_endpoint",
"NodeConfigurationName": "$var.dsc_config",
"ConfigurationMode": "$var.dsc_mode",
"ConfigurationModeFrequencyMins": 15,
"RefreshFrequencyMins": 30,
"RebootNodeIfNeeded": false,
"ActionAfterReboot": "continueConfiguration",
"AllowModuleOverwrite": true
SETTINGS_JSON
protected_settings = <<PROTECTED_SETTINGS_JSON
"configurationArguments":
"RegistrationKey":
"UserName": "PLACEHOLDER_DONOTUSE",
"Password": "$var.dsc_primary_access_key"
PROTECTED_SETTINGS_JSON
结果如下
因此为每个 VM 创建了 VM 扩展,并且状态表明配置成功。
对于下一步,我运行以下 terraform 代码
resource "azurerm_automation_dsc_configuration" "iswebserver"
for_each = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
name = "iswebserver"
resource_group_name = each.value.name
automation_account_name = data.terraform_remote_state.ops.outputs.automation_account[each.key].name
location = each.key
content_embedded = "configuration iswebserver "
resource "azurerm_automation_dsc_nodeconfiguration" "iswebserver"
for_each = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
name = "iswebserver.localhost"
resource_group_name = each.value.name
automation_account_name = data.terraform_remote_state.ops.outputs.automation_account[each.key].name
depends_on = [azurerm_automation_dsc_configuration.iswebserver]
content_embedded = file("$path.cwd/iswebserver.mof")
mof文件内容如下
/*
@TargetNode='IsWebServer'
@GeneratedBy=P120bd0
@GenerationDate=02/25/2021 17:33:16
@GenerationHost=D-MJ05UA54
*/
instance of MSFT_RoleResource as $MSFT_RoleResource1ref
ResourceID = "[WindowsFeature]IIS";
IncludeAllSubFeature = True;
Ensure = "Present";
SourceInfo = "D:\\DSC\\testconfig.ps1::5::9::WindowsFeature";
Name = "Web-Server";
ModuleName = "PsDesiredStateConfiguration";
ModuleVersion = "1.0";
ConfigurationName = "TestConfig";
;
instance of OMI_ConfigurationDocument
Version="2.0.0";
MinimumCompatibleVersion = "1.0.0";
CompatibleVersionAdditionalProperties= "Omi_BaseResource:ConfigurationName";
Author="P120bd0";
GenerationDate="02/25/2021 17:33:16";
GenerationHost="D-MJ05UA54";
Name="TestConfig";
;
运行代码后,我得到以下结果
配置按预期创建,单击 UI 网格中的配置条目,导致以下内容
意味着节点配置也被创建。我的期望是,对于每个 VM,我将看到配置为运行 mof 文件中提供的配置的节点,但节点 UI 显示空节点
所以我试图手动配置节点以将所有和平连接在一起
并且失败并显示以下内容
所以我完全认错了。一方面,azurerm_virtual_machine_extension 允许创建扩展并将其绑定到自动化帐户。此外,还有 azurerm_automation_dsc_configuration 和 azurerm_automation_dsc_nodeconfiguration 允许创建配置和节点配置。但最重要的是,您无法连接所有这些点来创建节点。
为了确认配置有效,我在不使用 azurerm_virtual_machine_extension 的情况下创建了额外的 vm,并且我能够成功地将这个 MV 添加到创建的节点配置中
【问题讨论】:
【参考方案1】:问题出在 azurerm_virtual_machine_extension dsc_configuration 参数中。该值需要与 azurerm_automation_dsc_nodeconfiguration 资源的 name 属性相同。
【讨论】:
以上是关于使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Terraform DSC 配置与节点配置中的 Azure 自动化
使用 Terraform 创建 Azure IaaS 域控制器