当DSC无法创建或删除实际资源对象时,自定义DSC资源应如何运作?
在我的具体示例中,我正在编写用于管理COM +应用程序,组件和Interfaces的资源。为应用程序和组件创建资源很好;可以通过编程方式从Catalog中创建和删除它们。但是,从DLL创建组件时会自动创建接口。
我需要能够更新接口属性(即QueuingEnabled
属性)。因此,我打算如下所述描述COM +接口的配置:
COMplusInterface MyInterface
{
Ensure = 'Present'
ApplicationID = 'BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
ComponentDLLPath = 'C:\Program Files\MyApplication\bin\MyComponent.dll'
InterfaceName = 'MyInterface'
Description = 'This is my interface'
QueuingEnabled = $true
}
但是如果应用程序或组件尚不存在,该资源是否应该抛出错误?同样,如果DLL只是没有那个接口。 Test-TargetResource
返回$false
是没有意义的,因为这将启动Set-TargetResource
,然后无法创建界面。
接下来,如果Ensure
设置为Absent
,DSC资源应该做什么?如果它存在,则无法删除接口,只有删除组件才能执行此操作。我应该只将所有接口属性恢复为默认值吗?
答案 0 :(得分:1)
从您关于Ensure
的问题开始,我只是说没有任何要求拥有Ensure
财产的要求。虽然大多数资源都有,但你会发现它们(甚至来自微软)并不是很有意义。如果它对您的资源没有意义,请不要包含它。
至于如果组件不存在该怎么办,是的,你应该抛出一个错误。在DependsOn
资源中使用COMplusInterface
,确保在COMplusComponent
资源后应用Test-TargetResource
。
$false
就会返回Set-TargetResource
,无论原因是该组件不存在,还是属性不匹配。如果组件不存在,则DependsOn
将运行,并且它将失败,因为它应该。您尝试使用配置描述状态,因此您应该在此部分运行之前在配置中设置先决条件状态(即ApplicationID
所在的位置)。
我会说Key
应该是您的COMplusComponent MyComponent
{
<# your component resource #>
}
COMplusInterface MyInterface
{
ApplicationID = 'BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
QueuingEnabled = $true
DependsOn = '[COMplusComponent]MyComponent'
}
属性,其他属性应该是可选的;如果你强迫他们的状态,你只想指定它们,所以我认为你应该能够这样指定你的配置:
<div class="movdb-header"></div> <!-- this is the header i want to display above navbar -->
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Home", "Index", "Home", new {area = ""}, new {@class = "navbar-brand"})
@Html.ActionLink("Inloggen", "Index", "User", new {area = ""}, new {@class = "navbar-brand"})
@Html.ActionLink("Uitloggen", "Index", "Logout", new {area = ""}, new {@class = "navbar-brand"})
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
</div>
</div>