Class: Vra::CatalogRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/vra/catalog_request.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_idObject (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_itemObject (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

#clientObject (readonly)

Returns the value of attribute client.



30
31
32
# File 'lib/vra/catalog_request.rb', line 30

def client
  @client
end

#cpusObject

Returns the value of attribute cpus.



32
33
34
# File 'lib/vra/catalog_request.rb', line 32

def cpus
  @cpus
end

#custom_fieldsObject (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_daysObject

Returns the value of attribute lease_days.



32
33
34
# File 'lib/vra/catalog_request.rb', line 32

def lease_days
  @lease_days
end

#memoryObject

Returns the value of attribute memory.



32
33
34
# File 'lib/vra/catalog_request.rb', line 32

def memory
  @memory
end

#notesObject

Returns the value of attribute notes.



32
33
34
# File 'lib/vra/catalog_request.rb', line 32

def notes
  @notes
end

#requested_forObject

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_sizeObject

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_idObject



85
86
87
# File 'lib/vra/catalog_request.rb', line 85

def subtenant_id
  @subtenant_id || catalog_item.subtenant_id
end

#template_payloadString

Returns - the current catalog template payload from VRA or custom payload set in JSON format.

Returns:

  • (String)
    • 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.

Parameters:

  • payload_file (String)
    • A json payload that represents the catalog template you want to merge with this request

  • client (Vra::Client)
    • a vra client object

Returns:



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.

Parameters:

  • - (String)

    A json payload that represents the catalog template you want to merge with this request

Returns:

  • (String)
    • 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_payloadString

Returns - the current catalog template payload merged with the settings applied from this request.

Returns:

  • (String)
    • 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

#parametersObject



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

#submitVra::Request

Returns - submits and returns the request, validating before hand.

Returns:

  • (Vra::Request)
    • 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

Raises:

  • (ArgumentError)


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