module Gusteau::Vagrant
Public Instance Methods
define_nodes(config, options, prefix = nil)
click to toggle source
# File lib/gusteau/vagrant.rb, line 19 def define_nodes(config, options, prefix = nil) Gusteau::Config.read(options[:config_path] || ".gusteau.yml") Gusteau::Config.nodes.each_pair do |name, node| if node.config['server']['vagrant'] define_vm config, node, options end end end
define_provisioner(instance, node)
click to toggle source
# File lib/gusteau/vagrant.rb, line 82 def define_provisioner(instance, node) instance.vm.provision 'chef_solo' do |chef| chef.data_bags_path = 'data_bags' chef.cookbooks_path = Gusteau::Config.settings['cookbooks_path'] chef.roles_path = Gusteau::Config.settings['roles_path'] chef.json = node.config['attributes'] || {} chef.run_list = node.config['run_list'] || [] end end
define_vm(config, node, options)
click to toggle source
# File lib/gusteau/vagrant.rb, line 58 def define_vm(config, node, options) vm_config = vm_config(node, options) config.vm.define vm_config[:name] do |instance| instance.vm.box = vm_config[:box] instance.vm.box_url = vm_config[:box_url] instance.vm.provider :virtualbox do |vb| vb.customize ['modifyvm', :id, '--memory', vm_config[:memory], '--name', vm_config[:label], '--cpus', vm_config[:cpus], '--natdnsproxy1', 'on' ] end if vm_config[:ip] instance.vm.network :private_network, :ip => vm_config[:ip] end define_provisioner(instance, node) if options[:provision] end end
detect(config) { |options| ... }
click to toggle source
# File lib/gusteau/vagrant.rb, line 11 def detect(config) options = Hashie::Mash.new options.defaults = Hashie::Mash.new yield options if block_given? define_nodes(config, options.to_hash.symbolize_keys) end
vm_config(node, options)
click to toggle source
# File lib/gusteau/vagrant.rb, line 29 def vm_config(node, options) defaults = options[:defaults] || {} config = node.config['server']['vagrant'] label = options[:prefix] ? "#{options[:prefix]}-#{node.name}" : node.name config = {} if config == true box_url = config.fetch 'box_url' do unless defaults[:box_url] raise "Box url can't be determined for #{node.name}" end defaults[:box_url] end # If no one set the VirtualBox box name explicitly, use the end of the box_url # as the box name box_name = config.fetch('box', defaults[:box] || box_url.sub(/.*\/([^\/]+).box$/,'\1')) { :name => node.name, :label => label, :box => box_name, :box_url => box_url, :ip => config['IP'] || defaults[:ip], :cpus => config['cpus'] || defaults[:cpus] || 1, :memory => config['memory'] || defaults[:memory] || 1024 } end