module Miasma::Contrib::Lxd::Api
API updates required for LXD communication
Constants
- DEFAULT_API_VERSION
Default API version to require
Public Class Methods
included(klass)
click to toggle source
Load required attributes into API class
@param klass [Class]
# File lib/miasma/contrib/lxd.rb, line 15 def self.included(klass) klass.class_eval do attribute :name, String, :required => true, :default => Socket.gethostname attribute :password, String attribute :api_endpoint, String, :required => true attribute :ssl_certificate, String, :required => true attribute :ssl_key, String, :required => true attribute :version, Gem::Version, :coerce => lambda{|v| Gem::Version.new(v.to_s)}, :required => true, :default => lambda{ Miasma::Contrib::Lxd::Api::DEFAULT_API_VERSION } end end
Public Instance Methods
custom_setup(args)
click to toggle source
Clean up endpoint prior to data loading
@param args [Hash]
# File lib/miasma/contrib/lxd.rb, line 34 def custom_setup(args) if(args[:api_endpoint].to_s.end_with?('/')) args[:api_endpoint] = args[:api_endpoint][0, endpoint.length - 1] end end
endpoint()
click to toggle source
@return [String] versioned endpoint
# File lib/miasma/contrib/lxd.rb, line 27 def endpoint "#{api_endpoint}/#{version}" end
make_request(connection, http_method, request_args)
click to toggle source
Perform request
@param connection [HTTP] @param http_method [Symbol] @param request_args [Array] @return [HTTP::Response]
# File lib/miasma/contrib/lxd.rb, line 46 def make_request(connection, http_method, request_args) dest, options = request_args options = Smash.new unless options options[:ssl_context] = ssl_context connection.send(http_method, dest, options) end
Protected Instance Methods
authenticate_connection!()
click to toggle source
Authenticate with the endpoint to create trusted connection
# File lib/miasma/contrib/lxd.rb, line 79 def authenticate_connection! request( :method => :post, :path => 'certificates', :json => { :type => :client, :name => name, :password => password } ) end
connect()
click to toggle source
Establish connection to endpoint and register client if not already registered
# File lib/miasma/contrib/lxd.rb, line 67 def connect result = request(:endpoint => api_endpoint)[:body] unless(result[:metadata].any?{|s| s.end_with?(version.to_s)}) raise InvalidVersionError end result = request(:endpoint => api_endpoint, :path => "/#{version}")[:body] if(result[:auth] != 'trusted' && password) authenticate_connection! end end
ssl_context()
click to toggle source
@return [OpenSSL::SSL::SSLContext.new]
# File lib/miasma/contrib/lxd.rb, line 56 def ssl_context memoize(:ssl_context) do ctx = OpenSSL::SSL::SSLContext.new ctx.cert = OpenSSL::X509::Certificate.new(File.read(ssl_certificate)) ctx.key = OpenSSL::PKey::RSA.new(File.read(ssl_key)) ctx end end