fog--fog/lib/fog/ovirt/compute.rb

114 lines
3.1 KiB
Ruby

module Fog
module Compute
class Ovirt < Fog::Service
requires :ovirt_username, :ovirt_password
recognizes :ovirt_url, :ovirt_server, :ovirt_port, :ovirt_api_path, :ovirt_datacenter
model_path 'fog/ovirt/models/compute'
model :server
collection :servers
model :template
collection :templates
model :cluster
collection :clusters
model :interface
collection :interfaces
model :volume
collection :volumes
request_path 'fog/ovirt/requests/compute'
request :vm_action
request :destroy_vm
request :create_vm
request :update_vm
request :datacenters
request :storage_domains
request :list_virtual_machines
request :get_virtual_machine
request :list_templates
request :get_template
request :list_clusters
request :get_cluster
request :add_interface
request :destroy_interface
request :update_interface
request :list_vm_interfaces
request :list_template_interfaces
request :list_networks
request :vm_ticket
request :list_vm_volumes
request :list_template_volumes
request :add_volume
request :destroy_volume
module Shared
# converts an OVIRT object into an hash for fog to consume.
def ovirt_attrs obj
opts = {:raw => obj}
obj.instance_variables.each do |v|
key = v.to_s.gsub("@","").to_sym
value = obj.instance_variable_get(v)
#ignore nil values
next if value.nil?
opts[key] = case value
when OVIRT::Link
value.id
when Array
value
when Hash
value
else
value.to_s.strip
end
end
opts
end
end
class Mock
include Shared
def initialize(options={})
require 'rbovirt'
username = options[:ovirt_username]
password = options[:ovirt_password]
url = options[:ovirt_url]
end
private
attr_reader :client
#read mocks xml
def read_xml(file_name)
file_path = File.join(File.dirname(__FILE__),"requests","compute","mock_files",file_name)
File.read(file_path)
end
end
class Real
include Shared
def initialize(options={})
require 'rbovirt'
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] || "#{@scheme}://#{server}:#{port}#{api_path}"
datacenter = options[:ovirt_datacenter]
@client = OVIRT::Client.new(username, password, url, datacenter)
end
private
attr_reader :client
end
end
end
end