Class: Vra::CatalogRequest

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, catalog_id, opts = {}) ⇒ CatalogRequest

Returns a new instance of CatalogRequest.



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/vra/catalog_request.rb', line 26

def initialize(client, catalog_id, opts = {})
  @client            = client
  @catalog_id        = catalog_id
  @cpus              = opts[:cpus]
  @memory            = opts[:memory]
  @requested_for     = opts[:requested_for]
  @lease_days        = opts[:lease_days]
  @notes             = opts[:notes]
  @subtenant_id      = opts[:subtenant_id]
  @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.



22
23
24
# File 'lib/vra/catalog_request.rb', line 22

def catalog_id
  @catalog_id
end

#catalog_itemObject (readonly)

Returns the value of attribute catalog_item.



22
23
24
# File 'lib/vra/catalog_request.rb', line 22

def catalog_item
  @catalog_item
end

#clientObject (readonly)

Returns the value of attribute client.



22
23
24
# File 'lib/vra/catalog_request.rb', line 22

def client
  @client
end

#cpusObject

Returns the value of attribute cpus.



24
25
26
# File 'lib/vra/catalog_request.rb', line 24

def cpus
  @cpus
end

#custom_fieldsObject (readonly)

Returns the value of attribute custom_fields.



22
23
24
# File 'lib/vra/catalog_request.rb', line 22

def custom_fields
  @custom_fields
end

#lease_daysObject

Returns the value of attribute lease_days.



24
25
26
# File 'lib/vra/catalog_request.rb', line 24

def lease_days
  @lease_days
end

#memoryObject

Returns the value of attribute memory.



24
25
26
# File 'lib/vra/catalog_request.rb', line 24

def memory
  @memory
end

#notesObject

Returns the value of attribute notes.



24
25
26
# File 'lib/vra/catalog_request.rb', line 24

def notes
  @notes
end

#requested_forObject

Returns the value of attribute requested_for.



24
25
26
# File 'lib/vra/catalog_request.rb', line 24

def requested_for
  @requested_for
end

#subtenant_idObject



52
53
54
# File 'lib/vra/catalog_request.rb', line 52

def subtenant_id
  @subtenant_id || catalog_item.subtenant_id
end

Instance Method Details

#delete_parameter(key) ⇒ Object



44
45
46
# File 'lib/vra/catalog_request.rb', line 44

def delete_parameter(key)
  @additional_params.delete(key)
end

#merge_payload(payload) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/vra/catalog_request.rb', line 65

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["requestedFor"] = @requested_for
  hash_payload["data"]["_leaseDays"] = @lease_days
  hash_payload["description"] = @notes

  parameters.each do |param|
    hash_payload["data"][blueprint_name]["data"][param.key] = param.value
  end

  JSON.pretty_generate(hash_payload)
end

#parametersObject



48
49
50
# File 'lib/vra/catalog_request.rb', line 48

def parameters
  @additional_params.all_entries
end

#set_parameter(key, type, value) ⇒ Object



40
41
42
# File 'lib/vra/catalog_request.rb', line 40

def set_parameter(key, type, value)
  @additional_params.set(key, type, value)
end

#submitObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/vra/catalog_request.rb', line 82

def submit
  validate_params!

  begin
    response = client.http_get("/catalog-service/api/consumer/entitledCatalogItems/#{@catalog_id}/requests/template")
    post_response = client.http_post("/catalog-service/api/consumer/entitledCatalogItems/#{@catalog_id}/requests", merge_payload(response.body))
  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)


56
57
58
59
60
61
62
63
# File 'lib/vra/catalog_request.rb', line 56

def validate_params!
  missing_params = []
  [ :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