我已经查看了puppet变量的文档,似乎无法理解如何将其应用于以下情况:
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',
}
Run Code Online (Sandbox Code Playgroud)
谢谢
尝试在您的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")
}
}
Run Code Online (Sandbox Code Playgroud)
注意:在发布此响应后的三年中,Vagrant引入了facter哈希选项.有关详细信息,请参阅下面的@thomas答案.我相信这是正确的方法,并使我提出的内核命令行技巧相当过时.但是,使用事实的基本原理并没有改变,只是加强了(例如Vagrant目前支持AWS提供商).
原始回复:小心 - 你假设你只使用virtualbox进行流浪,反之亦然,但Vagrant正致力于支持其他虚拟化技术(例如kvm),并且有一天你可能会使用VirtualBox而不会流浪(例如用于生产).
相反,我使用的技巧是在构建basebox时向内核传递一个"vagrant = yes"参数,然后可以通过/ proc/cmdline访问它.然后你可以根据它创建一个新的事实(例如/ etc/vagrant文件,并在后续的facter运行中检查它).
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |