Можно ли упорядочить поставщиков наизнанку в многомашинной настройке Vagrant?

Можно ли изменить порядок поставщиков с самого внутреннего на самый внешний при использовании настройки с несколькими компьютерами? Я хочу, чтобы небольшой поставщик оболочки создавал некоторые факты в /etc/factor/facts.d/ перед предоставлением с помощью puppet, чтобы максимально имитировать нашу текущую настройку. (Я унаследовал большой кукольный репозиторий и пытаюсь создать для него испытательный стенд Vagrant, прежде чем начать вносить изменения.)

Параметры марионетки одинаковы для всех ящиков, но сначала необходимо запустить средство подготовки оболочки. Вот пример 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

person Stig Brautaset    schedule 28.09.2015    source источник


Ответы (1)


Отвечая на свой вопрос, я нашел приемлемый обходной путь: я переместил подготовку марионетки во внутренний блок. Вот как выглядит мой текущий код:

$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
person Stig Brautaset    schedule 28.09.2015