Class: Vra::CatalogRequest
- Inherits:
-
Object
- Object
- Vra::CatalogRequest
- Defined in:
- lib/vra/catalog_request.rb
Instance Attribute Summary collapse
-
#catalog_id ⇒ Object
readonly
Returns the value of attribute catalog_id.
-
#catalog_item ⇒ Object
readonly
Returns the value of attribute catalog_item.
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#cpus ⇒ Object
Returns the value of attribute cpus.
-
#custom_fields ⇒ Object
readonly
Returns the value of attribute custom_fields.
-
#lease_days ⇒ Object
Returns the value of attribute lease_days.
-
#memory ⇒ Object
Returns the value of attribute memory.
-
#notes ⇒ Object
Returns the value of attribute notes.
-
#requested_for ⇒ Object
Returns the value of attribute requested_for.
-
#shirt_size ⇒ Object
Returns the value of attribute shirt_size.
- #subtenant_id ⇒ Object
-
#template_payload ⇒ String
-
the current catalog template payload from VRA or custom payload set in JSON format.
-
Class Method Summary collapse
-
.request_from_payload(client, payload_file) ⇒ Vra::CatalogRequest
-
a request with the given payload merged.
-
Instance Method Summary collapse
- #delete_parameter(key) ⇒ Object
-
#initialize(client, catalog_id, opts = {}) ⇒ CatalogRequest
constructor
A new instance of CatalogRequest.
-
#merge_payload(payload) ⇒ String
-
the current catalog template payload merged with the settings applied from this request.
-
-
#merged_payload ⇒ String
-
the current catalog template payload merged with the settings applied from this request.
-
- #parameters ⇒ Object
- #set_parameter(key, type, value) ⇒ Object
- #set_parameters(key, value_data) ⇒ Object
-
#submit ⇒ Vra::Request
-
submits and returns the request, validating before hand.
-
- #validate_params! ⇒ Object
Constructor Details
#initialize(client, catalog_id, opts = {}) ⇒ CatalogRequest
Returns a new instance of CatalogRequest.
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# 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 |
Instance Attribute Details
#catalog_id ⇒ Object (readonly)
Returns the value of attribute catalog_id.
30 31 32 |
# File 'lib/vra/catalog_request.rb', line 30 def catalog_id @catalog_id end |
#catalog_item ⇒ Object (readonly)
Returns the value of attribute catalog_item.
30 31 32 |
# File 'lib/vra/catalog_request.rb', line 30 def catalog_item @catalog_item end |
#client ⇒ Object (readonly)
Returns the value of attribute client.
30 31 32 |
# File 'lib/vra/catalog_request.rb', line 30 def client @client end |
#cpus ⇒ Object
Returns the value of attribute cpus.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def cpus @cpus end |
#custom_fields ⇒ Object (readonly)
Returns the value of attribute custom_fields.
30 31 32 |
# File 'lib/vra/catalog_request.rb', line 30 def custom_fields @custom_fields end |
#lease_days ⇒ Object
Returns the value of attribute lease_days.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def lease_days @lease_days end |
#memory ⇒ Object
Returns the value of attribute memory.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def memory @memory end |
#notes ⇒ Object
Returns the value of attribute notes.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def notes @notes end |
#requested_for ⇒ Object
Returns the value of attribute requested_for.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def requested_for @requested_for end |
#shirt_size ⇒ Object
Returns the value of attribute shirt_size.
32 33 34 |
# File 'lib/vra/catalog_request.rb', line 32 def shirt_size @shirt_size end |
#subtenant_id ⇒ Object
85 86 87 |
# File 'lib/vra/catalog_request.rb', line 85 def subtenant_id @subtenant_id || catalog_item.subtenant_id end |
#template_payload ⇒ String
Returns - the current catalog template payload from VRA or custom payload set in JSON format.
119 120 121 |
# File 'lib/vra/catalog_request.rb', line 119 def template_payload @template_payload ||= Vra::CatalogItem.dump_template(client, @catalog_id) end |
Class Method Details
.request_from_payload(client, payload_file) ⇒ Vra::CatalogRequest
Returns - a request with the given payload merged.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# 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 |
Instance Method Details
#delete_parameter(key) ⇒ Object
77 78 79 |
# File 'lib/vra/catalog_request.rb', line 77 def delete_parameter(key) @additional_params.delete(key) end |
#merge_payload(payload) ⇒ String
Returns - the current catalog template payload merged with the settings applied from this request.
100 101 102 103 104 105 106 107 108 109 110 111 |
# 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 ⇒ String
Returns - the current catalog template payload merged with the settings applied from this request.
114 115 116 |
# File 'lib/vra/catalog_request.rb', line 114 def merged_payload merge_payload(template_payload) end |
#parameters ⇒ Object
81 82 83 |
# File 'lib/vra/catalog_request.rb', line 81 def parameters @additional_params.to_vra end |
#set_parameter(key, type, value) ⇒ Object
69 70 71 |
# 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) ⇒ Object
73 74 75 |
# File 'lib/vra/catalog_request.rb', line 73 def set_parameters(key, value_data) @additional_params.set_parameters(key, value_data) end |
#submit ⇒ Vra::Request
Returns - submits and returns the request, validating before hand.
124 125 126 127 128 129 130 131 132 133 134 135 |
# 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 |
#validate_params! ⇒ Object
89 90 91 92 93 94 95 96 |
# 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 |