是否可以在Vagrant多机器设置中进行内部配置供应商的订购?

时间:2015-09-28 20:44:26

标签: vagrantfile vagrant-provision

使用多机设置时,是否可以颠倒从最里面到最外面的供应商的顺序?我想要一个小的shell配置器在配置puppet之前在/etc/facter/facts.d/中创建一些事实,以尽可能地模仿我们当前的设置。 (我继承了一个大型的木偶仓库,并且在我开始做更改之前,我正试图为它创建一个Vagrant testbed。)

每个框的木偶设置都相同,但需要首先运行shell配置程序。这是一个示例Vagrantfile,用于显示我想要做的事情(更改了一些名称以保护无辜者):

$facts =<<FACTS
set -x
mkdir -p /etc/facter/facts.d
echo role=$1        > /etc/facter/facts.d/role.txt
echo location=$2    > /etc/facter/facts.d/location.txt
echo environment=$3 > /etc/facter/facts.d/environment.txt
FACTS

Vagrant.configure(2) do |config|
  config.vm.box = "centos-6.6"
  config.vm.synced_folder "hiera", "/etc/puppet/hiera"

  config.vm.provision :puppet do |puppet|
    puppet.manifest_file = "site.pp"
    puppet.module_path = ["modules", "internal"]
    puppet.hiera_config_path = "hiera.yaml"
    puppet.options = "--test"
  end

  config.vm.define :foo1 do |c|
    c.vm.hostname = "foo-1.vagrant"
    c.vm.provision :shell, inline: $facts, args: "foo testing stage"
  end

  config.vm.define :bar do |c|
    c.vm.hostname = "bar-1.vagrant"
    c.vm.provision :shell, inline: $facts, args: "bar testing stage"
  end

  # ... more machines omitted ...

end

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,因为我找到了一个可接受的解决方法:我将木偶配置移动到内部块中。这是我当前代码的样子:

$facts =<<SET_FACTS
set -x
mkdir -p /etc/facter/facts.d
echo role=$1        > /etc/facter/facts.d/role.txt
echo location=$2    > /etc/facter/facts.d/location.txt
echo environment=$3 > /etc/facter/facts.d/environment.txt
SET_FACTS

module Vagrant
  module Config
    module V2
      class Root
        def provision(role, location, environment)
          vm.provision "set-facts",
                         type: :shell,
                         inline: $facts,
                         args: [role, location, environment].map { |x| x.to_s }
          vm.provision :puppet do |puppet|
            puppet.manifest_file = "site.pp"
            puppet.module_path = ["modules", "internal"]
            puppet.hiera_config_path = "hiera.yaml"
          end
        end
      end
    end
  end
end

Vagrant.configure(2) do |config|
  config.vm.box = "centos-6.6"
  config.vm.synced_folder "hiera", "/etc/puppet/hiera"

  config.vm.define :foo1 do |c|
    c.vm.hostname = "foo-1.vagrant"
    c.provision(:foo, :testing, :stage)
  end

  config.vm.define :bar1 do |c|
    c.vm.hostname = "bar-1.vagrant"
    c.provision(:bar, :testing, :stage)
  end
end