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