Puppet 条件目录编译

Puppet 条件目录编译,puppet,Puppet,我有两台服务器,例如app01.zone1.mydomain.com和app01.zone2.mydomain.com。我有一个类app,节点分类器将该类分配给主机名匹配app*的每个主机。app类如下所示: class app inherits common { include 'appm' } 它只包括appm模块 现在,appm模块获得了一些代码,这些代码将在zone2中中断。因此,我将app类修改为以下内容 class app inherits common { if ($zo

我有两台服务器,例如
app01.zone1.mydomain.com
app01.zone2.mydomain.com
。我有一个类
app
,节点分类器将该类分配给主机名匹配
app*
的每个主机。
app
类如下所示:

class app inherits common {
  include 'appm'
}
它只包括
appm
模块

现在,
appm
模块获得了一些代码,这些代码将在
zone2
中中断。因此,我将
app
类修改为以下内容

class app inherits common {
  if ($zone == 'zone1'){
     include 'appm'
  }
}
但是,在编译目录时,该条件将被忽略。因此,当
app01.zone2.mydomain.com
上的代理尝试同步时,编译失败


有没有办法使目录编纂符合条件?对于这种情况还有其他建议吗?

您可以为您的案例使用与正则表达式匹配的条件:

class app inherits common {
  if $::fqdn =~ /^app(\d+)\.zone1\./ {
    include 'appm'
  }
}

您可以为您的案例使用与正则表达式匹配的条件:

class app inherits common {
  if $::fqdn =~ /^app(\d+)\.zone1\./ {
    include 'appm'
  }
}

你的类
应用程序
包括它自己,如果它得到评估的话。那肯定不是你想要的。我怀疑事实上,这个类没有被评估,而是你的另一个类
app
被选中并被评估。@JohnBollinger我知道混淆是从哪里来的。让我更正这个问题以添加更多上下文。
$zone
在哪里以及如何获得其值?假设$zone是一个全局变量。很抱歉,我忽略了目录构建失败。在这种情况下,您可以使用Puppet的一个内置日志功能,例如,代替
Notify
。这将在目录构建时将信息输出到主日志中。如果您的类得到了评估,则您的类
应用程序
将包括其自身。那肯定不是你想要的。我怀疑事实上,这个类没有被评估,而是你的另一个类
app
被选中并被评估。@JohnBollinger我知道混淆是从哪里来的。让我更正这个问题以添加更多上下文。
$zone
在哪里以及如何获得其值?假设$zone是一个全局变量。很抱歉,我忽略了目录构建失败。在这种情况下,您可以使用Puppet的一个内置日志功能,例如,代替
Notify
。这将在目录构建时将信息输出到主日志中。在答案中再添加几行解释或输出示例将有助于理解解决方案。我实际上是想暗示zone是另一个类似fqdn的变量,它是全局可用的。你加的条件和我加的条件没有什么不同。这不会阻止目录编译进入这种情况。在答案中添加几行解释或输出示例有助于理解解决方案。我实际上是想暗示zone是另一个类似fqdn的变量,它是全局可用的。你加的条件和我加的条件没有什么不同。它不会阻止目录编译进入这种状态。