fog-xenserver 0.0.1.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +1 -0
- data/Gemfile +4 -0
- data/LICENSE.md +20 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/fog-xenserver.gemspec +26 -0
- data/lib/fog.rb +3 -0
- data/lib/fog/compute.rb +7 -0
- data/lib/fog/xenserver.rb +1 -0
- data/lib/fog/xenserver/compute.rb +176 -0
- data/lib/fog/xenserver/core.rb +84 -0
- data/lib/fog/xenserver/examples/README.md +11 -0
- data/lib/fog/xenserver/examples/chage_default_storage_repository.md +99 -0
- data/lib/fog/xenserver/examples/creating_servers.md +168 -0
- data/lib/fog/xenserver/examples/getting_started.md +163 -0
- data/lib/fog/xenserver/examples/networks-and-vlans.rb +45 -0
- data/lib/fog/xenserver/examples/storage_repositories.md +94 -0
- data/lib/fog/xenserver/models/compute/blob.rb +22 -0
- data/lib/fog/xenserver/models/compute/blobs.rb +25 -0
- data/lib/fog/xenserver/models/compute/bond.rb +23 -0
- data/lib/fog/xenserver/models/compute/bonds.rb +25 -0
- data/lib/fog/xenserver/models/compute/console.rb +29 -0
- data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
- data/lib/fog/xenserver/models/compute/crash_dump.rb +19 -0
- data/lib/fog/xenserver/models/compute/crash_dumps.rb +25 -0
- data/lib/fog/xenserver/models/compute/dr_task.rb +17 -0
- data/lib/fog/xenserver/models/compute/dr_tasks.rb +25 -0
- data/lib/fog/xenserver/models/compute/gpu_group.rb +22 -0
- data/lib/fog/xenserver/models/compute/gpu_groups.rb +25 -0
- data/lib/fog/xenserver/models/compute/guest_metrics.rb +29 -0
- data/lib/fog/xenserver/models/compute/host.rb +159 -0
- data/lib/fog/xenserver/models/compute/host_cpu.rb +38 -0
- data/lib/fog/xenserver/models/compute/host_crash_dump.rb +20 -0
- data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +25 -0
- data/lib/fog/xenserver/models/compute/host_metrics.rb +29 -0
- data/lib/fog/xenserver/models/compute/host_patch.rb +25 -0
- data/lib/fog/xenserver/models/compute/host_patchs.rb +25 -0
- data/lib/fog/xenserver/models/compute/hosts.rb +29 -0
- data/lib/fog/xenserver/models/compute/network.rb +92 -0
- data/lib/fog/xenserver/models/compute/networks.rb +33 -0
- data/lib/fog/xenserver/models/compute/pbd.rb +40 -0
- data/lib/fog/xenserver/models/compute/pbds.rb +33 -0
- data/lib/fog/xenserver/models/compute/pci.rb +22 -0
- data/lib/fog/xenserver/models/compute/pcis.rb +25 -0
- data/lib/fog/xenserver/models/compute/pgpu.rb +20 -0
- data/lib/fog/xenserver/models/compute/pgpus.rb +25 -0
- data/lib/fog/xenserver/models/compute/pif.rb +57 -0
- data/lib/fog/xenserver/models/compute/pif_metrics.rb +28 -0
- data/lib/fog/xenserver/models/compute/pifs.rb +33 -0
- data/lib/fog/xenserver/models/compute/pifs_metrics.rb +25 -0
- data/lib/fog/xenserver/models/compute/pool.rb +79 -0
- data/lib/fog/xenserver/models/compute/pool_patch.rb +24 -0
- data/lib/fog/xenserver/models/compute/pool_patchs.rb +25 -0
- data/lib/fog/xenserver/models/compute/pools.rb +33 -0
- data/lib/fog/xenserver/models/compute/role.rb +19 -0
- data/lib/fog/xenserver/models/compute/roles.rb +25 -0
- data/lib/fog/xenserver/models/compute/server.rb +250 -0
- data/lib/fog/xenserver/models/compute/server_appliance.rb +21 -0
- data/lib/fog/xenserver/models/compute/server_appliances.rb +25 -0
- data/lib/fog/xenserver/models/compute/servers.rb +68 -0
- data/lib/fog/xenserver/models/compute/storage_manager.rb +28 -0
- data/lib/fog/xenserver/models/compute/storage_managers.rb +25 -0
- data/lib/fog/xenserver/models/compute/storage_repositories.rb +31 -0
- data/lib/fog/xenserver/models/compute/storage_repository.rb +93 -0
- data/lib/fog/xenserver/models/compute/tunnel.rb +20 -0
- data/lib/fog/xenserver/models/compute/tunnels.rb +25 -0
- data/lib/fog/xenserver/models/compute/vbd.rb +91 -0
- data/lib/fog/xenserver/models/compute/vbd_metrics.rb +27 -0
- data/lib/fog/xenserver/models/compute/vbds.rb +33 -0
- data/lib/fog/xenserver/models/compute/vdi.rb +105 -0
- data/lib/fog/xenserver/models/compute/vdis.rb +29 -0
- data/lib/fog/xenserver/models/compute/vif.rb +60 -0
- data/lib/fog/xenserver/models/compute/vifs.rb +29 -0
- data/lib/fog/xenserver/models/compute/vlan.rb +81 -0
- data/lib/fog/xenserver/models/compute/vlans.rb +39 -0
- data/lib/fog/xenserver/models/compute/vmpp.rb +35 -0
- data/lib/fog/xenserver/models/compute/vmpps.rb +25 -0
- data/lib/fog/xenserver/models/compute/vtpm.rb +18 -0
- data/lib/fog/xenserver/models/compute/vtpms.rb +25 -0
- data/lib/fog/xenserver/parser.rb +36 -0
- data/lib/fog/xenserver/parsers/get_hosts.rb +19 -0
- data/lib/fog/xenserver/parsers/get_networks.rb +19 -0
- data/lib/fog/xenserver/parsers/get_pools.rb +19 -0
- data/lib/fog/xenserver/parsers/get_records.rb +19 -0
- data/lib/fog/xenserver/parsers/get_storage_repositories.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vbds.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vifs.rb +19 -0
- data/lib/fog/xenserver/parsers/get_vms.rb +20 -0
- data/lib/fog/xenserver/requests/compute/clone_server.rb +31 -0
- data/lib/fog/xenserver/requests/compute/create_network.rb +42 -0
- data/lib/fog/xenserver/requests/compute/create_server.rb +130 -0
- data/lib/fog/xenserver/requests/compute/create_sr.rb +72 -0
- data/lib/fog/xenserver/requests/compute/create_vbd.rb +40 -0
- data/lib/fog/xenserver/requests/compute/create_vdi.rb +33 -0
- data/lib/fog/xenserver/requests/compute/create_vif.rb +57 -0
- data/lib/fog/xenserver/requests/compute/create_vlan.rb +35 -0
- data/lib/fog/xenserver/requests/compute/destroy_network.rb +33 -0
- data/lib/fog/xenserver/requests/compute/destroy_server.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_sr.rb +30 -0
- data/lib/fog/xenserver/requests/compute/destroy_vdi.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_vif.rb +22 -0
- data/lib/fog/xenserver/requests/compute/destroy_vlan.rb +32 -0
- data/lib/fog/xenserver/requests/compute/disable_host.rb +29 -0
- data/lib/fog/xenserver/requests/compute/eject_vbd.rb +22 -0
- data/lib/fog/xenserver/requests/compute/enable_host.rb +28 -0
- data/lib/fog/xenserver/requests/compute/get_record.rb +29 -0
- data/lib/fog/xenserver/requests/compute/get_records.rb +30 -0
- data/lib/fog/xenserver/requests/compute/insert_vbd.rb +22 -0
- data/lib/fog/xenserver/requests/compute/provision_server.rb +21 -0
- data/lib/fog/xenserver/requests/compute/reboot_host.rb +23 -0
- data/lib/fog/xenserver/requests/compute/reboot_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/scan_sr.rb +22 -0
- data/lib/fog/xenserver/requests/compute/set_affinity.rb +25 -0
- data/lib/fog/xenserver/requests/compute/set_attribute.rb +25 -0
- data/lib/fog/xenserver/requests/compute/shutdown_host.rb +23 -0
- data/lib/fog/xenserver/requests/compute/shutdown_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/snapshot_revert.rb +22 -0
- data/lib/fog/xenserver/requests/compute/snapshot_server.rb +22 -0
- data/lib/fog/xenserver/requests/compute/start_server.rb +23 -0
- data/lib/fog/xenserver/requests/compute/start_vm.rb +25 -0
- data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +25 -0
- data/lib/fog/xenserver/requests/compute/unplug_vbd.rb +30 -0
- data/lib/fog/xenserver/utilities.rb +8 -0
- data/lib/fog/xenserver/version.rb +5 -0
- metadata +228 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'fog/core/model'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Compute
|
|
5
|
+
class XenServer
|
|
6
|
+
class Vtpm < Fog::Model
|
|
7
|
+
# API Reference here:
|
|
8
|
+
# http://docs.vmd.citrix.com/XenServer/6.2.0/1.0/en_gb/api/?c=VTPM
|
|
9
|
+
|
|
10
|
+
identity :reference
|
|
11
|
+
|
|
12
|
+
attribute :__backend, :aliases => :backend
|
|
13
|
+
attribute :uuid
|
|
14
|
+
attribute :__vm, :aliases => :vm
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/xenserver/models/compute/vtpm'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Compute
|
|
6
|
+
class XenServer
|
|
7
|
+
class Vtpms < Fog::Collection
|
|
8
|
+
model Fog::Compute::XenServer::Vtpm
|
|
9
|
+
|
|
10
|
+
def all(options={})
|
|
11
|
+
data = service.get_records 'VTPM'
|
|
12
|
+
load(data)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get( vtpm_ref )
|
|
16
|
+
if vtpm_ref && vtpm = service.get_record( vtpm_ref, 'VTPM' )
|
|
17
|
+
new(vtpm)
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class Base
|
|
5
|
+
|
|
6
|
+
attr_reader :response
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
reset
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def reset
|
|
13
|
+
@response = {}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parse( data )
|
|
17
|
+
if data.kind_of? Hash
|
|
18
|
+
@response = data.symbolize_keys!
|
|
19
|
+
@response.each do |k,v|
|
|
20
|
+
if @response[k] == "OpaqueRef:NULL"
|
|
21
|
+
@response[k] = nil
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
elsif data.kind_of? Array
|
|
25
|
+
@response = data.first
|
|
26
|
+
elsif data.kind_of?(String) and data =~ /OpaqueRef:/
|
|
27
|
+
@response = data
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@response
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetHosts < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, host_hash| @response << parser.parse( host_hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetNetworks < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, network_hash| @response << parser.parse( network_hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetPools < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, pool_hash| @response << parser.parse( pool_hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetRecords < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, hash| @response << parser.parse( hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetStorageRepositories < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, sr_hash| @response << parser.parse( sr_hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetVBDs < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, hash| @response << parser.parse( hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
class GetVIFs < Fog::Parsers::XenServer::Base
|
|
5
|
+
|
|
6
|
+
def reset
|
|
7
|
+
@response = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse( data )
|
|
11
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
12
|
+
data.each_pair {|reference, vif_hash| @response << parser.parse( vif_hash ).merge(:reference => reference) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module XenServer
|
|
4
|
+
|
|
5
|
+
class GetVms < Fog::Parsers::XenServer::Base
|
|
6
|
+
|
|
7
|
+
def reset
|
|
8
|
+
@response = []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def parse( data )
|
|
12
|
+
parser = Fog::Parsers::XenServer::Base.new
|
|
13
|
+
data.each_pair {|reference, vm_hash| @response << parser.parse( vm_hash ).merge(:reference => reference) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class XenServer
|
|
4
|
+
class Real
|
|
5
|
+
|
|
6
|
+
def clone_server( server_name, template_ref )
|
|
7
|
+
# Clone the VM template
|
|
8
|
+
if template_ref.kind_of? Fog::Compute::XenServer::Server
|
|
9
|
+
template_ref = template_ref.reference
|
|
10
|
+
end
|
|
11
|
+
raise ArgumentError.new("Invalid template_ref") if template_ref.nil?
|
|
12
|
+
raise ArgumentError.new("Invalid template_ref") if server_name.nil?
|
|
13
|
+
|
|
14
|
+
ref = @connection.request(
|
|
15
|
+
{:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.clone'},
|
|
16
|
+
template_ref, server_name
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Mock
|
|
23
|
+
|
|
24
|
+
def clone_server( server_name, template_ref )
|
|
25
|
+
Fog::Mock.not_implemented
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class XenServer
|
|
4
|
+
|
|
5
|
+
class Real
|
|
6
|
+
|
|
7
|
+
# Create a Network
|
|
8
|
+
#
|
|
9
|
+
# @see http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=network
|
|
10
|
+
#
|
|
11
|
+
def create_network( name, config = {} )
|
|
12
|
+
config.reject! { |k,v| v.nil? }
|
|
13
|
+
|
|
14
|
+
default_config = {
|
|
15
|
+
:name_label => name,
|
|
16
|
+
# Description is mandatory in XenAPI but we default to empty
|
|
17
|
+
:name_description => config[:description] || '',
|
|
18
|
+
# Mandatory, but can be empty
|
|
19
|
+
:other_config => {}
|
|
20
|
+
}.merge config
|
|
21
|
+
|
|
22
|
+
@connection.request(
|
|
23
|
+
{
|
|
24
|
+
:parser => Fog::Parsers::XenServer::Base.new,
|
|
25
|
+
:method => 'network.create'
|
|
26
|
+
},
|
|
27
|
+
default_config
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class Mock
|
|
33
|
+
|
|
34
|
+
def create_network( name, description = '', config = {} )
|
|
35
|
+
Fog::Mock.not_implemented
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class XenServer
|
|
4
|
+
class Real
|
|
5
|
+
|
|
6
|
+
def get_vm_by_name(label)
|
|
7
|
+
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.get_by_name_label' }, label)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get_vm_by_uuid(uuid)
|
|
11
|
+
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.get_by_uuid' }, uuid)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create_server_raw(config = {})
|
|
15
|
+
config[:name_label] = config[:name] if config[:name]
|
|
16
|
+
config.delete :name
|
|
17
|
+
config[:affinity] = config[:__affinity] if config[:__affinity]
|
|
18
|
+
config.delete :__affinity
|
|
19
|
+
raise ArgumentError.new("Invalid :name_label attribute") \
|
|
20
|
+
if !config[:name_label]
|
|
21
|
+
raise ArgumentError.new("Invalid :affinity attribute") \
|
|
22
|
+
if not config[:affinity]
|
|
23
|
+
config[:affinity] = config[:affinity].reference \
|
|
24
|
+
if config[:affinity].kind_of? Fog::Compute::XenServer::Host
|
|
25
|
+
config.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
|
|
26
|
+
%w{ VCPUs_at_startup
|
|
27
|
+
VCPUs_max
|
|
28
|
+
VCPUs_params
|
|
29
|
+
PV_bootloader_args
|
|
30
|
+
PV_bootloader
|
|
31
|
+
PV_kernel
|
|
32
|
+
PV_ramdisk
|
|
33
|
+
PV_legacy_args
|
|
34
|
+
HVM_boot_policy
|
|
35
|
+
HVM_boot_params
|
|
36
|
+
}.each do |k|
|
|
37
|
+
if config[k.downcase.to_sym]
|
|
38
|
+
config[k.to_sym] = config[k.downcase.to_sym]
|
|
39
|
+
config.delete k.downcase.to_sym
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
vm_record = {
|
|
43
|
+
:name_label => '',
|
|
44
|
+
:name_description => 'description',
|
|
45
|
+
:user_version => '0',
|
|
46
|
+
:affinity => '',
|
|
47
|
+
:is_a_template => true,
|
|
48
|
+
:auto_power_on => false,
|
|
49
|
+
:memory_static_max => '536870912',
|
|
50
|
+
:memory_static_min => '536870912',
|
|
51
|
+
:memory_dynamic_max => '536870912',
|
|
52
|
+
:memory_dynamic_min => '536870912',
|
|
53
|
+
:VCPUs_params => {},
|
|
54
|
+
:VCPUs_max => '1',
|
|
55
|
+
:VCPUs_at_startup => '1',
|
|
56
|
+
:actions_after_shutdown => 'Destroy',
|
|
57
|
+
:actions_after_reboot => 'Restart',
|
|
58
|
+
:actions_after_crash => 'Restart',
|
|
59
|
+
:platform => { 'nx' => false, 'acpi' => true, 'apic' => 'true', 'pae' => true, 'viridian' => true},
|
|
60
|
+
:platform => {},
|
|
61
|
+
:other_config => {},
|
|
62
|
+
:pool_name => '',
|
|
63
|
+
:PV_bootloader => 'pygrub', #pvgrub, eliloader
|
|
64
|
+
:PV_kernel => '',
|
|
65
|
+
:PV_ramdisk => '',
|
|
66
|
+
:PV_args => '-- quiet console=hvc0',
|
|
67
|
+
:PV_bootloader_args => '',
|
|
68
|
+
:PV_legacy_args => '',
|
|
69
|
+
:HVM_boot_policy => '',
|
|
70
|
+
:HVM_boot_params => {},
|
|
71
|
+
:PCI_bus => '',
|
|
72
|
+
:recommendations => '',
|
|
73
|
+
}.merge config
|
|
74
|
+
ref = @connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.create' }, vm_record)
|
|
75
|
+
ref
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def create_server( name_label, template = nil, networks = [], extra_args = {})
|
|
79
|
+
if !networks.kind_of? Array
|
|
80
|
+
raise "Invalid networks argument"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if template.kind_of? String
|
|
84
|
+
template_string = template
|
|
85
|
+
# try template by UUID
|
|
86
|
+
template = servers.templates.find { |s| s.uuid == template_string }
|
|
87
|
+
if template.nil?
|
|
88
|
+
# Try with the template name just in case
|
|
89
|
+
template = servers.get get_vm_by_name(template_string)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if template.nil?
|
|
94
|
+
raise "Invalid template"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
raise "Template #{template_string} does not exist" if template.allowed_operations.nil?
|
|
98
|
+
raise 'Clone Operation not Allowed' unless template.allowed_operations.include?('clone')
|
|
99
|
+
|
|
100
|
+
# Clone the VM template
|
|
101
|
+
ref = clone_server name_label, template.reference
|
|
102
|
+
# Add additional NICs
|
|
103
|
+
networks.each do |n|
|
|
104
|
+
create_vif ref, n.reference
|
|
105
|
+
end
|
|
106
|
+
if !extra_args[:auto_start] == false
|
|
107
|
+
@connection.request({:parser => Fog::Parsers::XenServer::Base.new, :method => 'VM.provision'}, ref)
|
|
108
|
+
start_vm( ref )
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
ref
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
class Mock
|
|
117
|
+
|
|
118
|
+
def create_server( name_label, template = nil, network = nil, extra_args = {})
|
|
119
|
+
Fog::Mock.not_implemented
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def create_server_raw(config = {})
|
|
123
|
+
Fog::Mock.not_implemented
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|