UCSAPI 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/UCSAPI.rb +77 -6
- metadata +4 -4
data/lib/UCSAPI.rb
CHANGED
@@ -48,7 +48,7 @@ require 'rexml/document'
|
|
48
48
|
require 'rest_client'
|
49
49
|
require 'logger'
|
50
50
|
require 'ostruct'
|
51
|
-
VERSION = '0.0.
|
51
|
+
VERSION = '0.0.7'
|
52
52
|
|
53
53
|
#At the moment this is one big class with lots of methods. Refactoring due later :)
|
54
54
|
class UCSM
|
@@ -161,7 +161,8 @@ VERSION = '0.0.6'
|
|
161
161
|
#* The caller will send a REXML object with the XMLAPI command in it
|
162
162
|
#* Send the XMLAPI call to UCS and catch any exceptions (log and quit if we do)
|
163
163
|
def dispatch(xml)
|
164
|
-
@log.info("
|
164
|
+
@log.info("dispatch starting")
|
165
|
+
@log.info("dispatch called with " + xml.to_s)
|
165
166
|
|
166
167
|
# The RestClient.post method expects text, not a REXML object
|
167
168
|
post = xml.to_s
|
@@ -220,6 +221,7 @@ VERSION = '0.0.6'
|
|
220
221
|
end
|
221
222
|
|
222
223
|
#Build an XMLAPI call to find an object(s) via the class name
|
224
|
+
#If you supply a :inFilter hash of property/value, we'll add a filter element
|
223
225
|
#Returns an *Array* of found objects
|
224
226
|
#* Build the XMLAPI call from the opts parameters
|
225
227
|
#* Send the XMLAPI object to dispatch, get an XML object back
|
@@ -235,7 +237,17 @@ VERSION = '0.0.6'
|
|
235
237
|
request = REXML::Document.new('<configResolveClass />')
|
236
238
|
request.root.add_attribute("inHierarchical",inHierarchical)
|
237
239
|
request.root.add_attribute("classId",opts[:classId])
|
238
|
-
|
240
|
+
if opts[:inFilter]
|
241
|
+
filterHash = opts[:inFilter]
|
242
|
+
filterType = filterHash["type"]
|
243
|
+
filterProperty = filterHash["property"]
|
244
|
+
filterValue = filterHash["value"]
|
245
|
+
inFilter = request.root.add_element("inFilter")
|
246
|
+
inFilter.add_element(filterType, { "class" => opts[:classId], "property" => filterProperty, "value" => filterValue})
|
247
|
+
end
|
248
|
+
|
249
|
+
puts request.to_s
|
250
|
+
|
239
251
|
response = dispatch(request)
|
240
252
|
|
241
253
|
outConfig = response.root.elements[1]
|
@@ -250,7 +262,7 @@ VERSION = '0.0.6'
|
|
250
262
|
|
251
263
|
@log.info "configResolveClass returning " + found.size.to_s + " objects"
|
252
264
|
else
|
253
|
-
@log.error "configResolveClass ERROR No items found for classId = " + opts[:classId]
|
265
|
+
@log.error "configResolveClass ERROR No items found for classId = " + opts[:classId] + " with filter: " + opts[:inFilter].to_s
|
254
266
|
end
|
255
267
|
else
|
256
268
|
@log.error "configResolveClass ERROR Please supply a :classId option like configResolveClass( :classId => 'equipmentChassis' )" unless opts[:classId]
|
@@ -414,10 +426,69 @@ VERSION = '0.0.6'
|
|
414
426
|
found = configResolveClass( :classId => classId)
|
415
427
|
end
|
416
428
|
|
417
|
-
@log.info("
|
429
|
+
@log.info("blade ended")
|
418
430
|
found
|
419
431
|
end
|
420
432
|
|
433
|
+
#Adapter pattern method to make finding service profiles easier
|
434
|
+
#Returns an *Array* of found objects
|
435
|
+
#Logic is simple here:
|
436
|
+
#* You can just provide a dn, we just get that and we're done
|
437
|
+
#* If you provide a :name, then we treat it as a wildcard and search that field
|
438
|
+
#* If you provide an :org, we get all the profiles under that
|
439
|
+
#* If you provide only a :chassis, we get all service profiles associated to blades in that chassis
|
440
|
+
#* If you provide a :chassis and a :blade we get the associated service profile
|
441
|
+
#* If you provide a :pnDn then it's the same as :chassis and :blade
|
442
|
+
#* If you provide a :inFilter hash with "type", "property", and "value" in it, we'll send on the search
|
443
|
+
#* If you provide a :uuid we'll get that profile
|
444
|
+
#* If you provide a :template name, we'll get all profiles based on that template
|
445
|
+
#* If you provide nothing, we get all blades
|
446
|
+
def server(opts={})
|
447
|
+
@log.info("server started")
|
448
|
+
|
449
|
+
classId = 'lsServer'
|
450
|
+
found = Array.new
|
451
|
+
|
452
|
+
if opts[:dn]
|
453
|
+
found = configResolveDn( :dn => opts[:dn] )
|
454
|
+
elsif opts[:name]
|
455
|
+
inFilter = { "type" => "wcard", "property" => "name", "value" => opts[:name] }
|
456
|
+
found = configResolveClass( :classId => classId, :inFilter => inFilter)
|
457
|
+
elsif opts[:org]
|
458
|
+
found = configResolveChildren( :inDn => 'org-'+opts[:org], :classId => classId )
|
459
|
+
elsif opts[:uuid]
|
460
|
+
inFilter = { "type" => "wcard", "property" => "uuid", "value" => opts[:uuid] }
|
461
|
+
found = configResolveClass( :classId => classId, :inFilter => inFilter)
|
462
|
+
elsif opts[:template]
|
463
|
+
inFilter = { "type" => "wcard", "property" => "srcTemplName", "value" => opts[:template] }
|
464
|
+
found = configResolveClass( :classId => classId, :inFilter => inFilter)
|
465
|
+
elsif opts[:chassis]
|
466
|
+
if opts[:chassis] =~ /chassis-/
|
467
|
+
pnDn = opts[:chassis]
|
468
|
+
else
|
469
|
+
pnDn = 'chassis-' + opts[:chassis]
|
470
|
+
end
|
471
|
+
if opts[:blade]
|
472
|
+
pnDn << "/"
|
473
|
+
if opts[:blade] =~ /blade-/
|
474
|
+
pnDn << opts[:blade]
|
475
|
+
else
|
476
|
+
pnDn << 'blade-' + opts[:blade]
|
477
|
+
end
|
478
|
+
end
|
479
|
+
inFilter = { "type" => "wcard", "property" => "pnDn", "value" => pnDn }
|
480
|
+
found = configResolveClass( :classId => classId, :inFilter => inFilter)
|
481
|
+
elsif opts[:inFilter]
|
482
|
+
@log.error ":inFilter must be a hash of type, property, value" unless opts[:inFilter].class == Hash
|
483
|
+
found = configResolveClass( :classId => classId, :inFilter => opts[:inFilter])
|
484
|
+
else
|
485
|
+
found = configResolveClass( :classId => classId)
|
486
|
+
end
|
487
|
+
|
488
|
+
@log.info("server ended")
|
489
|
+
found
|
490
|
+
end
|
491
|
+
|
421
492
|
#Adapter pattern method to make finding PSUs easier
|
422
493
|
#Returns an *Array* of found objects
|
423
494
|
#The logic works like this:
|
@@ -493,7 +564,7 @@ VERSION = '0.0.6'
|
|
493
564
|
found = configResolveChildren( :classId => classId, :inDn => module_dn )
|
494
565
|
end
|
495
566
|
else
|
496
|
-
@log.error "
|
567
|
+
@log.error "Missing :module parameter"
|
497
568
|
end
|
498
569
|
elsif opts[:fabric]
|
499
570
|
fabric_dn = 'sys/switch-' + opts[:fabric].to_s
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: UCSAPI
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Steve Chambers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-02 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|