module NexusSW::LXD::RestAPI::Connection

Public Instance Methods

delete(relative_url) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 25
def delete(relative_url)
  send_request :delete, relative_url
end
get(relative_url, &block) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 9
def get(relative_url, &block)
  send_request :get, relative_url, &block
end
patch(relative_url, content) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 17
def patch(relative_url, content)
  send_request :patch, relative_url, content
end
post(relative_url, content, &block) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 21
def post(relative_url, content, &block)
  send_request :post, relative_url, content, &block
end
put(relative_url, content) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 13
def put(relative_url, content)
  send_request :put, relative_url, content
end

Private Instance Methods

baseurl() click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 46
def baseurl
  api_options[:api_endpoint]
end
client_cert() click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 54
def client_cert
  @client_cert ||= OpenSSL::X509::Certificate.new(File.read(ssl_opts[:client_cert] || "#{ENV['HOME']}/.config/lxc/client.crt"))
end
client_key() click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 58
def client_key
  @client_key ||= OpenSSL::PKey::RSA.new(File.read(ssl_opts[:client_key] || "#{ENV['HOME']}/.config/lxc/client.key"))
end
connection(&block) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 31
def connection(&block)
  return @conn if @conn

  opts = {
    url: baseurl,
    ssl: {
      verify: verify_ssl,
      client_cert: client_cert,
      client_key: client_key,
    },
  }

  @conn = Faraday.new opts, &block
end
do_error(code, message) click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 67
def do_error(code, message)
  case code
  when 404 then raise RestAPI::Error::NotFound, message
  when 400 then raise RestAPI::Error::BadRequest, message
  else raise RestAPI::Error, "Error #{code}: #{message}"
  end
end
send_request(verb, relative_url, content = nil) { |req| ... } click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 75
def send_request(verb, relative_url, content = nil)
  fileop = false
  response = connection.send(verb) do |req|
    req.url relative_url
    if content.is_a? Hash
      req.headers["Content-Type"] = "application/json"
      req.body = content.to_json
    elsif content # Only upon file upload at this time
      yield req if block_given?
      req.body = content.to_s
      fileop = true
    end
  end
  begin
    raw = JSON.parse(response.body)
    raw = raw[0] if raw.is_a? Array
    do_error(raw["error_code"].to_i, raw["error"]) if response.status >= 400
    do_error(raw["metadata"]["status_code"].to_i, raw["metadata"]["err"]) if raw["metadata"].is_a?(Hash) && (raw["metadata"]["class"] == "task") && (raw["metadata"]["status_code"] && raw["metadata"]["status_code"].to_i >= 400)
  rescue JSON::ParserError
    do_error response.status, "Malformed JSON Response" if response.status >= 400
  end
  block_given? && !fileop ? yield(response) : LXD.symbolize_keys(raw)
end
ssl_opts() click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 50
def ssl_opts
  api_options[:ssl] || {}
end
verify_ssl() click to toggle source
# File lib/nexussw/lxd/rest_api/connection.rb, line 62
def verify_ssl
  return ssl_opts[:verify] if ssl_opts.key? :verify
  api_options[:verify_ssl].nil? ? true : api_options[:verify_ssl]
end