Amazon ec2 流浪汉与警察之间的傀儡条件检查;ec2

Amazon ec2 流浪汉与警察之间的傀儡条件检查;ec2,amazon-ec2,puppet,vagrant,Amazon Ec2,Puppet,Vagrant,我已经看了文档,似乎无法理解如何将其应用于以下情况: 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': s

我已经看了文档,似乎无法理解如何将其应用于以下情况:

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',
}

谢谢

尝试在您的vagrant主机和EC2实例上运行facter,并查找差异。我怀疑两台主机之间的“facter virtual”可能不同,或者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")
   }
}
case$::虚拟{
“不管流浪汉回来了什么”:{
}
'无论EC2实例返回什么':{
}
默认值:{
失败(“意外的虚拟值$::virtual”)
}
}

注意:在该回复发布后的三年中,Vagrant引入了
facter
散列选项。有关更多详细信息,请参见下面的@thomas'答案。我相信这是正确的方法,并且使我提出的内核命令行技巧变得非常过时。然而,使用事实的理由并没有改变,只是得到了加强(例如,Vagrant目前支持AWS提供商)

原始回复:小心-您假设您只将virtualbox用于vagrant,反之亦然,但vagrant正在致力于支持其他虚拟化技术(例如kvm),并且您可能有一天在不使用vagrant的情况下使用virtualbox(例如用于生产)

相反,我使用的技巧是在构建basebox时向内核传递一个“vagrant=yes”参数,然后可以通过/proc/cmdline访问该参数。然后,您可以基于此创建一个新事实(例如/etc/vagrant文件,并在后续的facter运行中检查它)。

vagrant有一个:

因子(散列)-设置为可用因子变量的数据散列 在木偶奔跑中

例如,下面是我的Vagrant文件中的一个片段,其中包含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,
  }

请注意,该事实仅在
傀儡供应期间可用。

非常感谢,是的,对于流浪者,虚拟回复virtualbox,对于ec2:)