我有一个Puppet类,除其他外,它设置了一大堆Debian存储库,执行apt-get更新,然后安装一些软件包。
订购必须严格如下:
要定义排序,我在声明所有资源后使用了以下链接:
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,
}
}
是否有人有任何其他处理此类订购问题的方法?无论如何,我是否可以处理条件语句中的排序类,这些类可能会也可能不会通过链接触发?任何建议表示赞赏。
答案 0 :(得分:1)
使用require
的方法是合理的。如果你真的必须坚持链接运算符,你可以将if
块包装在另一个类中。
class site::vim {
if $::is_virtual == 'true' { ... }
}
然后包含并链接Class[site::vim]
,它将自行兑现is_virtual
值。