Puppet 关于是否包含子类的条件逻辑

Puppet 关于是否包含子类的条件逻辑,puppet,Puppet,我试图编辑init.pp文件,使其仅在设置变量时包含子类。我已经将变量初始化为undef,但是当我执行下面的IF语句时,它会出错并显示: “if”处的语法错误;应为“}” 当我把它作为一个案例陈述来写的时候,它可以很好地工作,但不能作为一个假设。知道为什么吗 class {'wlsvr': } -> case $jdbc_filename { undef: {} default: {class {'jdbc':}} } -> if $man

我试图编辑init.pp文件,使其仅在设置变量时包含子类。我已经将变量初始化为undef,但是当我执行下面的IF语句时,它会出错并显示:

“if”处的语法错误;应为“}”

当我把它作为一个案例陈述来写的时候,它可以很好地工作,但不能作为一个假设。知道为什么吗

  class {'wlsvr':
  }
  ->
  case $jdbc_filename {
    undef: {}
    default: {class {'jdbc':}}
  }
  ->
  if $managedsvr_name != undef {
    class {'managedsvr':
    }
  }

请你改掉使用英语的坏习惯

->
在每一次傀儡声明之间

这将在所连接的资源/类之间引入依赖关系。仅当实际需要依赖项时才应使用此选项。你要面对的问题

  • 在类之间构建依赖关系时的免费依赖树(您可以在这里这样做)
  • 重构代码时出现问题,因为
    if
    cases
    语句(始终)不构成资源或类的等价物
顺便说一句,避免这种情况也是有益的

class { 'classname': }
用于声明类和首选项的语法

include classname

相反,因为前者需要花费大量的木偶类。

语句之前使用链接箭头是非法语法。从以下位置的puppet文档:

操作数 链接箭头在箭头两侧接受以下类型的操作数:

  • 资源引用,包括多资源引用
  • 资源声明
  • 资源收集器

我不知道为什么它允许
case
语句,而不允许
if
语句,但我认为最好的做法是将它们链接起来。

感谢您的回复。现在需要使用链接箭头,尽管我需要准确地找出显式依赖项的位置以及它们可以以另一种顺序运行的位置。我已改为使用include。但是,你知道为什么在案件发生时if不起作用吗?