class Fog::Compute::Ovirt::V4::Real
Constants
- DISK_SIZE_TO_GB
Attributes
client[R]
Public Class Methods
new(options = {})
click to toggle source
rubocop:disable Metrics/AbcSize
# 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
Public Instance Methods
add_interface(id, options = {})
click to toggle source
rubocop:disable Metrics/AbcSize
# 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)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
# 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 # If no size is given, default to a volume size of 8GB 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 = {})
click to toggle source
# 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()
click to toggle source
rubocop:enable Metrics/AbcSize
# 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)
click to toggle source
# 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)
click to toggle source
rubocop:disable Metrics/AbcSize
# 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 # TODO: handle cloning from template process_vm_opts(attrs) new_vm = OvirtSDK4::Vm.new(attrs) vms_service.add(new_vm) end
datacenter()
click to toggle source
# File lib/fog/ovirt/compute/v4.rb, line 152 def datacenter @datacenter ||= datacenters.first[:id] end
datacenters(filter = {})
click to toggle source
# 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)
click to toggle source
# 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 = {})
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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 = {})
click to toggle source
# 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 = {})
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# 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 = {})
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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 = {})
click to toggle source
# 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 = {})
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/fog/ovirt/requests/compute/v4/list_vm_volumes.rb, line 6 def list_vm_volumes(vm_id) # disk_attachments_service = client.system_service.vms_service.vm_service(vm_id).disk_attachments_service # disk_attachments_service.list.map {|ovirt_obj| ovirt_attrs client.system_service.disks_service.disk_service(ovirt_obj.id).get} 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()
click to toggle source
# 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)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
# 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 # Make sure the 'clone' option is set if any of the disks defined by # the template is stored on a different storage domain than requested opts[:clone] = true unless opts[:clone] == true || template_disks.empty? || template_disks.all? { |d| d.storage_domain == storagedomain_id } # Create disks map opts[:disks] = template_disks.collect { |d| { :id => d.id, :storagedomain => storagedomain_id } } end
storage_domains(filter = {})
click to toggle source
# 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| # Filter by role is not supported by the search language. The work around is to list all, then filter. role_filter.nil? || sd.type == role_filter ? sd : nil end.compact end
update_interface(id, options)
click to toggle source
# 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)
click to toggle source
# 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 # If we come here, expect success and return true end
vm_action(options = {})
click to toggle source
# 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 = {})
click to toggle source
# 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