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.



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

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.



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

def catalog_id
  @catalog_id
end

#catalog_itemObject (readonly)

Returns the value of attribute catalog_item.



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

def catalog_item
  @catalog_item
end

#clientObject (readonly)

Returns the value of attribute client.



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

def client
  @client
end

#cpusObject

Returns the value of attribute cpus.



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

def cpus
  @cpus
end

#custom_fieldsObject (readonly)

Returns the value of attribute custom_fields.



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

def custom_fields
  @custom_fields
end

#lease_daysObject

Returns the value of attribute lease_days.



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

def lease_days
  @lease_days
end

#memoryObject

Returns the value of attribute memory.



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

def memory
  @memory
end

#notesObject

Returns the value of attribute notes.



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

def notes
  @notes
end

#requested_forObject

Returns the value of attribute requested_for.



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

def requested_for
  @requested_for
end

#subtenant_idObject



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

def subtenant_id
  @subtenant_id || catalog_item.subtenant_id
end

Instance Method Details

#delete_parameter(key) ⇒ Object



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

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

#parametersObject



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

def parameters
  @additional_params.all_entries
end

#request_payloadObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/vra/catalog_request.rb', line 64

def request_payload
  payload = {
    '@type' => 'CatalogItemRequest',
    'catalogItemRef' => {
      'id' => @catalog_id
    },
    'organization' => {
      'tenantRef'    => catalog_item.tenant_id,
      'subtenantRef' => subtenant_id
    },
    'requestedFor' => @requested_for,
    'state' => 'SUBMITTED',
    'requestNumber' => 0,
    'requestData' => {
      'entries' => [
        Vra::RequestParameter.new('provider-blueprintId', 'string', catalog_item.blueprint_id).to_h,
        Vra::RequestParameter.new('provider-provisioningGroupId', 'string', subtenant_id).to_h,
        Vra::RequestParameter.new('requestedFor', 'string', @requested_for).to_h,
        Vra::RequestParameter.new('provider-VirtualMachine.CPU.Count', 'integer', @cpus).to_h,
        Vra::RequestParameter.new('provider-VirtualMachine.Memory.Size', 'integer', @memory).to_h,
        Vra::RequestParameter.new('provider-VirtualMachine.LeaseDays', 'integer', @lease_days).to_h,
        Vra::RequestParameter.new('provider-__Notes', 'string', @notes).to_h
      ]
    }
  }

  parameters.each do |entry|
    payload['requestData']['entries'] << entry.to_h
  end

  payload
end

#set_parameter(key, type, value) ⇒ Object



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

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

#submitObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/vra/catalog_request.rb', line 97

def submit
  validate_params!

  begin
    response = client.http_post('/catalog-service/api/consumer/requests', request_payload.to_json)
  rescue Vra::Exception::HTTPError => e
    raise Vra::Exception::RequestError, "Unable to submit request: #{e.errors.join(', ')}"
  rescue
    raise
  end

  request_id = response.headers[:location].split('/')[-1]
  Vra::Request.new(client, request_id)
end

#validate_params!Object

Raises:

  • (ArgumentError)


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

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