我正在尝试使用 Puppet 配置 Apache 虚拟主机,并且尝试了不同的方法,但收效甚微。
我已经定义一个节点如下:
node 'test1.cob' inherits serveurClient {
$smcvhost = 'all'
}
serveurClient 类包含 apache 类。当 Apache 安装完毕,除虚拟主机外,所有配置均正确应用时,此方法可正常工作。
与虚拟主机相关的配置如下:
class apache::config {
File{
require => Class["apache::install"],
notify => Class["apache::service"],
ensure => present,
owner => "www-data",
group => "www-data",
mode => 755
}
...
if ( $smcvhost == 'belleville' ) or ( $smcvhost == 'all' ) {
apache::smcvhost{'belleville':
client => 'belleville',
}
}
...
}
这Apache :: smcvhost定义可以正常工作,因为如果我直接在节点中指定它而不指定条件,虚拟主机就会正确创建,不会出现任何错误。如果我删除 if 语句,它也会被正确创建。我尝试过只指定第二个条件,但没有成功。
当执行失败时,我没有收到任何错误。puppet 报告只是忽略了此配置部分。
我认为这是一种变量范围问题,但从我所读的内容来看,这种做法似乎是正确的,我想如果我试图评估一个不存在的变量,puppet 会给我一些错误。
答案1
Puppet 不会对未设置的变量发出警告(奇怪的是,模板除外),并且,当你设置一个变量时,只有指定的内容后受影响。因此:
node 'test1.cob' inherits serveurClient {
# Nothing above this line knows $smcvhost
$smcvhost = 'all'
# Stuff from this line until "}" knows $smcvhost
}
# Stuff from this point on don't know $smcvhost
如果你看一下 Puppet 最新版本的发行说明,你会发现动态作用域即将被淘汰。我的建议是尽可能避免使用变量传递信息——使用参数,例如在定义或带有参数的类中。
答案2
代替:
节点 'test1.cob' 继承 serveurClient { $smcvhost = 'all' }
如果你这样做:
节点'test1.cob' { $smcvhost ='all' 包括serveurClient }
那么你的变量将存在于 serveurClient 范围内,我假设你的 apache 类被引用在这里。