【问题标题】:How to use "*" in nodeName如何在 nodeName 中使用“*”
【发布时间】:2017-09-10 22:19:13
【问题描述】:

假设我的 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 
    {
    ...
    }
}

我能做到吗?

【问题讨论】:

    标签: powershell azure dsc azure-automation


    【解决方案1】:

    配置数据中的 AllNodes 条目是一个哈希表数组。每个哈希表都需要有一个键 NodeName。当表达式计算时,该值将被替换。所以像 web* 这样的节点名将不起作用

    【讨论】:

    • 有什么真正的方法可以克服这个问题吗?我不认为每次都创建配置数据是一个可行的解决方案
    • 您可以从您的表示中生成配置数据的脚本。
    【解决方案2】:

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

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

    我的配置数据:

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

    对于另一组节点:

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

    我正在使用 Azure 自动化将配置分配给节点,因此它不会检查节点名称,它只会应用配置在编译时具有的任何角色。

    【讨论】:

    • 我仍然有一个疑问。即使我告诉过你这个解决方案。你能帮我理解这个开关如何帮助你吗?如果角色有通配符,那么您是否在 switch 案例中验证它?
    • 角色没有通配符,切换只是将所有配置应用到同一个节点(如果它有很多角色)的简单方法。你提供的解决方案没有一点帮助@RanadipDutta
    • 很好。没有问题。我的理解不同。
    猜你喜欢
    • 2011-04-19
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多