Class: Collins::Asset
- Inherits:
-
Object
- Object
- Collins::Asset
- Defined in:
- lib/collins/asset.rb,
lib/collins/asset_find.rb,
lib/collins/asset_update.rb
Overview
Represents the basic notion of a collins asset
Defined Under Namespace
Constant Summary collapse
- DATETIME_FORMAT =
Default time format when displaying dates associated with an asset
"%F %T"
Constants included from Util::Logging
Util::Logging::DEFAULT_LOG_FORMAT
Constants included from Update
Update::ALL_PARAMS, Update::FILE_PARAMS, Update::NON_ATTRIBUTE_PARAMS
Constants included from Find
Find::ALL_PARAMS, Find::DATE_PARAMS, Find::GENERAL_PARAMS
Instance Attribute Summary collapse
-
#addresses ⇒ Array<CollinsAddress>
readonly
Addresses associated with asset.
-
#created ⇒ DateTime, NilClass
readonly
Timestamp.
-
#deleted ⇒ DateTime, NilClass
readonly
Timestamp.
-
#extras ⇒ Hash
readonly
All additional asset metadata.
-
#id ⇒ Fixnum
readonly
Asset ID or 0.
-
#ipmi ⇒ Collins::Ipmi
readonly
IPMI information.
-
#location ⇒ String
readonly
Multi-collins location.
-
#power ⇒ Collins::Power
readonly
Power configuration information.
-
#state ⇒ Collins::AssetState
readonly
Asset state, or nil.
-
#status ⇒ String
readonly
Asset status, or empty string.
-
#tag ⇒ String
readonly
Asset tag, or empty string.
-
#type ⇒ String
readonly
Asset type, or empty string.
-
#updated ⇒ DateTime, NilClass
readonly
Timestamp.
Class Method Summary collapse
-
.format_date_string(s) ⇒ DateTime
Convenience method for parsing asset ISO8601 date times.
-
.from_json(json_hash, bare_asset = false) ⇒ Collins::Asset
Given a Hash deserialized from JSON, convert to an Asset.
Instance Method Summary collapse
-
#backend_address ⇒ Collins::Address, NilClass
First available backend address.
-
#backend_address? ⇒ Boolean
True if asset has a backend address.
-
#backend_addresses ⇒ Array<Collins::Address>
Array of backend addresses.
-
#backend_ip_address ⇒ String, NilClass
deprecated
Deprecated.
Users are encouraged to use #backend_address
-
#backend_ip_addresses ⇒ Array<String>
deprecated
Deprecated.
Users are encouraged to uses #backend_addresses
-
#backend_netmask ⇒ String, NilClass
Netmask of first available backend address.
-
#backend_netmasks ⇒ Array<String>
Array of backend netmasks.
-
#cpu_count ⇒ Fixnum
Number of CPU’s found.
-
#cpus ⇒ Array<Hash>
CPU information.
-
#disks ⇒ Array<Hash>
Disk information.
-
#gateway_address(pool = "default") ⇒ String
Return the gateway address for the specified pool, or the first gateway used, which may not be desired.
-
#get_attribute(name) ⇒ Object, NilClass
See #method_missing.
-
#gpu_count ⇒ Fixnum
Number of GPU’s found.
-
#gpus ⇒ Array<Hash>
GPU information.
-
#initialize(opts = {}) ⇒ Asset
constructor
Create an Asset.
-
#mac_addresses ⇒ Array<String>
MAC addresses associated with assets.
-
#memory ⇒ Array<Hash>
Memory information.
-
#nics ⇒ Array<Hash>
NIC information.
-
#physical_nic_count ⇒ Fixnum
Number of physical interfaces.
-
#public_address ⇒ Collins::Address, NilClass
First available public address.
-
#public_address? ⇒ Boolean
True if asset has a public address.
-
#public_addresses ⇒ Array<Collins::Address>
Array of public addresses.
-
#public_ip_address ⇒ String, NilClass
deprecated
Deprecated.
Users are encouraged to use #public_address
-
#public_ip_addresses ⇒ Array<String>
deprecated
Deprecated.
Users are encouraged to uses #public_addresses
- #respond_to?(name, include_all = false) ⇒ Boolean
-
#to_s ⇒ String
Human readable asset with no meta attributes.
Methods included from Util
#deep_copy_hash, #get_asset_or_tag, included, #require_non_empty, #require_that, #stringify_hash, #symbolize_hash
Methods included from Util::Logging
Methods included from Update
get_param, get_param_value, is_attribute?, is_file_param?, to_a
Methods included from Find
Constructor Details
#initialize(opts = {}) ⇒ Asset
Create an Asset
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/collins/asset.rb', line 87 def initialize opts = {} @extras = {} @addresses = [] if opts.is_a?(String) then model = {:tag => opts} else model = opts end hash = symbolize_hash(model).inject({}) do |result, (k,v)| result[k.downcase] = v result end @created = parse_datetime hash.delete(:created).to_s @id = hash.delete(:id).to_s.to_i @status = hash.delete(:status).to_s @tag = hash.delete(:tag).to_s @type = hash.delete(:type).to_s @state = Collins::AssetState.from_json(hash.delete(:state)) @updated = parse_datetime hash.delete(:updated).to_s @deleted = parse_datetime hash.delete(:deleted).to_s hash.each {|k,v| @extras[k] = v} end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ NilClass, Object (protected)
This is never called directly
Convenience method for #get_attribute
This ‘magic’ method allows you to retrieve attributes on an asset, or check if an attribute exists via a predicate method.
260 261 262 263 264 265 266 267 268 269 |
# File 'lib/collins/asset.rb', line 260 def method_missing(m, *args, &block) name = m.to_s.upcase is_bool = name.end_with?('?') if is_bool then name = name.sub('?', '') respond_to?(name) else extract(extras, "ATTRIBS", "0", name) end end |
Instance Attribute Details
#addresses ⇒ Array<CollinsAddress>
Returns Addresses associated with asset.
24 25 26 |
# File 'lib/collins/asset.rb', line 24 def addresses @addresses end |
#created ⇒ DateTime, NilClass
Returns Timestamp. Can be nil.
26 27 28 |
# File 'lib/collins/asset.rb', line 26 def created @created end |
#deleted ⇒ DateTime, NilClass (readonly)
Returns Timestamp. Can be nil.
26 27 28 |
# File 'lib/collins/asset.rb', line 26 def deleted @deleted end |
#extras ⇒ Hash
Returns All additional asset metadata.
44 45 46 |
# File 'lib/collins/asset.rb', line 44 def extras @extras end |
#id ⇒ Fixnum
Returns Asset ID or 0.
28 29 30 |
# File 'lib/collins/asset.rb', line 28 def id @id end |
#ipmi ⇒ Collins::Ipmi
Returns IPMI information.
30 31 32 |
# File 'lib/collins/asset.rb', line 30 def ipmi @ipmi end |
#location ⇒ String
Returns multi-collins location.
32 33 34 |
# File 'lib/collins/asset.rb', line 32 def location @location end |
#power ⇒ Collins::Power
Returns Power configuration information.
34 35 36 |
# File 'lib/collins/asset.rb', line 34 def power @power end |
#state ⇒ Collins::AssetState
Returns Asset state, or nil.
36 37 38 |
# File 'lib/collins/asset.rb', line 36 def state @state end |
#status ⇒ String
Returns Asset status, or empty string.
38 39 40 |
# File 'lib/collins/asset.rb', line 38 def status @status end |
#tag ⇒ String
Returns Asset tag, or empty string.
40 41 42 |
# File 'lib/collins/asset.rb', line 40 def tag @tag end |
#type ⇒ String
Returns Asset type, or empty string.
42 43 44 |
# File 'lib/collins/asset.rb', line 42 def type @type end |
#updated ⇒ DateTime, NilClass
Returns Timestamp. Can be nil.
26 27 28 |
# File 'lib/collins/asset.rb', line 26 def updated @updated end |
Class Method Details
.format_date_string(s) ⇒ DateTime
Convenience method for parsing asset ISO8601 date times
72 73 74 75 |
# File 'lib/collins/asset.rb', line 72 def format_date_string s parsed = DateTime.parse(s) parsed.strftime("%FT%T") end |
.from_json(json_hash, bare_asset = false) ⇒ Collins::Asset
Given a Hash deserialized from JSON, convert to an Asset
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/collins/asset.rb', line 52 def from_json json_hash, = false (raise Collins::CollinsError.new("Invalid JSON specified for Asset.from_json")) if (json_hash.nil? || !json_hash.is_a?(Hash)) json = deep_copy_hash json_hash json = if json["data"] then json["data"] else json end if or !json.include?("ASSET") then asset = Collins::Asset.new json else asset = Collins::Asset.new json.delete("ASSET") end asset.send('ipmi='.to_sym, Collins::Ipmi.from_json(json.delete("IPMI"))) asset.send('addresses='.to_sym, Collins::Address.from_json(json.delete("ADDRESSES"))) asset.send('power='.to_sym, Collins::Power.from_json(json.delete("POWER"))) asset.send('location=', json.delete("LOCATION")) asset.send('extras=', json) asset end |
Instance Method Details
#backend_address ⇒ Collins::Address, NilClass
Returns First available backend address.
111 112 113 |
# File 'lib/collins/asset.rb', line 111 def backend_address backend_addresses.first if backend_address? end |
#backend_address? ⇒ Boolean
Returns True if asset has a backend address.
115 116 117 |
# File 'lib/collins/asset.rb', line 115 def backend_address? backend_addresses.length > 0 end |
#backend_addresses ⇒ Array<Collins::Address>
Returns Array of backend addresses.
119 120 121 |
# File 'lib/collins/asset.rb', line 119 def backend_addresses addresses.select{|a| a.is_private?} end |
#backend_ip_address ⇒ String, NilClass
Users are encouraged to use #backend_address
Returns Address of first available backend address.
125 126 127 |
# File 'lib/collins/asset.rb', line 125 def backend_ip_address backend_address.address if backend_address? end |
#backend_ip_addresses ⇒ Array<String>
Users are encouraged to uses #backend_addresses
Returns Backend IP addresses.
130 131 132 |
# File 'lib/collins/asset.rb', line 130 def backend_ip_addresses backend_addresses.map{|a| a.address} end |
#backend_netmask ⇒ String, NilClass
Returns Netmask of first available backend address.
159 160 161 |
# File 'lib/collins/asset.rb', line 159 def backend_netmask backend_address.netmask if backend_address? end |
#backend_netmasks ⇒ Array<String>
Returns Array of backend netmasks.
163 164 165 |
# File 'lib/collins/asset.rb', line 163 def backend_netmasks backend_addresses.map{|i| i.netmask} end |
#cpu_count ⇒ Fixnum
Returns Number of CPU’s found.
188 189 190 |
# File 'lib/collins/asset.rb', line 188 def cpu_count (extract(extras, "HARDWARE", "CPU") || []).length end |
#cpus ⇒ Array<Hash>
Returns CPU information.
192 193 194 |
# File 'lib/collins/asset.rb', line 192 def cpus extract(extras, "HARDWARE", "CPU") || [] end |
#disks ⇒ Array<Hash>
Returns Disk information.
206 207 208 |
# File 'lib/collins/asset.rb', line 206 def disks extract(extras, "HARDWARE", "DISK") || [] end |
#gateway_address(pool = "default") ⇒ String
If there is no address in the specified pool, the gateway of the first usable address is
Return the gateway address for the specified pool, or the first gateway used, which may not be desired.
172 173 174 175 176 177 178 179 180 |
# File 'lib/collins/asset.rb', line 172 def gateway_address pool = "default" address = addresses.select{|a| a.pool == pool}.map{|a| a.gateway}.first return address if address if addresses.length > 0 then addresses.first.gateway else nil end end |
#get_attribute(name) ⇒ Object, NilClass
Returns See #method_missing.
183 184 185 |
# File 'lib/collins/asset.rb', line 183 def get_attribute name extract(extras, "ATTRIBS", "0", name.to_s.upcase) end |
#gpu_count ⇒ Fixnum
Returns Number of GPU’s found.
197 198 199 |
# File 'lib/collins/asset.rb', line 197 def gpu_count (extract(extras, "HARDWARE", "GPU") || []).length end |
#gpus ⇒ Array<Hash>
Returns GPU information.
201 202 203 |
# File 'lib/collins/asset.rb', line 201 def gpus extract(extras, "HARDWARE", "GPU") || [] end |
#mac_addresses ⇒ Array<String>
Returns MAC addresses associated with assets.
223 224 225 |
# File 'lib/collins/asset.rb', line 223 def mac_addresses nics.map{|n| n["MAC_ADDRESS"]}.select{|a| !a.nil?} end |
#memory ⇒ Array<Hash>
Returns Memory information.
210 211 212 |
# File 'lib/collins/asset.rb', line 210 def memory extract(extras, "HARDWARE", "MEMORY") || [] end |
#nics ⇒ Array<Hash>
Returns NIC information.
215 216 217 |
# File 'lib/collins/asset.rb', line 215 def nics extract(extras, "HARDWARE", "NIC") || [] end |
#physical_nic_count ⇒ Fixnum
Returns Number of physical interfaces.
219 220 221 |
# File 'lib/collins/asset.rb', line 219 def physical_nic_count nics.length end |
#public_address ⇒ Collins::Address, NilClass
Returns First available public address.
135 136 137 |
# File 'lib/collins/asset.rb', line 135 def public_address public_addresses.first if public_address? end |
#public_address? ⇒ Boolean
Returns True if asset has a public address.
139 140 141 |
# File 'lib/collins/asset.rb', line 139 def public_address? public_addresses.length > 0 end |
#public_addresses ⇒ Array<Collins::Address>
Returns Array of public addresses.
143 144 145 |
# File 'lib/collins/asset.rb', line 143 def public_addresses addresses.select{|a| a.is_public?} end |
#public_ip_address ⇒ String, NilClass
Users are encouraged to use #public_address
Returns Address of first available public address.
149 150 151 |
# File 'lib/collins/asset.rb', line 149 def public_ip_address public_address.address if public_address? end |
#public_ip_addresses ⇒ Array<String>
Users are encouraged to uses #public_addresses
Returns Public IP addresses.
154 155 156 |
# File 'lib/collins/asset.rb', line 154 def public_ip_addresses public_addresses.map{|a| a.address} end |
#respond_to?(name, include_all = false) ⇒ Boolean
235 236 237 238 239 240 241 |
# File 'lib/collins/asset.rb', line 235 def respond_to? name, include_all=false if extract(extras, "ATTRIBS", "0", name.to_s.upcase).nil? then super else true end end |
#to_s ⇒ String
Returns Human readable asset with no meta attributes.
228 229 230 231 232 233 |
# File 'lib/collins/asset.rb', line 228 def to_s updated_t = format_datetime(updated, "Never") created_t = format_datetime(created, "Never") ipmi_i = ipmi.nil? ? "No IPMI Data" : ipmi.to_s "Asset(id = #{id}, tag = #{tag}, status = #{status}, type = #{type}, created = #{created_t}, updated = #{updated_t}, ipmi = #{ipmi_i}, state = #{state.to_s})" end |