class Vra::CatalogRequest

Attributes

catalog_id[R]
catalog_item[R]
client[R]
cpus[RW]
custom_fields[R]
lease_days[RW]
memory[RW]
notes[RW]
requested_for[RW]
shirt_size[RW]
subtenant_id[W]
template_payload[W]

Public Class Methods

new(client, catalog_id, opts = {}) click to toggle source
# File lib/vra/catalog_request.rb, line 34
def initialize(client, catalog_id, opts = {})
  @client            = client
  @catalog_id        = catalog_id
  @cpus              = opts[:cpus]
  @memory            = opts[:memory]
  @shirt_size        = opts[:shirt_size]
  @requested_for     = opts[:requested_for]
  @lease_days        = opts[:lease_days]
  @notes             = opts[:notes]
  @subtenant_id      = opts[:subtenant_id]
  @additional_params = opts[:additional_params] || Vra::RequestParameters.new
  @catalog_item = Vra::CatalogItem.new(client, id: catalog_id)
end
request_from_payload(client, payload_file) click to toggle source

@param payload_file [String] - A json payload that represents the catalog template you want to merge with this request @param client [Vra::Client] - a vra client object @return [Vra::CatalogRequest] - a request with the given payload merged

# File lib/vra/catalog_request.rb, line 51
def self.request_from_payload(client, payload_file)
  hash_payload = JSON.parse(File.read(payload_file))
  catalog_id = hash_payload["catalogItemId"]
  blueprint_name = hash_payload["data"].select { |_k, v| v.is_a?(Hash) }.keys.first
  blueprint_data = hash_payload["data"][blueprint_name]
  opts = {}
  opts[:cpus] = blueprint_data["data"]["cpu"]
  opts[:memory] = blueprint_data["data"]["memory"]
  opts[:shirt_size] = blueprint_data["data"]["size"]
  opts[:requested_for] = hash_payload["requestedFor"]
  opts[:lease_days] = blueprint_data.fetch("leaseDays", nil) || hash_payload["data"].fetch("_lease_days", 1)
  opts[:description] = hash_payload["description"]
  opts[:subtenant_id] = hash_payload["businessGroupId"]
  cr = Vra::CatalogRequest.new(client, catalog_id, opts)
  cr.template_payload = File.read(payload_file)
  cr
end

Public Instance Methods

delete_parameter(key) click to toggle source
# File lib/vra/catalog_request.rb, line 77
def delete_parameter(key)
  @additional_params.delete(key)
end
merge_payload(payload) click to toggle source

@return [String] - the current catalog template payload merged with the settings applied from this request @param [String] - A json payload that represents the catalog template you want to merge with this request

# File lib/vra/catalog_request.rb, line 100
def merge_payload(payload)
  hash_payload = JSON.parse(payload)
  blueprint_name = hash_payload["data"].select { |_k, v| v.is_a?(Hash) }.keys.first
  hash_payload["data"][blueprint_name]["data"]["cpu"] = @cpus
  hash_payload["data"][blueprint_name]["data"]["memory"] = @memory
  hash_payload["data"][blueprint_name]["data"]["size"] = @shirt_size
  hash_payload["requestedFor"] = @requested_for
  hash_payload["data"]["_leaseDays"] = @lease_days
  hash_payload["description"] = @notes
  hash_payload["data"] = hash_payload["data"].deep_merge(parameters["data"]) unless parameters.empty?
  hash_payload.to_json
end
merged_payload() click to toggle source

@return [String] - the current catalog template payload merged with the settings applied from this request

# File lib/vra/catalog_request.rb, line 114
def merged_payload
  merge_payload(template_payload)
end
parameters() click to toggle source
# File lib/vra/catalog_request.rb, line 81
def parameters
  @additional_params.to_vra
end
set_parameter(key, type, value) click to toggle source
# File lib/vra/catalog_request.rb, line 69
def set_parameter(key, type, value)
  @additional_params.set(key, type, value)
end
set_parameters(key, value_data) click to toggle source
# File lib/vra/catalog_request.rb, line 73
def set_parameters(key, value_data)
  @additional_params.set_parameters(key, value_data)
end
submit() click to toggle source

@return [Vra::Request] - submits and returns the request, validating before hand

# File lib/vra/catalog_request.rb, line 124
def submit
  validate_params!
  begin
    post_response = client.http_post("/catalog-service/api/consumer/entitledCatalogItems/#{@catalog_id}/requests", merged_payload)
  rescue Vra::Exception::HTTPError => e
    raise Vra::Exception::RequestError, "Unable to submit request: #{e.errors.join(", ")}"
  rescue
    raise
  end
  request_id = JSON.parse(post_response.body)["id"]
  Vra::Request.new(client, request_id)
end
subtenant_id() click to toggle source
# File lib/vra/catalog_request.rb, line 85
def subtenant_id
  @subtenant_id || catalog_item.subtenant_id
end
template_payload() click to toggle source

@return [String] - the current catalog template payload from VRA or custom payload set in JSON format

# File lib/vra/catalog_request.rb, line 119
def template_payload
  @template_payload ||= Vra::CatalogItem.dump_template(client, @catalog_id)
end
validate_params!() click to toggle source
# File lib/vra/catalog_request.rb, line 89
def validate_params!
  missing_params = []
  %i{catalog_id cpus memory requested_for subtenant_id }.each do |param|
    missing_params << param.to_s if send(param).nil?
  end

  raise ArgumentError, "Unable to submit request, required param(s) missing => #{missing_params.join(", ")}" unless missing_params.empty?
end