我查看了puppet variables的文档,似乎无法理解如何将其应用于以下情况:
if vagrant (local machine)
phpfpm::nginx::vhost { 'vhost_name':
server_name => 'dev.demo.com',
root => '/vagrant/public',
}
else if aws ec2 (remote machine)
phpfpm::nginx::vhost { 'vhost_name':
server_name => 'demo.com',
root => '/home/ubuntu/demo.com/public',
}
由于
答案 0 :(得分:7)
尝试在您的vagrant主机和EC2实例上运行facter,并寻找差异。我怀疑两个主机之间的“虚拟虚拟”可能不同,或者EC2可能会返回一堆不会出现在流浪主机上的ec2_事实。
然后您可以将此事实用作顶级变量,如下所示。我也切换到了一个case语句,因为这样可以更容易维护IMHO,而且你可以使用默认的块来进行错误检查。
case $::virtual {
'whatever vagrant returns' : {
<vagrant specific provisionin>
}
'whatever the EC2 instance returns' : {
<EC2 specific provisioning>
}
default : {
fail("Unexpected virtual value of $::virtual")
}
}
答案 1 :(得分:5)
注意:自发布此响应以来的三年内,Vagrant引入了facter
哈希选项。有关详细信息,请参阅下面的@thomas答案。我相信这是正确的方法,并使我提出的内核命令行技巧相当过时。但是,使用事实的理由没有改变,只是加强了(例如Vagrant目前支持AWS提供商)。
原始回复:小心 - 你假设你只使用virtualbox进行流浪,反之亦然,但Vagrant正致力于支持其他虚拟化技术(例如kvm),并且有一天你可能会使用VirtualBox而不会流浪(例如用于生产) )。
相反,我使用的技巧是在构建basebox时向内核传递一个“vagrant = yes”参数,然后可以通过/ proc / cmdline访问它。然后你可以根据它创建一个新的事实(例如/ etc / vagrant文件,并在后续的facter运行中检查它。)
答案 2 :(得分:3)
Vagrant有great utility for providing Puppet facts:
facter(hash) - 要设置为可用facter变量的数据哈希 在木偶运行中。
例如,这是我的Vagrantfile中使用Puppet设置的代码段:
config.vm.provision "puppet", :options => ["--fileserverconfig=/vagrant/fileserver.conf"] do |puppet|
puppet.manifests_path = "./"
puppet.module_path = "~/projects/puppet/modules"
puppet.manifest_file = "./vplan-host.pp"
puppet.facter = {
"vagrant_puppet_run" => "true"
}
end
然后我们就像这样使用这个事实:
$unbound_conf = $::vagrant_puppet_run ? {
'true' => 'puppet:///modules/unbound_dns/etc/unbound/unbound.conf.vagrant',
default => 'puppet:///modules/unbound_dns/etc/unbound/unbound.conf',
}
file { '/etc/unbound/unbound.conf':
owner => root,
group => root,
notify => Service['unbound'],
source => $unbound_conf,
}
请注意,事实仅在puppet provision
时间内可用。