首页 > 解决方案 > 使用 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";


                    };

运行代码后,我得到以下结果 在此处输入图像描述

配置按预期创建,单击 UI 网格中的配置条目,导致以下内容 在此处输入图像描述

这意味着节点配置也被创建。我的期望是,对于每个 VM,我将看到配置为运行 mof 文件中提供的配置的节点,但节点 UI 显示空节点 在此处输入图像描述

所以我试图手动配置节点以将所有和平连接在一起

在此处输入图像描述

并且失败了以下

在此处输入图像描述

所以我完全认错了。一方面,azurerm_virtual_machine_extension 允许创建扩展并将其绑定到自动化帐户。此外,还有 azurerm_automation_dsc_configuration 和 azurerm_automation_dsc_nodeconfiguration 允许创建配置和节点配置。但最重要的是,您无法连接所有这些点来创建节点。

只是为了确认配置有效,我在不使用 azurerm_virtual_machine_extension 的情况下创建了额外的 vm,并且我能够成功地将这个 MV 添加到创建的节点配置中 在此处输入图像描述

标签: terraformdsc

解决方案


问题出在 azurerm_virtual_machine_extension dsc_configuration 参数中。该值需要与 azurerm_automation_dsc_nodeconfiguration 资源的 name 属性相同。


推荐阅读