def self.to_xml(opts={})
builder = Nokogiri::XML::Builder.new do
vm{
name_ opts[:name] || "i-#{Time.now.to_i}"
if opts[:template]
template_ :id => (opts[:template])
elsif opts[:template_name]
template_{ name_(opts[:template_name])}
else
template_{name_('Blank')}
end
if opts[:cluster]
cluster_( :id => opts[:cluster])
elsif opts[:cluster_name]
cluster_{ name_(opts[:cluster_name])}
end
type_ opts[:hwp_id] || 'Server'
if opts[:memory]
memory opts[:memory]
end
if opts[:cores]
cpu {
topology( :cores => (opts[:cores] || '1'), :sockets => '1' )
}
end
os{
boot(:dev=> opts[:boot_dev1] || 'network')
boot(:dev=> opts[:boot_dev2] || 'hd')
}
display_{
type_(opts[:display])
} if opts[:display]
custom_properties {
custom_property({
:name => "floppyinject",
:value => "#{opts[:fileinject_path] || OVIRT::FILEINJECT_PATH}:#{opts[:user_data]}",
:regexp => "^([^:]+):(.*)$"})
} if(opts[:user_data_method] && opts[:user_data_method] == :custom_property)
payloads {
payload(:type => 'floppy') {
_file(:name => "#{opts[:fileinject_path] || OVIRT::FILEINJECT_PATH}") { content(Base64::decode64(opts[:user_data])) }
}
} if(opts[:user_data_method] && opts[:user_data_method] == :payload)
}
end
Nokogiri::XML(builder.to_xml).root.to_s
end