将自定义复合资源与 Azure DSC 扩展结合使用

Use custom, composite resource with Azure DSC extension

我有一个部署 DSC 扩展的 VM 模板。它一直运行良好,但我的配置在增长,所以我重构了它以使用复合资源并使用 Publish-AzureRmVMDscConfiguration.

将其重新发布到 blob 存储

我已验证 blob 存储中的 .ps1.zip 文件包含我的自定义模块,并且该模块列在 dscmetadata.json 下。但是,当我部署时,DSC 扩展失败。 C:\WindowsAzure\Logs\Plugins\Microsoft.Powershell.DSC.17.0.0下的日志揭示了原因:

C:\Packages\Plugins\Microsoft.Powershell.DSC.17.0.0\bin..\DSCWork\AppServerDev.ps1.0\AppserverDev.ps1

PSDesiredStateConfiguration\node : The module 'xCustomResource' could not be loaded. For more information, run 'Import-Module xCustomResource'.

At C:\Packages\Plugins\Microsoft.Powershell.DSC.17.0.0\DSCWork\AppServerDev.ps1.0\AppserverDev.ps1:9 char:3

  • node "localhost"
  • ~~~~
    • CategoryInfo : ObjectNotFound: (xCustomResource\xCustomResource:String) [PSDesiredStateConfiguration\node], ParentContainsErrorRecordException
    • FullyQualifiedErrorId : CouldNotAutoLoadModule,PSDesiredStateConfiguration\node

以下是我的配置文件的相关部分:

configuration AppServerDev
{
    param($environment)
    Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
    Import-DscResource -ModuleName 'SaaSModule'

    node "localhost"
    {
        LocalConfigurationManager
        {
            RebootNodeIfNeeded = $true
            ConfigurationMode = "ApplyAndAutoCorrect"
            ConfigurationModeFrequencyMins = 1440
        }
        xDCTPlatformVM VM {
            OctopusParametersFile = $environment
            ChocolateyPackages = @(
                'googlechrome',
                'notepadplusplus',
                '7zip',
                'microsoftwse',
                'octopusdeploy.tentacle',
                'sqlserver-cmdlineutils'
                )
        }
    }
}

运行 Get-Module -ListAvailable 显示找到了 DankModule 并且我可以从 powershell 中找到 运行 Import-Module DankModule 并且它按预期工作。我假设混淆来自它试图导入 xCustomResource 而不是 DankModule 但我的 .ps1 文件在 C:\Packages\Plugins\Microsoft.Powershell.DSC.17.0.0\DSCWork 下说

Import-Module "DankModule"

而不是

Import-Module "xCustomType"

为什么要导入 xCustomType 而不是 DankModule?我如何让它找到 DankModule 可用并包含 xCustomType?

更新:Get-Module -ListAvailable 显示 DankModule 已安装,但 Get-DSCResource -Module DankModule 没有 return 任何东西。

我不确定,但我认为这是我的菜鸟错误,因为我没有构建 powershell 模块的经验。我正在使用 this page as well as this one 构建我的模块,并且我通过使用 New-ModuleManifest 获得了一个有效的模块文件,我在它们中都提到了正确的文件结构,例如

C:\Program Files\WindowsPowerShell\Modules\

DankModule
    DankModule.psd1
    DankModule.psm1
    DSCResources
        xCustomResource
            xCustomResource.psd1
                RootModule = ‘xCustomResource.schema.psm1'
            xCustomResource.schema.psm1
                Configuration, no Node block

但我没有意识到我还需要进行一些调整。我需要将 DankModule.psd1 中的 RootModule 属性 更正为如下所示:

RootModule = 'C:\Program Files\WindowsPowerShell\Modules\DankModule\DankModule.psm1'

并且还需要在我的空白 DankModule.psm1 中添加一行引用我的 xCustomResource.schema.psm1 等价物:

. .\DSCResources\xCustomResource\xCustomResource.schema.psm1

这是我的 module-level.psm1 文件中唯一的一行,现在一切正常。我也曾经从我的两个 .psd1 文件中删除了所有 [=15=],但现在我不确定这是否绝对必要。