将自定义复合资源与 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=]
,但现在我不确定这是否绝对必要。
我有一个部署 DSC 扩展的 VM 模板。它一直运行良好,但我的配置在增长,所以我重构了它以使用复合资源并使用 Publish-AzureRmVMDscConfiguration
.
我已验证 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=]
,但现在我不确定这是否绝对必要。