【问题标题】:Use custom, composite resource with Azure DSC extension使用 Azure DSC 扩展的自定义复合资源
【发布时间】:2017-07-07 11:50:21
【问题描述】:

我有一个部署 DSC 扩展的 VM 模板。它一直运行良好,但我的配置正在增长,因此我将其重构为使用复合资源并使用 Publish-AzureRmVMDscConfiguration 将其重新发布到 blob 存储。

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

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

PSDesiredStateConfiguration\node :模块“xCustomResource”可以 不被加载。有关更多信息,请运行“导入模块” xCustomResource'。

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

  • 节点“本地主机”
  • ~~~~
    • 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 但我在 C:\Packages\Plugins\Microsoft.Powershell.DSC\2.17.0.0\DSCWork 下的 .ps1 文件说

Import-Module "DankModule"

而不是

Import-Module "xCustomType"

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

更新:Get-Module -ListAvailable 显示 DankModule 已安装,但 Get-DSCResource -Module DankModule 不返回任何内容。

【问题讨论】:

    标签: azure deployment azure-powershell dsc


    【解决方案1】:

    我不确定,但我认为这是我的新手错误,因为我没有构建 powershell 模块的经验。我使用this pagethis 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
    

    这是我的模块级 .psm1 文件中的唯一一行,现在一切正常。我还曾一度从我的两个 .psd1 文件中删除了所有 \0s,但现在我不确定这是否是绝对必要的。

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多