if语句存在时定义puppet类排序

时间:2015-07-21 13:14:43

标签: puppet

我有一个Puppet类,除其他外,它设置了一大堆Debian存储库,执行apt-get更新,然后安装一些软件包。

订购必须严格如下:

  1. 设置资源来源
  2. apt-get update
  3. 安装应用程序包
  4. 要定义排序,我在声明所有资源后使用了以下链接:

    File['/etc/apt/apt.conf','/etc/apt/sources.list'] ->
    Exec['apt-get update'] ->
    Class['vim','sudo', ..., ..., ]
    

    但问题是:

    如果我将vim设置为仅在主机是虚拟机时安装,并且我正在执行Puppet运行的主机是物理主机,则运行将失败。我假设这是因为它试图按照我的链接运行Class ['vim']但由于if语句的内容未被解析而无法找到类声明。

    以下是代码:

    if $::is_virtual == 'true' {
        class {'vim': 
          set_default => true,
      }
    }
    

    我可以通过在我的vim资源声明中添加“requires => Exec ['apt-get update']”并从我的链中删除来解决这个问题,但这感觉有些笨拙。这是我的类声明在我执行此操作后的样子:

    if $::is_virtual == 'true' {
        class {'vim':
          requires => Exec['apt-get update'],
          set_default => true,
      }
    }
    

    是否有人有任何其他处理此类订购问题的方法?无论如何,我是否可以处理条件语句中的排序类,这些类可能会也可能不会通过链接触发?任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

使用require的方法是合理的。如果你真的必须坚持链接运算符,你可以将if块包装在另一个类中。

class site::vim {
    if $::is_virtual == 'true' { ... }
}

然后包含并链接Class[site::vim],它将自行兑现is_virtual值。