terraform - 使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用
问题描述
作为我发布过程的第一步,我运行以下 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 门户中看到这些帐户。
我还有创建几个 Windows VM 的 terraform 代码,每个 VM 创建都伴随着以下内容
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";
};
这意味着节点配置也被创建。我的期望是,对于每个 VM,我将看到配置为运行 mof 文件中提供的配置的节点,但节点 UI 显示空节点
所以我试图手动配置节点以将所有和平连接在一起
并且失败了以下
所以我完全认错了。一方面,azurerm_virtual_machine_extension 允许创建扩展并将其绑定到自动化帐户。此外,还有 azurerm_automation_dsc_configuration 和 azurerm_automation_dsc_nodeconfiguration 允许创建配置和节点配置。但最重要的是,您无法连接所有这些点来创建节点。
只是为了确认配置有效,我在不使用 azurerm_virtual_machine_extension 的情况下创建了额外的 vm,并且我能够成功地将这个 MV 添加到创建的节点配置中
解决方案
问题出在 azurerm_virtual_machine_extension dsc_configuration 参数中。该值需要与 azurerm_automation_dsc_nodeconfiguration 资源的 name 属性相同。
推荐阅读
- unity3d - Unity 3D Camera在添加空动画后不会水平转动
- laravel - 如何从博客文章中获取用户名?
- qt - 为什么这不在 QVector 中添加 QObject*
- python - 数据框中的python float显示不正确:1.731 ==> 1.7309999999999999
- flutter - 颤振地理定位器包没有用英语给出位置
- ios - 以特定格式获取当前日期
- python - 解析python字典时出现键错误
- javascript - 即使在大写和小写之间混合使用,也可以识别单词
- .net - CfSetInSyncState() Win32 函数的 .NET 模拟?
- c# - SmtpClient 异常未进入 SmtpFailedRecipientsException