mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
b2c8ff0388
Should facilitate the following: require 'fog/aws' require 'fog/compute' require 'fog/aws/compute' I think once you `require 'rubygems'` those should work. further cleanup should reduce common requires (ie nokogiri)
104 lines
2.9 KiB
Ruby
104 lines
2.9 KiB
Ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'libvirt'))
|
|
require 'fog/compute'
|
|
|
|
require 'fog/libvirt/models/compute/uri'
|
|
|
|
module Fog
|
|
module Compute
|
|
class Libvirt < Fog::Service
|
|
|
|
requires :libvirt_uri
|
|
|
|
model_path 'fog/libvirt/models/compute'
|
|
model :server
|
|
collection :servers
|
|
model :network
|
|
collection :networks
|
|
model :interface
|
|
collection :interfaces
|
|
model :volume
|
|
collection :volumes
|
|
model :pool
|
|
collection :pools
|
|
model :node
|
|
collection :nodes
|
|
|
|
class Mock
|
|
|
|
def initialize(options={})
|
|
Fog::Mock.not_implemented
|
|
end
|
|
|
|
end
|
|
|
|
class Real
|
|
|
|
attr_reader :connection
|
|
attr_reader :uri
|
|
attr_reader :ip_command
|
|
|
|
|
|
def initialize(options={})
|
|
@uri = ::Fog::Compute::LibvirtUtil::URI.new(enhance_uri(options[:libvirt_uri]))
|
|
@ip_command = options[:libvirt_ip_command]
|
|
|
|
# libvirt is part of the gem => ruby-libvirt
|
|
require 'libvirt'
|
|
|
|
begin
|
|
if options[:libvirt_user] and options[:libvirt_password]
|
|
@connection = ::Libvirt::open_auth(@uri.uri, [::Libvirt::CRED_AUTHNAME, ::Libvirt::CRED_PASSPHRASE]) do |cred|
|
|
if cred['type'] == ::Libvirt::CRED_AUTHNAME
|
|
res = options[:libvirt_user]
|
|
elsif cred["type"] == ::Libvirt::CRED_PASSPHRASE
|
|
res = options[:libvirt_password]
|
|
else
|
|
end
|
|
end
|
|
else
|
|
@connection = ::Libvirt::open(@uri.uri)
|
|
end
|
|
|
|
rescue ::Libvirt::ConnectionError
|
|
raise Fog::Errors::Error.new("Error making a connection to libvirt URI #{@uri.uri}:\n#{$!}")
|
|
end
|
|
|
|
end
|
|
|
|
def enhance_uri(uri)
|
|
require 'cgi'
|
|
append=""
|
|
|
|
# on macosx, chances are we are using libvirt through homebrew
|
|
# the client will default to a socket location based on it's own location (/opt)
|
|
# we conveniently point it to /var/run/libvirt/libvirt-sock
|
|
# if no socket option has been specified explicitly
|
|
|
|
if RUBY_PLATFORM =~ /darwin/
|
|
querystring=::URI.parse(uri).query
|
|
if querystring.nil?
|
|
append="?socket=/var/run/libvirt/libvirt-sock"
|
|
else
|
|
if !::CGI.parse(querystring).has_key?("socket")
|
|
append="&socket=/var/run/libvirt/libvirt-sock"
|
|
end
|
|
end
|
|
end
|
|
newuri=uri+append
|
|
return newuri
|
|
end
|
|
|
|
|
|
# hack to provide 'requests'
|
|
def method_missing(method_sym, *arguments, &block)
|
|
if @connection.respond_to?(method_sym)
|
|
@connection.send(method_sym, *arguments)
|
|
else
|
|
super
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|