class Service::Client
Interface to OneFlow REST API through a Ruby client
Public Class Methods
new(opts = {})
click to toggle source
The options are read from ENV and FS if not passed
@param [Hash] opts Required configuration to interact with OneFlow @option opts [String] :url Endpoint where OneFlow is running. Defaults to ‘localhost:2474’ @option opts [String] :username OpenNebula
user @option opts [String] :password OpenNebula
user password @option opts [String] :user_agent Defaults to Ruby. Oneflow will behave accordingly.
# File lib/opennebula/oneflow_client.rb, line 342 def initialize(opts = {}) endpoint = '/.one/oneflow_endpoint' @username = opts[:username] || ENV['ONEFLOW_USER'] @password = opts[:password] || ENV['ONEFLOW_PASSWORD'] if opts[:url] url = opts[:url] elsif ENV['ONEFLOW_URL'] url = ENV['ONEFLOW_URL'] elsif ENV['HOME'] && File.exist?(ENV['HOME'] + endpoint) url = File.read(ENV['HOME'] + endpoint).strip elsif File.exist?('/var/lib/one/.one/oneflow_endpoint') url = File.read('/var/lib/one/.one/oneflow_endpoint').strip else url = 'http://localhost:2474' end if @username.nil? && @password.nil? if ENV['ONE_AUTH'] and !ENV['ONE_AUTH'].empty? and File.file?(ENV['ONE_AUTH']) one_auth = File.read(ENV['ONE_AUTH']) elsif ENV['HOME'] and File.file?(ENV['HOME']+'/.one/one_auth') one_auth = File.read(ENV['HOME']+'/.one/one_auth') elsif File.file?('/var/lib/one/.one/one_auth') one_auth = File.read('/var/lib/one/.one/one_auth') else raise 'ONE_AUTH file not present' end one_auth = one_auth.rstrip @username, @password = one_auth.split(':') end @uri = URI.parse(url) @user_agent = "OpenNebula #{CloudClient::VERSION} " << "(#{opts[:user_agent]||'Ruby'})" @host = nil @port = nil return unless ENV['http_proxy'] uri_proxy = URI.parse(ENV['http_proxy']) flag = false # Check if we need to bypass the proxy if ENV['no_proxy'] ENV['no_proxy'].split(',').each do |item| item = item.strip if (IPAddress @uri.host rescue nil).nil? if (IPAddress(item) rescue nil).nil? flag |= (item == @uri.host) end else unless (IPAddress item rescue nil).nil? flag |= IPAddress(item).include? IPAddress(@uri.host) end end end end return if flag @host = uri_proxy.host @port = uri_proxy.port end
Public Instance Methods
delete(path, body = nil)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 421 def delete(path, body = nil) req = Net::HTTP::Proxy(@host, @port)::Delete.new(path) req.body = body if body do_request(req) end
get(path)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 415 def get(path) req = Net::HTTP::Proxy(@host, @port)::Get.new(path) do_request(req) end
login()
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 445 def login req = Net::HTTP::Proxy(@host, @port)::Post.new('/login') do_request(req) end
logout()
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 451 def logout req = Net::HTTP::Proxy(@host, @port)::Post.new('/logout') do_request(req) end
post(path, body)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 428 def post(path, body) req = Net::HTTP::Proxy(@host, @port)::Post.new(path) req.body = body if path.start_with?('/service_template') && !@content_type.nil? req.content_type = @content_type end do_request(req) end
put(path, body)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 438 def put(path, body) req = Net::HTTP::Proxy(@host, @port)::Put.new(path) req.body = body do_request(req) end
set_content_type(content_type)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 411 def set_content_type(content_type) @content_type = content_type end
Private Instance Methods
do_request(req)
click to toggle source
# File lib/opennebula/oneflow_client.rb, line 459 def do_request(req) req.basic_auth @username, @password req['User-Agent'] = @user_agent if !@uri.path.nil? req.instance_variable_set(:@path, @uri.path + req.path) end CloudClient.http_start(@uri, @timeout) do |http| http.request(req) end end