class VagrantPlugins::Vai::Provisioner
Public Class Methods
new(machine, config)
click to toggle source
Calls superclass method
# File lib/vai/provisioner.rb, line 6 def initialize(machine, config) super @logger = Log4r::Logger.new("vagrant::provisioners::ansible") end
Public Instance Methods
provision()
click to toggle source
# File lib/vai/provisioner.rb, line 10 def provision @machine.ui.info("Inventory sucessfully written to #{setup_inventory_file()}") end
Protected Instance Methods
setup_inventory_file()
click to toggle source
Auto-generate “safe” inventory file based on Vagrantfile,
# File lib/vai/provisioner.rb, line 16 def setup_inventory_file #options << "--sudo" if config.sudo #options << "--sudo-user=#{config.sudo_user}" if config.sudo_user #"ANSIBLE_HOST_KEY_CHECKING" => "#{config.host_key_checking}", # Managed machines inventory_machines = {} generated_inventory_dir = Pathname.new(config.inventory_dir) FileUtils.mkdir_p(generated_inventory_dir) unless File.directory?(generated_inventory_dir) generated_inventory_filename = config.inventory_filename ? config.inventory_filename : 'vagrant_ansible_inventory' generated_inventory_file = generated_inventory_dir.join(generated_inventory_filename) generated_inventory_file.open('w') do |file| file.write("# Generated by Vagrant\n\n") @machine.env.active_machines.each do |am| begin m = @machine.env.machine(*am) m_ssh_info = m.ssh_info if !m_ssh_info.nil? file.write("#{m.name} ansible_ssh_host=#{m_ssh_info[:host]} ansible_ssh_port=#{m_ssh_info[:port]} "\ "ansible_ssh_private_key_file=#{m_ssh_info[:private_key_path][0]} ansible_ssh_user=#{m_ssh_info[:username]}\n") inventory_machines[m.name] = m else @logger.error("Auto-generated inventory: Impossible to get SSH information for machine '#{m.name} (#{m.provider_name})'. This machine should be recreated.") # Let a note about this missing machine file.write("# MISSING: '#{m.name}' machine was probably removed without using Vagrant. This machine should be recreated.\n") end rescue Vagrant::Errors::MachineNotFound => e @logger.info("Auto-generated inventory: Skip machine '#{am[0]} (#{am[1]})', which is not configured for this Vagrant environment.") end end # Write out groups information. # All defined groups will be included, but only supported # machines and defined child groups will be included. # Group variables are intentionally skipped. groups_of_groups = {} defined_groups = [] config.groups.each_pair do |gname, gmembers| # Require that gmembers be an array # (easier to be tolerant and avoid error management of few value) gmembers = [gmembers] if !gmembers.is_a?(Array) if gname.end_with?(":children") groups_of_groups[gname] = gmembers defined_groups << gname.sub(/:children$/, '') elsif !gname.include?(':vars') defined_groups << gname file.write("\n[#{gname}]\n") gmembers.each do |gm| file.write("#{gm}\n") if inventory_machines.include?(gm.to_sym) end end end defined_groups.uniq! groups_of_groups.each_pair do |gname, gmembers| file.write("\n[#{gname}]\n") gmembers.each do |gm| file.write("#{gm}\n") if defined_groups.include?(gm) end end end return generated_inventory_file.to_s end