def call(env)
config = env[:machine].provider_config
@name = env[:domain_name]
@cpus = config.cpus
@cpu_mode = config.cpu_mode
@disk_bus = config.disk_bus
@nested = config.nested
@memory_size = config.memory*1024
@domain_volume_cache = config.volume_cache
@kernel = config.kernel
@cmd_line = config.cmd_line
@initrd = config.initrd
@graphics_type = config.graphics_type
@graphics_autoport = config.graphics_autoport
@graphics_port = config.graphics_port
@graphics_ip = config.graphics_ip
@graphics_passwd = if config.graphics_passwd.to_s.empty?
''
else
"passwd='#{config.graphics_passwd.to_s}'"
end
@video_type = config.video_type
@video_vram = config.video_vram
@storage_pool_name = config.storage_pool_name
@disks = config.disks
config = env[:machine].provider_config
@domain_type = config.driver
@os_type = 'hvm'
domain_volume = ProviderLibvirt::Util::Collection.find_matching(
env[:libvirt_compute].volumes.all, "#{@name}.img")
raise Errors::DomainVolumeExists if domain_volume.nil?
@domain_volume_path = domain_volume.path
storage_prefix = File.dirname(@domain_volume_path)+'/'
@disks.each do |disk|
disk[:path] ||= _disk_name(@name, disk)
disk[:name] = disk[:path]
disk[:absolute_path] = storage_prefix + disk[:path]
begin
domain_volume_disk = env[:libvirt_compute].volumes.create(
:name => disk[:name],
:format_type => disk[:type],
:path => disk[:absolute_path],
:capacity => disk[:size],
:pool_name => @storage_pool_name)
rescue Fog::Errors::Error => e
raise Errors::FogDomainVolumeCreateError,
:error_message => e.message
end
end
env[:ui].info(I18n.t('vagrant_libvirt.creating_domain'))
env[:ui].info(" -- Name: #{@name}")
env[:ui].info(" -- Domain type: #{@domain_type}")
env[:ui].info(" -- Cpus: #{@cpus}")
env[:ui].info(" -- Memory: #{@memory_size/1024}M")
env[:ui].info(" -- Base box: #{env[:machine].box.name}")
env[:ui].info(" -- Storage pool: #{@storage_pool_name}")
env[:ui].info(" -- Image: #{@domain_volume_path}")
env[:ui].info(" -- Volume Cache: #{@domain_volume_cache}")
env[:ui].info(" -- Kernel: #{@kernel}")
env[:ui].info(" -- Initrd: #{@initrd}")
env[:ui].info(" -- Graphics Type: #{@graphics_type}")
env[:ui].info(" -- Graphics Port: #{@graphics_port}")
env[:ui].info(" -- Graphics IP: #{@graphics_ip}")
env[:ui].info(" -- Graphics Password: #{@graphics_passwd.empty? ? 'Not defined': 'Defined'}")
env[:ui].info(" -- Video Type: #{@video_type}")
env[:ui].info(" -- Video VRAM: #{@video_vram}")
if @disks.length > 0
env[:ui].info(" -- Disks: #{_disks_print(@disks)}")
end
@disks.each do |disk|
env[:ui].info(" -- Disk(#{disk[:device]}): #{disk[:absolute_path]}")
end
env[:ui].info(" -- Command line : #{@cmd_line}")
begin
server = env[:libvirt_compute].servers.create(
:xml => to_xml('domain'))
rescue Fog::Errors::Error => e
raise Errors::FogCreateServerError,
:error_message => e.message
end
env[:machine].id = server.id
@app.call(env)
end