class HashiCorp::VagrantVMwareDesktop::Helper::VagrantUtility
This is a class for dealing the vagrant vmware utility API
Attributes
connection[R]
@return [Net::HTTP]
headers[R]
@return [Hash]
logger[R]
@return [Log4r::Logger]
Public Class Methods
new(host, port, **opts)
click to toggle source
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 60 def initialize(host, port, **opts) @logger = Log4r::Logger.new("hashicorp::provider::vmware::vagrant_utility") @logger.debug("initialize HOST=#{host} PORT=#{port}") @connection = Net::HTTP.new(host, port) @connection.use_ssl = true @connection.verify_mode = OpenSSL::SSL::VERIFY_PEER @connection.ca_file = File.join(opts[:certificate_path], "vagrant-utility.crt") @headers = { "Content-Type" => "application/vnd.hashicorp.vagrant.vmware.rest-v1+json", "Origin" => "https://#{host}:#{port}", "User-Agent" => Vagrant::Util::Downloader::USER_AGENT + " - VagrantVMWareDesktop/#{VagrantVMwareDesktop::VERSION}", "X-Requested-With" => "Vagrant", } cert_path = File.join(opts[:certificate_path], "vagrant-utility.client.crt") key_path = File.join(opts[:certificate_path], "vagrant-utility.client.key") begin @connection.cert = OpenSSL::X509::Certificate.new(File.read(cert_path)) rescue => err @logger.debug("certificate load failure - #{err.class}: #{err}") raise Errors::DriverAPICertificateError.new( path: cert_path, message: err.message ) end begin @connection.key = OpenSSL::PKey::RSA.new(File.read(key_path)) rescue => err @logger.debug("key load failure - #{err.class}: #{err}") raise Errors::DriverAPIKeyError.new( path: key_path, message: err.message ) end end
Public Instance Methods
delete(path, payload=nil)
click to toggle source
Perform DELETE
@param [String] path @param [Object] payload @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 127 def delete(path, payload=nil) perform_request(:delete, path, payload) end
get(path)
click to toggle source
Perform GET
@param [String] path @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 100 def get(path) perform_request(:get, path) end
perform_request(method, path, data=nil, rheaders={})
click to toggle source
Perform the remote request and process the result
@param [String,Symbol] method HTTP method @param [String] path remote path @param [Object] data request body @param [Hash] rheaders custom request headers @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 138 def perform_request(method, path, data=nil, rheaders={}) req_headers = headers.merge(rheaders) if data && !data.is_a?(String) data = JSON.generate(data) end method = method.to_s.upcase response = process_response do connection.send_request(method, path, data, req_headers) end if !response.success? error = "ERROR=#{response.get(:content, :message)}" end @logger.debug("request METHOD=#{method} PATH=#{path} RESPONSE=#{response.get(:code)} #{error}") response end
post(path, payload=nil)
click to toggle source
Perform POST
@param [String] path @param [Object] payload @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 118 def post(path, payload=nil) perform_request(:post, path, payload) end
process_response() { || ... }
click to toggle source
Wraps response into Response
instance
@yieldblock [Net::HTTPResponse] @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 158 def process_response begin response = yield result = { code: response.code.to_i, success: response.code.start_with?('2') } if response.class.body_permitted? body = response.body begin result[:content] = JSON.parse(body, :symbolize_names => true) rescue result[:content] = body end else result[:content] = nil end Response.new(result) rescue Net::HTTPServiceUnavailable raise Errors::DriverAPIConnectionFailed rescue => err raise Errors::DriverAPIRequestUnexpectedError, error: err end end
put(path, payload=nil)
click to toggle source
Perform PUT
@param [String] path @param [Object] payload @return [Response]
# File lib/vagrant-vmware-desktop/helper/vagrant_utility.rb, line 109 def put(path, payload=nil) perform_request(:put, path, payload) end