2017-04-14 78 views
2

說我有我的DSC設置2個角色和我有我的設置節點的變化量:如何使用「*」的節點名稱

$configdata = @{ 
    AllNodes = @(
     @{ 
      NodeName = "*Web*" # < problem lies here 
         # can be prodWeb## or devWeb## 
      Role = "IIS", "basic" 
     } 
     @{ 
      NodeName = "*" 
      Role = "basic" 
     } 
    ) 
} 

DSC資源:

Configuration CFG 
{ 
    $AllNodes.where{ $_.Role.Contains("Basic") }.NodeName 
    { 
    ... 
    } 

    $AllNodes.where{ $_.Role.Contains("IIS") }.NodeName 
    { 
    ... 
    } 
} 

我可以實現那個?

回答

0

所以,基本上我所做的是這樣的:

Configuration Windows 
{ 
    node $allnodes.NodeName { 
     switch ($Node.Role) { 
      "Role1" { 
       ... 
      } 
      "Role2" { 
       ... 
      } 
      "Role3" { 
       ... 
      } 
     } 
    } 
} 

我的配置數據:

@{ AllNodes = @(@{ NodeName = "web"; Role = "Role1", "Role2" }) } 

而對另一組的節點:

@{ AllNodes = @(@{ NodeName = "other"; Role = "Role1", "Role3" }) } 

我正在使用Azure自動化將配置分配給節點,因此它不檢查節點名稱,它只是應用無論配置在編譯時的角色如何。

+0

我還有一個疑問。即使我告訴你這個解決方案。你能幫我理解這個開關如何幫助你嗎?如果角色具有通配符,那麼您是否正在驗證交換機的情況? –

+0

角色沒有通配符,交換機只是將所有配置應用到同一節點(如果它有很多角色)的簡單方法。你給的解決方案沒有一點幫助@RanadipDutta – 4c74356b41

+0

好。沒有問題。我的理解是不同的。 –

1

配置數據中的AllNodes條目是一個哈希表數組。每個散列表都需要一個關鍵的NodeName。當表達式計算結果時,該值將被替換。因此,像網絡*節點名都不行

+0

任何真正的方法來克服呢?我不認爲每次創建配置數據都是可行的解決方案 – 4c74356b41

+0

您可以通過腳本生成配置數據的腳本。 –