Class: Vra::Resource
- Inherits:
-
Object
- Object
- Vra::Resource
- Defined in:
- lib/vra/resource.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#resource_data ⇒ Object
readonly
Returns the value of attribute resource_data.
Class Method Summary collapse
Instance Method Summary collapse
- #action_id_by_name(name) ⇒ Object
- #action_request_payload(action_id) ⇒ Object
- #actions ⇒ Object
- #catalog_id ⇒ Object
- #catalog_item ⇒ Object
- #catalog_name ⇒ Object
- #description ⇒ Object
- #destroy ⇒ Object
- #fetch_resource_data ⇒ Object (also: #refresh)
-
#initialize(client, opts) ⇒ Resource
constructor
A new instance of Resource.
- #ip_addresses ⇒ Object
- #machine_in_provisioned_state? ⇒ Boolean
- #machine_off? ⇒ Boolean
- #machine_on? ⇒ Boolean
- #machine_status ⇒ Object
- #machine_turning_off? ⇒ Boolean
- #machine_turning_on? ⇒ Boolean
- #name ⇒ Object
- #network_interfaces ⇒ Object
- #organization ⇒ Object
- #owner_ids ⇒ Object
- #owner_names ⇒ Object
- #poweroff ⇒ Object
- #poweron ⇒ Object
- #shutdown ⇒ Object
- #status ⇒ Object
- #submit_action_request(action_id) ⇒ Object
- #subtenant_id ⇒ Object
- #subtenant_name ⇒ Object
- #tenant_id ⇒ Object
- #tenant_name ⇒ Object
- #vm? ⇒ Boolean
Constructor Details
#initialize(client, opts) ⇒ Resource
Returns a new instance of Resource.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/vra/resource.rb', line 26 def initialize(client, opts) @client = client @id = opts[:id] @resource_data = opts[:data] @resource_actions = [] if @id.nil? && @resource_data.nil? raise ArgumentError, "must supply an id or a resource data hash" end if !@id.nil? && !@resource_data.nil? raise ArgumentError, "must supply an id OR a resource data hash, not both" end if @resource_data.nil? fetch_resource_data else @id = @resource_data["id"] end end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
24 25 26 |
# File 'lib/vra/resource.rb', line 24 def client @client end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
24 25 26 |
# File 'lib/vra/resource.rb', line 24 def id @id end |
#resource_data ⇒ Object (readonly)
Returns the value of attribute resource_data.
24 25 26 |
# File 'lib/vra/resource.rb', line 24 def resource_data @resource_data end |
Class Method Details
.by_name(client, name) ⇒ Object
50 51 52 53 54 |
# File 'lib/vra/resource.rb', line 50 def self.by_name(client, name) raise ArgumentError.new("name cannot be nil") if name.nil? raise ArgumentError.new("client cannot be nil") if client.nil? Resources.all(client).find { |r| r.name.downcase =~ /#{name.downcase}/ } end |
Instance Method Details
#action_id_by_name(name) ⇒ Object
204 205 206 207 208 209 210 211 |
# File 'lib/vra/resource.rb', line 204 def action_id_by_name(name) return if actions.nil? action = actions.find { |x| x["name"] == name } return if action.nil? action["id"] end |
#action_request_payload(action_id) ⇒ Object
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/vra/resource.rb', line 241 def action_request_payload(action_id) { "@type" => "ResourceActionRequest", "resourceRef" => { "id" => @id, }, "resourceActionRef" => { "id" => action_id, }, "organization" => { "tenantRef" => tenant_id, "tenantLabel" => tenant_name, "subtenantRef" => subtenant_id, "subtenantLabel" => subtenant_name, }, "state" => "SUBMITTED", "requestNumber" => 0, "requestData" => { "entries" => [], }, } end |
#actions ⇒ Object
196 197 198 199 200 201 202 |
# File 'lib/vra/resource.rb', line 196 def actions # if this Resource instance was created with data from a "all_resources" fetch, # it is likely missing operations data because the vRA API is not pleasant sometimes. fetch_resource_data if resource_data["operations"].nil? resource_data["operations"] end |
#catalog_id ⇒ Object
107 108 109 |
# File 'lib/vra/resource.rb', line 107 def catalog_id catalog_item["id"] end |
#catalog_item ⇒ Object
101 102 103 104 105 |
# File 'lib/vra/resource.rb', line 101 def catalog_item return {} if resource_data["catalogItem"].nil? resource_data["catalogItem"] end |
#catalog_name ⇒ Object
111 112 113 |
# File 'lib/vra/resource.rb', line 111 def catalog_name catalog_item["label"] end |
#description ⇒ Object
67 68 69 |
# File 'lib/vra/resource.rb', line 67 def description resource_data["description"] end |
#destroy ⇒ Object
213 214 215 216 217 218 |
# File 'lib/vra/resource.rb', line 213 def destroy action_id = action_id_by_name("Destroy") raise Vra::Exception::NotFound, "No destroy action found for resource #{@id}" if action_id.nil? submit_action_request(action_id) end |
#fetch_resource_data ⇒ Object Also known as: refresh
56 57 58 59 60 |
# File 'lib/vra/resource.rb', line 56 def fetch_resource_data @resource_data = client.get_parsed("/catalog-service/api/consumer/resources/#{@id}") rescue Vra::Exception::HTTPNotFound raise Vra::Exception::NotFound, "resource ID #{@id} does not exist" end |
#ip_addresses ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/vra/resource.rb', line 168 def ip_addresses return if !vm? || network_interfaces.nil? addrs = [] request_id = @resource_data["requestId"] print "Waiting For vRA to collect the IP" loop do resource_views = @client.http_get("/catalog-service/api/consumer/requests/#{request_id}/resourceViews") JSON.parse(resource_views.body)["content"].each do |content| if content.key?("data") && !(content["data"]["ip_address"].nil? || content["data"]["ip_address"] == "") addrs << content["data"]["ip_address"] end end break unless addrs.empty? sleep 10 end addrs end |
#machine_in_provisioned_state? ⇒ Boolean
146 147 148 |
# File 'lib/vra/resource.rb', line 146 def machine_in_provisioned_state? machine_status == "MachineProvisioned" end |
#machine_off? ⇒ Boolean
134 135 136 |
# File 'lib/vra/resource.rb', line 134 def machine_off? machine_status == "Off" end |
#machine_on? ⇒ Boolean
130 131 132 |
# File 'lib/vra/resource.rb', line 130 def machine_on? machine_status == "On" end |
#machine_status ⇒ Object
123 124 125 126 127 128 |
# File 'lib/vra/resource.rb', line 123 def machine_status status = resource_data["resourceData"]["entries"].find { |x| x["key"] == "MachineStatus" } raise "No MachineStatus entry available for resource" if status.nil? status["value"]["value"] end |
#machine_turning_off? ⇒ Boolean
142 143 144 |
# File 'lib/vra/resource.rb', line 142 def machine_turning_off? %w{TurningOff ShuttingDown}.include?(machine_status) end |
#machine_turning_on? ⇒ Boolean
138 139 140 |
# File 'lib/vra/resource.rb', line 138 def machine_turning_on? machine_status == "TurningOn" || machine_status == "MachineActivated" end |
#name ⇒ Object
63 64 65 |
# File 'lib/vra/resource.rb', line 63 def name resource_data["name"] end |
#network_interfaces ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/vra/resource.rb', line 150 def network_interfaces return unless vm? network_list = resource_data["resourceData"]["entries"].find { |x| x["key"] == "NETWORK_LIST" } return if network_list.nil? network_list["value"]["items"].each_with_object([]) do |item, nics| nic = {} item["values"]["entries"].each do |entry| key = entry["key"] value = entry["value"]["value"] nic[key] = value end nics << nic end end |
#organization ⇒ Object
79 80 81 82 83 |
# File 'lib/vra/resource.rb', line 79 def organization return {} if resource_data["organization"].nil? resource_data["organization"] end |
#owner_ids ⇒ Object
115 116 117 |
# File 'lib/vra/resource.rb', line 115 def owner_ids resource_data["owners"].map { |x| x["ref"] } end |
#owner_names ⇒ Object
119 120 121 |
# File 'lib/vra/resource.rb', line 119 def owner_names resource_data["owners"].map { |x| x["value"] } end |
#poweroff ⇒ Object
227 228 229 230 231 232 |
# File 'lib/vra/resource.rb', line 227 def poweroff action_id = action_id_by_name("Power Off") raise Vra::Exception::NotFound, "No power-off action found for resource #{@id}" if action_id.nil? submit_action_request(action_id) end |
#poweron ⇒ Object
234 235 236 237 238 239 |
# File 'lib/vra/resource.rb', line 234 def poweron action_id = action_id_by_name("Power On") raise Vra::Exception::NotFound, "No power-on action found for resource #{@id}" if action_id.nil? submit_action_request(action_id) end |
#shutdown ⇒ Object
220 221 222 223 224 225 |
# File 'lib/vra/resource.rb', line 220 def shutdown action_id = action_id_by_name("Shutdown") raise Vra::Exception::NotFound, "No shutdown action found for resource #{@id}" if action_id.nil? submit_action_request(action_id) end |
#status ⇒ Object
71 72 73 |
# File 'lib/vra/resource.rb', line 71 def status resource_data["status"] end |
#submit_action_request(action_id) ⇒ Object
264 265 266 267 268 269 |
# File 'lib/vra/resource.rb', line 264 def submit_action_request(action_id) payload = action_request_payload(action_id).to_json response = client.http_post("/catalog-service/api/consumer/requests", payload) request_id = response.location.split("/")[-1] Vra::Request.new(client, request_id) end |
#subtenant_id ⇒ Object
93 94 95 |
# File 'lib/vra/resource.rb', line 93 def subtenant_id organization["subtenantRef"] end |
#subtenant_name ⇒ Object
97 98 99 |
# File 'lib/vra/resource.rb', line 97 def subtenant_name organization["subtenantLabel"] end |
#tenant_id ⇒ Object
85 86 87 |
# File 'lib/vra/resource.rb', line 85 def tenant_id organization["tenantRef"] end |
#tenant_name ⇒ Object
89 90 91 |
# File 'lib/vra/resource.rb', line 89 def tenant_name organization["tenantLabel"] end |
#vm? ⇒ Boolean
75 76 77 |
# File 'lib/vra/resource.rb', line 75 def vm? %w{Infrastructure.Virtual Infrastructure.Cloud}.include?(resource_data["resourceTypeRef"]["id"]) end |