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