class VagrantPlugins::OVirtProvider::Action::StartVM
Just start the VM.
Public Class Methods
new(app, env)
click to toggle source
# File lib/vagrant-ovirt4/action/start_vm.rb, line 12 def initialize(app, env) @logger = Log4r::Logger.new("vagrant_ovirt::action::start_vm") @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/vagrant-ovirt4/action/start_vm.rb, line 17 def call(env) config = env[:machine].provider_config env[:ui].info(I18n.t("vagrant_ovirt4.starting_vm")) machine = env[:vms_service].vm_service(env[:machine].id) if machine.get.status == nil raise Errors::NoVMError, :vm_name => env[:machine].id.to_s end # FIX MULTIPLE NETWORK INTERFACES hostname = env[:machine].config.vm.hostname hostname = 'vagrant' if hostname.nil? initialization = { host_name: hostname, nic_configurations: [], custom_script: config.cloud_init, } configured_ifaces_options = [] env[:machine].config.vm.networks.each do |network| type, options = network next unless type == :private_network configured_ifaces_options << scoped_hash_override(options, :ovirt) end (0...configured_ifaces_options.length()).each do |iface_index| iface_options = configured_ifaces_options[iface_index] if iface_options[:ip] then nic_configuration = { name: "eth#{iface_index}", on_boot: true, boot_protocol: OvirtSDK4::BootProtocol::STATIC, ip: { version: OvirtSDK4::IpVersion::V4, address: iface_options[:ip], gateway: iface_options[:gateway], netmask: iface_options[:netmask], } } else nic_configuration = { name: "eth#{iface_index}", on_boot: true, boot_protocol: OvirtSDK4::BootProtocol::DHCP, } end initialization[:nic_configurations] << nic_configuration initialization[:dns_servers] = iface_options[:dns_servers] unless iface_options[:dns_servers].nil? initialization[:dns_search] = iface_options[:dns_search] unless iface_options[:dns_search].nil? end # END FIX MULTIPLE NETWORK INTERFACES vm_configuration = { initialization: initialization, placement_policy: {}, } vm_configuration[:placement_policy][:hosts] = [{ :name => config.placement_host }] unless config.placement_host.nil? vm_configuration[:placement_policy][:affinity] = config.affinity unless config.affinity.nil? vm_configuration.delete(:placement_policy) if vm_configuration[:placement_policy].empty? vm_configuration.delete(:nic_configurations) if vm_configuration[:nic_configurations].nil? or vm_configuration[:nic_configurations].empty? begin machine.start( use_cloud_init: true, vm: vm_configuration ) rescue OvirtSDK4::Error => e fault_message = /Fault detail is \"\[?(.+?)\]?\".*/.match(e.message)[1] rescue e.message retry if e.message =~ /Please try again/ if e.message !~ /VM is running/ if config.debug raise e else raise Errors::StartVMError, :error_message => fault_message end end end @app.call(env) end