Override Vagrant configuration settings locally (per-dev)

前端 未结 8 1463
说谎
说谎 2021-01-30 02:51

I\'d like the question to be answered in general, but to illustrate it, here\'s a use case:

I\'m using Vagrant for a simple LMAP project. I use standalone Puppet for pro

8条回答
  •  星月不相逢
    2021-01-30 03:50

    Here's an idea. It may be "ugly" and "wrong", but, at least, it works :)

    # file2.rb, this is your per-dev configuration file
    puts "included external file which uses outer var: #{foo}"
    
    # file1.rb, this would be your Vagrantfile
    puts 'first'
    foo = 'bar'
    
    external = File.read 'file2.rb'
    eval external
    puts 'second'
    

    Let's run that

    $ ruby file1.rb
    first
    included external file which uses outer var: bar
    second
    

    Adapting to your example, file2.rb would contain only usage of config without defining it (config will be provided from outer context)

      config.vm.provision :puppet do |puppet|
        puppet.facter = { "proxy" => "proxy.host:80" }
      end
    

    And your Vagrant file may look like this:

    Vagrant::Config.run do |config|
      external = File.read 'Vagrantfile.local'
      eval external
    
      # proceed with general settings here
      config.vm.provision :puppet do |puppet|
        puppet.facter = { "proxy" => "proxy.host:80" }
      end
    end
    

    Update (another, "data-driven" approach)

    # Vagranfile.local
    config_values[:puppet][:facter][:proxy] = 'proxy.host:80'
    
    # Vargantfile
    Vagrant::Config.run do |config|
      config_values = {
        puppet: {
          facter: {
            proxy: nil
          },
          manifests_file: 'my_manifest.pp'
    
        }
      }
      external = File.read 'Vagrantfile.local'
      eval external # this should overwrite proxy config
    
      # proceed with general settings here
      config.vm.provision :puppet do |puppet|
        if config_values[:puppet][:facter][:proxy]
          puppet.facter = { "proxy" => config_values[:puppet][:facter][:proxy] } 
        end
    
        puppet.manifests_file = config_values[:puppet][:manifests_file]
      end
    end
    

提交回复
热议问题