Class: Fog::Compute::Ovirt::V4::Real
- Inherits:
-
Object
- Object
- Fog::Compute::Ovirt::V4::Real
show all
- Extended by:
- Shared
- Includes:
- Shared
- Defined in:
- lib/fog/ovirt/compute/v4.rb,
lib/fog/ovirt/requests/compute/v4/create_vm.rb,
lib/fog/ovirt/requests/compute/v4/get_quota.rb,
lib/fog/ovirt/requests/compute/v4/vm_action.rb,
lib/fog/ovirt/requests/compute/v4/vm_ticket.rb,
lib/fog/ovirt/requests/compute/v4/add_volume.rb,
lib/fog/ovirt/requests/compute/v4/destroy_vm.rb,
lib/fog/ovirt/requests/compute/v4/datacenters.rb,
lib/fog/ovirt/requests/compute/v4/get_cluster.rb,
lib/fog/ovirt/requests/compute/v4/list_quotas.rb,
lib/fog/ovirt/requests/compute/v4/get_template.rb,
lib/fog/ovirt/requests/compute/v4/list_volumes.rb,
lib/fog/ovirt/requests/compute/v4/add_interface.rb,
lib/fog/ovirt/requests/compute/v4/list_clusters.rb,
lib/fog/ovirt/requests/compute/v4/list_networks.rb,
lib/fog/ovirt/requests/compute/v4/update_volume.rb,
lib/fog/ovirt/requests/compute/v4/destroy_volume.rb,
lib/fog/ovirt/requests/compute/v4/list_templates.rb,
lib/fog/ovirt/requests/compute/v4/get_api_version.rb,
lib/fog/ovirt/requests/compute/v4/list_vm_volumes.rb,
lib/fog/ovirt/requests/compute/v4/storage_domains.rb,
lib/fog/ovirt/requests/compute/v4/update_interface.rb,
lib/fog/ovirt/requests/compute/v4/destroy_interface.rb,
lib/fog/ovirt/requests/compute/v4/get_instance_type.rb,
lib/fog/ovirt/requests/compute/v4/list_vm_interfaces.rb,
lib/fog/ovirt/requests/compute/v4/get_virtual_machine.rb,
lib/fog/ovirt/requests/compute/v4/list_instance_types.rb,
lib/fog/ovirt/requests/compute/v4/list_template_volumes.rb,
lib/fog/ovirt/requests/compute/v4/list_virtual_machines.rb,
lib/fog/ovirt/requests/compute/v4/list_operating_systems.rb,
lib/fog/ovirt/requests/compute/v4/list_template_interfaces.rb
Constant Summary
collapse
- DISK_SIZE_TO_GB =
1024 * 1024 * 1024
Instance Method Summary
collapse
-
#add_interface(id, options = {}) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#add_options_defaults(options) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity.
-
#add_volume(id, options = {}) ⇒ Object
-
#api_version ⇒ Object
rubocop:enable Metrics/AbcSize.
-
#check_for_option(opts, name) ⇒ Object
-
#create_vm(attrs) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#datacenter ⇒ Object
-
#datacenters(filter = {}) ⇒ Object
-
#destroy_interface(id, options) ⇒ Object
-
#destroy_vm(options = {}) ⇒ Object
-
#destroy_volume(id, options) ⇒ Object
-
#get_cluster(id) ⇒ Object
-
#get_instance_type(id) ⇒ Object
-
#get_quota(id) ⇒ Object
-
#get_template(id) ⇒ Object
-
#get_virtual_machine(id) ⇒ Object
-
#initialize(options = {}) ⇒ Real
constructor
rubocop:disable Metrics/AbcSize.
-
#list_clusters(filters = {}) ⇒ Object
-
#list_instance_types(filters = {}) ⇒ Object
-
#list_networks(cluster_id) ⇒ Object
-
#list_operating_systems ⇒ Object
-
#list_quotas(filters = {}) ⇒ Object
-
#list_template_interfaces(vm_id) ⇒ Object
-
#list_template_volumes(template_id) ⇒ Object
-
#list_templates(filters = {}) ⇒ Object
-
#list_virtual_machines(filters = {}) ⇒ Object
-
#list_vm_interfaces(vm_id) ⇒ Object
-
#list_vm_volumes(vm_id) ⇒ Object
-
#list_volumes ⇒ Object
-
#process_vm_opts(opts) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity.
-
#storage_domains(filter = {}) ⇒ Object
-
#update_interface(id, options) ⇒ Object
-
#update_volume(id, options) ⇒ Object
-
#vm_action(options = {}) ⇒ Object
-
#vm_ticket(id, options = {}) ⇒ Object
Methods included from Shared
check_arguments, get_attr_value, ovirt_attrs
Constructor Details
#initialize(options = {}) ⇒ Real
rubocop:disable Metrics/AbcSize
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/fog/ovirt/compute/v4.rb', line 124
def initialize(options = {})
require "ovirtsdk4"
username = options[:ovirt_username]
password = options[:ovirt_password]
server = options[:ovirt_server]
port = options[:ovirt_port] || 8080
api_path = options[:ovirt_api_path] || "/api"
url = options[:ovirt_url] || "https://#{server}:#{port}#{api_path}"
connection_opts = {
:url => url,
:username => username,
:password => password
}
@datacenter = options[:ovirt_datacenter]
connection_opts[:ca_file] = options[:ca_file]
connection_opts[:ca_certs] = [OpenSSL::X509::Certificate.new(options[:public_key])] if options[:public_key].present?
@client = ExceptionWrapper.new(OvirtSDK4::Connection.new(connection_opts))
end
|
Instance Method Details
#add_interface(id, options = {}) ⇒ Object
rubocop:disable Metrics/AbcSize
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/fog/ovirt/requests/compute/v4/add_interface.rb', line 7
def add_interface(id, options = {})
raise ArgumentError, "instance id is a required parameter" unless id
vm = client.system_service.vms_service.vm_service(id)
nics_service = vm.nics_service
options = options.dup
if options[:network].present?
network = client.system_service.networks_service.network_service(options[:network]).get
profiles = client.follow_link(network.vnic_profiles)
profile = profiles.detect { |x| x.name == network.name }
profile ||= profiles.sort_by(&:name).first
options.delete(:network)
options[:vnic_profile] = { :id => profile.id }
end
interface = OvirtSDK4::Nic.new(options)
nics_service.add(interface)
end
|
#add_options_defaults(options) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/fog/ovirt/requests/compute/v4/add_volume.rb', line 19
def add_options_defaults(options)
options = options.dup
search = options[:search] || format("datacenter=%<datacenter>s", :datacenter => datacenter)
options[:bootable] ||= "true"
options[:interface] ||= OvirtSDK4::DiskInterface::VIRTIO
options[:provisioned_size] = options[:size_gb].to_i * DISK_SIZE_TO_GB if options[:size_gb]
options[:storage_domain_id] = options[:storage_domain] || storagedomains(:role => "data", :search => search).first.id
options[:provisioned_size] ||= 8 * DISK_SIZE_TO_GB
options[:type] ||= OvirtSDK4::DiskType::DATA
options[:format] ||= OvirtSDK4::DiskFormat::COW
options[:sparse] = true unless options[:sparse].present?
options[:quota] = options[:quota].present? ? client.system_service.data_centers_service.data_center_service(datacenter).quotas_service.quota_service(options[:quota]).get : nil
options[:disk] ||= {}
options[:disk][:storage_domains] ||= [client.system_service.storage_domains_service.storage_domain_service(options[:storage_domain_id]).get]
options[:disk][:provisioned_size] ||= options.delete(:provisioned_size)
options[:disk][:type] ||= options.delete(:type)
options[:disk][:format] ||= options.delete(:format)
options[:disk][:sparse] = options.delete(:sparse) unless options[:disk][:sparse].present?
options
end
|
#add_volume(id, options = {}) ⇒ Object
8
9
10
11
12
13
14
15
16
|
# File 'lib/fog/ovirt/requests/compute/v4/add_volume.rb', line 8
def add_volume(id, options = {})
raise ArgumentError, "instance id is a required parameter" unless id
options = add_options_defaults(options)
disk_attachments_service = client.system_service.vms_service.vm_service(id).disk_attachments_service
disk = OvirtSDK4::DiskAttachment.new(options)
disk_attachments_service.add(disk)
end
|
#api_version ⇒ Object
rubocop:enable Metrics/AbcSize
147
148
149
150
|
# File 'lib/fog/ovirt/compute/v4.rb', line 147
def api_version
api = client.system_service.get
api.product_info.version.full_version
end
|
#check_for_option(opts, name) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/create_vm.rb', line 6
def check_for_option(opts, name)
opts[name.to_sym] || opts[(name + "_name").to_sym]
end
|
#create_vm(attrs) ⇒ Object
rubocop:disable Metrics/AbcSize
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/fog/ovirt/requests/compute/v4/create_vm.rb', line 28
def create_vm(attrs)
attrs = attrs.dup
attrs[:cluster_name] ||= datacenter.clusters.first.name unless attrs[:cluster]
vms_service = client.system_service.vms_service
attrs[:cluster] = client.system_service.clusters_service.cluster_service(attrs[:cluster]).get
attrs[:instance_type] = attrs[:instance_type].present? ? client.system_service.instance_types_service.instance_type_service(attrs[:instance_type]).get : nil
attrs[:template] = if attrs[:template].present?
client.system_service.templates_service.template_service(attrs[:template]).get
else
client.system_service.get.special_objects.blank_template
end
attrs[:comment] ||= ""
attrs[:quota] = attrs[:quota].present? ? client.system_service.data_centers_service.data_center_service(datacenter).quotas_service.quota_service(attrs[:quota]).get : nil
if attrs[:cores].present?
cpu_topology = OvirtSDK4::CpuTopology.new(:cores => attrs[:cores], :sockets => "1")
attrs[:cpu] = OvirtSDK4::Cpu.new(:topology => cpu_topology)
end
process_vm_opts(attrs)
new_vm = OvirtSDK4::Vm.new(attrs)
vms_service.add(new_vm)
end
|
#datacenter ⇒ Object
152
153
154
|
# File 'lib/fog/ovirt/compute/v4.rb', line 152
def datacenter
@datacenter ||= datacenters.first[:id]
end
|
#datacenters(filter = {}) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/datacenters.rb', line 6
def datacenters(filter = {})
client.system_service.data_centers_service.list(filter).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#destroy_interface(id, options) ⇒ Object
6
7
8
9
10
11
|
# File 'lib/fog/ovirt/requests/compute/v4/destroy_interface.rb', line 6
def destroy_interface(id, options)
raise ArgumentError, "instance id is a required parameter" unless id
raise ArgumentError, "interface id is a required parameter for destroy-interface" unless options.key? :id
vm = client.system_service.vms_service.vm_service(id)
vm.nics_service.nic_service(options[:id]).remove
end
|
#destroy_vm(options = {}) ⇒ Object
6
7
8
9
10
11
|
# File 'lib/fog/ovirt/requests/compute/v4/destroy_vm.rb', line 6
def destroy_vm(options = {})
raise ArgumentError, "instance id is a required parameter" unless options.key? :id
client.system_service.vms_service.vm_service(options[:id]).remove
true
end
|
#destroy_volume(id, options) ⇒ Object
6
7
8
9
10
11
12
|
# File 'lib/fog/ovirt/requests/compute/v4/destroy_volume.rb', line 6
def destroy_volume(id, options)
raise ArgumentError, "instance id is a required parameter" unless id
raise ArgumentError, "volume id is a required parameter for destroy-volume" unless options.key? :id
disks_service = client.system_service.disks_service
disks_service.disk_service(options[:id]).remove
end
|
#get_cluster(id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/get_cluster.rb', line 6
def get_cluster(id)
ovirt_attrs client.system_service.clusters_service.cluster_service(id).get
end
|
#get_instance_type(id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/get_instance_type.rb', line 6
def get_instance_type(id)
ovirt_attrs client.system_service.instance_types_service.instance_type_service(id).get
end
|
#get_quota(id) ⇒ Object
6
7
8
9
|
# File 'lib/fog/ovirt/requests/compute/v4/get_quota.rb', line 6
def get_quota(id)
quota = client.system_service.data_centers_service.data_center_service(datacenter).quotas_service.quota_service(id).get
ovirt_attrs quota
end
|
#get_template(id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/get_template.rb', line 6
def get_template(id)
ovirt_attrs client.system_service.templates_service.template_service(id).get
end
|
#get_virtual_machine(id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/get_virtual_machine.rb', line 6
def get_virtual_machine(id)
ovirt_attrs client.system_service.vms_service.vm_service(id).get
end
|
#list_clusters(filters = {}) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_clusters.rb', line 6
def list_clusters(filters = {})
client.system_service.clusters_service.list(filters).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_instance_types(filters = {}) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_instance_types.rb', line 6
def list_instance_types(filters = {})
client.system_service.instance_types_service.list(filters).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_networks(cluster_id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_networks.rb', line 6
def list_networks(cluster_id)
client.system_service.clusters_service.cluster_service(cluster_id).networks_service.list
end
|
#list_operating_systems ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_operating_systems.rb', line 6
def list_operating_systems
client.system_service.operating_systems_service.list.map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_quotas(filters = {}) ⇒ Object
6
7
8
9
|
# File 'lib/fog/ovirt/requests/compute/v4/list_quotas.rb', line 6
def list_quotas(filters = {})
data_center = client.system_service.data_centers_service.data_center_service(datacenter)
data_center.quotas_service.list(filters).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_template_interfaces(vm_id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_template_interfaces.rb', line 6
def list_template_interfaces(vm_id)
client.system_service.templates_service.template_service(vm_id).nics_service.list.map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_template_volumes(template_id) ⇒ Object
6
7
8
9
10
11
12
13
14
|
# File 'lib/fog/ovirt/requests/compute/v4/list_template_volumes.rb', line 6
def list_template_volumes(template_id)
template = client.system_service.templates_service.template_service(template_id).get
attachments = client.follow_link(template.disk_attachments)
attachments.map do |attachment|
ovirt_attrs client.follow_link(attachment.disk)
end
end
|
#list_templates(filters = {}) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_templates.rb', line 6
def list_templates(filters = {})
client.system_service.templates_service.list(filters).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_virtual_machines(filters = {}) ⇒ Object
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/fog/ovirt/requests/compute/v4/list_virtual_machines.rb', line 6
def list_virtual_machines(filters = {})
filters = filters.dup
page = filters.delete(:page)
without_details = filters.delete(:without_details)
filters[:all_content] = true unless without_details
filters[:search] ||= ""
filters[:search] += " page #{page}"
client.system_service.vms_service.list(filters).map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_vm_interfaces(vm_id) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_vm_interfaces.rb', line 6
def list_vm_interfaces(vm_id)
client.system_service.vms_service.vm_service(vm_id).nics_service.list.map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#list_vm_volumes(vm_id) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/fog/ovirt/requests/compute/v4/list_vm_volumes.rb', line 6
def list_vm_volumes(vm_id)
vm = client.system_service.vms_service.vm_service(vm_id).get
attachments = client.follow_link(vm.disk_attachments)
attachments.map do |attachment|
ovirt_attrs client.follow_link(attachment.disk)
end
end
|
#list_volumes ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/list_volumes.rb', line 6
def list_volumes
client.system_service.disks_service.list.map { |ovirt_obj| ovirt_attrs ovirt_obj }
end
|
#process_vm_opts(opts) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/fog/ovirt/requests/compute/v4/create_vm.rb', line 11
def process_vm_opts(opts)
return unless check_for_option(opts, "template") && check_for_option(opts, "storagedomain")
template_id = opts[:template] || client.system_service.templates_service.search(:name => opts[:template_name]).first.id
template_disks = client.system_service.templates_service.template_service(template_id).get.disk_attachments
storagedomain_id = opts[:storagedomain] || storagedomains.select { |s| s.name == opts[:storagedomain_name] }.first.id
opts[:clone] = true unless opts[:clone] == true || template_disks.empty? || template_disks.all? { |d| d.storage_domain == storagedomain_id }
opts[:disks] = template_disks.collect { |d| { :id => d.id, :storagedomain => storagedomain_id } }
end
|
#storage_domains(filter = {}) ⇒ Object
6
7
8
9
10
11
12
13
|
# File 'lib/fog/ovirt/requests/compute/v4/storage_domains.rb', line 6
def storage_domains(filter = {})
filter = filter.dup
role_filter = filter.delete(:role)
client.system_service.storage_domains_service.list(filter).collect do |sd|
role_filter.nil? || sd.type == role_filter ? sd : nil
end.compact
end
|
#update_interface(id, options) ⇒ Object
15
16
17
18
19
20
21
|
# File 'lib/fog/ovirt/requests/compute/v4/update_interface.rb', line 15
def update_interface(id, options)
check_arguments(id, options)
interface_id = options[:id]
nic = client.system_service.vms_service.vm_service(id).nics_service.nic_service(interface_id)
nic.update(nic, options)
end
|
#update_volume(id, options) ⇒ Object
15
16
17
18
19
20
21
22
|
# File 'lib/fog/ovirt/requests/compute/v4/update_volume.rb', line 15
def update_volume(id, options)
check_arguments(id, options)
disk_id = options[:id]
disk_attachment = client.system_service.vms_service.vm_service(id).disk_attachments_service.attachment_service(disk_id)
disk_attachment.update(disk_attachment, options)
true end
|
#vm_action(options = {}) ⇒ Object
6
7
8
9
10
11
12
13
|
# File 'lib/fog/ovirt/requests/compute/v4/vm_action.rb', line 6
def vm_action(options = {})
raise ArgumentError, "instance id is a required parameter" unless options.key? :id
raise ArgumentError, "action is a required parameter" unless options.key? :action
vm_service = client.system_service.vms_service.vm_service(options[:id])
vm_service.public_send(options[:action])
vm_service.get.status
end
|
#vm_ticket(id, options = {}) ⇒ Object
6
7
8
|
# File 'lib/fog/ovirt/requests/compute/v4/vm_ticket.rb', line 6
def vm_ticket(id, options = {})
client.system_service.vms_service.vm_service(id).ticket(options)
end
|