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

时间:2014-06-23 16:58:54

标签: puppet

我正在尝试编辑init.pp文件,如果已设置变量,则只包含子类。我已经将变量初始化为undef,但是当我执行下面的IF语句时,它会出现错误并说:

  

'if'处的语法错误;预期'}'

当我将其作为案例陈述书写时,它可以正常工作,但不能作为IF。知道为什么会这样吗?

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

2 个答案:

答案 0 :(得分:0)

请摆脱使用

的不幸习惯
->

每个其他Puppet声明之间。

这个chainging arrow在它连接的资源/类之间引入了依赖。仅在实际需要依赖项时才应使用此选项。你要问自己的问题

  • 在构建类之间的依赖关系时的无偿依赖树(你在这里这样做)
  • 重构代码时出现
  • 问题,因为ifcases语句没有(总是)构成资源或类的等价物

顺便说一下,避免

也是有益的
class { 'classname': }

声明类和

的语法
include classname

相反,因为前者花费了singleton semantics Puppet类。

答案 1 :(得分:0)

if语句之前使用链接箭头是非法语法。来自Relationships and Ordering上的木偶文档:

  

操作数

     

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

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

我不确定为什么它允许case语句而不是if语句,但我认为将其中任何一个链接起来都不是最好的做法。< / p>