2012-04-02 13:25:03 +02:00
|
|
|
module Fog
|
|
|
|
module Compute
|
|
|
|
class XenServer
|
|
|
|
class Real
|
2012-04-04 19:48:21 +02:00
|
|
|
|
2012-04-04 09:01:55 +02:00
|
|
|
def get_vm_by_name(label)
|
|
|
|
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.get_by_name_label' }, label)
|
2012-04-02 13:25:03 +02:00
|
|
|
end
|
2012-04-04 09:01:55 +02:00
|
|
|
|
2012-04-04 19:48:21 +02:00
|
|
|
def create_server( name_label, template = nil, networks = [], extra_args = {})
|
|
|
|
if !networks.kind_of? Array
|
|
|
|
raise "Invalid networks argument"
|
2012-04-04 09:01:55 +02:00
|
|
|
end
|
2012-04-02 13:25:03 +02:00
|
|
|
|
2012-04-04 09:01:55 +02:00
|
|
|
if template.kind_of? String
|
|
|
|
template_string = template
|
2012-04-04 19:48:21 +02:00
|
|
|
# try template by UUID
|
|
|
|
template = servers.templates.find { |s| s.uuid == template_string }
|
|
|
|
if template.nil?
|
|
|
|
# Try with the template name just in case
|
|
|
|
template = servers.get get_vm_by_name(template_string)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if template.nil?
|
|
|
|
raise "Invalid template"
|
2012-04-04 09:01:55 +02:00
|
|
|
end
|
2012-04-02 13:25:03 +02:00
|
|
|
|
2012-04-04 09:01:55 +02:00
|
|
|
raise "Template #{template_string} does not exist" if template.allowed_operations.nil?
|
|
|
|
raise 'Clone Operation not Allowed' unless template.allowed_operations.include?('clone')
|
|
|
|
|
|
|
|
# Clone the VM template
|
2012-04-09 12:36:08 +02:00
|
|
|
ref = clone_server name_label, template.reference
|
|
|
|
# Add additional NICs
|
2012-04-04 19:48:21 +02:00
|
|
|
networks.each do |n|
|
|
|
|
create_vif ref, n.reference
|
|
|
|
end
|
2012-04-12 14:16:14 +02:00
|
|
|
if !extra_args[:auto_start] == false
|
|
|
|
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.provision'}, ref)
|
|
|
|
start_vm( ref )
|
|
|
|
end
|
2012-04-04 09:01:55 +02:00
|
|
|
|
2012-04-04 19:48:21 +02:00
|
|
|
ref
|
2012-04-04 09:01:55 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
class Mock
|
|
|
|
|
|
|
|
def create_server( name_label, template = nil, network = nil, extra_args = {})
|
2012-04-02 13:25:03 +02:00
|
|
|
Fog::Mock.not_implemented
|
|
|
|
end
|
2012-04-04 09:01:55 +02:00
|
|
|
|
2012-04-02 13:25:03 +02:00
|
|
|
end
|
2012-04-04 09:01:55 +02:00
|
|
|
|
2012-04-02 13:25:03 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|