xclarity_client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/Gemfile +2 -0
  4. data/README.md +57 -4
  5. data/bin/mock_server.ru +1 -1
  6. data/docs/apib/cabinet.apib +63 -0
  7. data/docs/apib/canister.apib +69 -0
  8. data/docs/apib/chassis.apib +65 -1428
  9. data/docs/apib/cmm.apib +1102 -0
  10. data/docs/apib/fan.apib +383 -0
  11. data/docs/apib/fan_mux.apib +13 -0
  12. data/docs/apib/fan_muxes.apib +245 -0
  13. data/docs/apib/node.apib +8989 -869
  14. data/docs/apib/power_supply.apib +519 -0
  15. data/docs/apib/scalable_complex.apib +91 -0
  16. data/docs/apib/squisher.rb +26 -0
  17. data/docs/apib/switches.apib +1596 -0
  18. data/example/simple.rb +12 -5
  19. data/lib/xclarity_client.rb +20 -0
  20. data/lib/xclarity_client/cabinet.rb +14 -0
  21. data/lib/xclarity_client/cabinet_management.rb +59 -0
  22. data/lib/xclarity_client/canister.rb +20 -0
  23. data/lib/xclarity_client/canister_management.rb +60 -0
  24. data/lib/xclarity_client/chassi.rb +24 -0
  25. data/lib/xclarity_client/chassi_management.rb +64 -0
  26. data/lib/xclarity_client/client.rb +77 -1
  27. data/lib/xclarity_client/cmm.rb +18 -0
  28. data/lib/xclarity_client/cmm_management.rb +61 -0
  29. data/lib/xclarity_client/configuration.rb +13 -3
  30. data/lib/xclarity_client/fan.rb +20 -0
  31. data/lib/xclarity_client/fan_management.rb +83 -0
  32. data/lib/xclarity_client/fan_mux.rb +18 -0
  33. data/lib/xclarity_client/fan_mux_management.rb +82 -0
  34. data/lib/xclarity_client/node.rb +15 -94
  35. data/lib/xclarity_client/node_management.rb +62 -0
  36. data/lib/xclarity_client/power_supply.rb +18 -0
  37. data/lib/xclarity_client/power_supply_management.rb +89 -0
  38. data/lib/xclarity_client/scalable_complex.rb +16 -0
  39. data/lib/xclarity_client/scalable_complex_management.rb +83 -0
  40. data/lib/xclarity_client/switch.rb +19 -0
  41. data/lib/xclarity_client/switch_management.rb +59 -0
  42. data/lib/xclarity_client/version.rb +1 -1
  43. data/lib/xclarity_client/xclarity_base.rb +26 -1
  44. data/lib/xclarity_client/xclarity_resource.rb +20 -0
  45. data/xclarity_client.gemspec +1 -2
  46. metadata +34 -5
  47. data/lib/xclarity_client/chassis.rb +0 -7
@@ -0,0 +1,16 @@
1
+ module XClarityClient
2
+ class ScalableComplex
3
+ include XClarityClient::Resource
4
+
5
+ BASE_URI = '/scalable_complexes'.freeze
6
+
7
+ attr_accessor :properties, :_id, :location, :nodeCount, :orphanNodes,
8
+ :partition, :partitionCount, :uuid, :slots, :complexID
9
+
10
+
11
+ def initialize(attributes)
12
+ build_resource(attributes)
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,83 @@
1
+ require 'json'
2
+
3
+ module XClarityClient
4
+ class ScalableComplexManagement < XClarityBase
5
+
6
+ BASE_URI = '/scalableComplex'.freeze
7
+
8
+ def initialize(conf)
9
+ super(conf, BASE_URI)
10
+ end
11
+
12
+ def population
13
+ response = connection(BASE_URI)
14
+ body = JSON.parse(response.body)
15
+ body = {'complex' => [body]} unless body.has_key? 'complex'
16
+ body['complex'].map do |scalableComplex|
17
+ ScalableComplex.new scalableComplex
18
+ end
19
+ end
20
+
21
+ def get_object_scalableComplexes(uuids, includeAttributes, excludeAttributes)
22
+
23
+ response = if not includeAttributes.nil?
24
+ get_object_scalableComplexes_include_attributes(uuids, includeAttributes)
25
+ elsif not excludeAttributes.nil?
26
+ get_object_scalableComplexes_exclude_attributes(uuids, excludeAttributes)
27
+ elsif not uuids.nil?
28
+ response = connection(BASE_URI + "/" + uuids)
29
+ body = JSON.parse(response.body)
30
+ body = {'complex' => [body]} unless body.has_key? 'complex'
31
+ body['complex'].map do |scalableComplex|
32
+ ScalableComplex.new scalableComplex
33
+ end
34
+ else
35
+ response = connection(BASE_URI)
36
+ body = JSON.parse(response.body)
37
+ body = {'complex' => [body]} unless body.has_key? 'complex'
38
+ body['complex'].map do |scalableComplex|
39
+ ScalableComplex.new scalableComplex
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ def get_object_scalableComplexes_exclude_attributes(uuids, attributes)
46
+
47
+ if not uuids.nil?
48
+ response = connection(BASE_URI + "/" + uuids +"?excludeAttributes=" + attributes.join(","))
49
+ body = JSON.parse(response.body)
50
+ body = {'complex' => [body]} unless body.has_key? 'complex'
51
+ body['complex'].map do |scalableComplex|
52
+ ScalableComplex.new scalableComplex
53
+ end
54
+ else
55
+ response = connection(BASE_URI + "?excludeAttributes=" + attributes.join(","))
56
+ body = JSON.parse(response.body)
57
+ body = {'complex' => [body]} unless body.has_key? 'complex'
58
+ body['complex'].map do |scalableComplex|
59
+ ScalableComplex.new scalableComplex
60
+ end
61
+ end
62
+
63
+ end
64
+
65
+ def get_object_scalableComplexes_include_attributes(uuids, attributes)
66
+ if not uuids.nil?
67
+ response = connection(BASE_URI + "/" + uuids + "?includeAttributes=" + attributes.join(","))
68
+ body = JSON.parse(response.body)
69
+ body = {'complex' => [body]} unless body.has_key? 'complex'
70
+ body['complex'].map do |scalableComplex|
71
+ ScalableComplex.new scalableComplex
72
+ end
73
+ else
74
+ response = connection(BASE_URI + "?includeAttributes=" + attributes.join(","))
75
+ body = JSON.parse(response.body)
76
+ body = {'complex' => [body]} unless body.has_key? 'complex'
77
+ body['complex'].map do |scalableComplex|
78
+ ScalableComplex.new scalableComplex
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,19 @@
1
+ module XClarityClient
2
+ class Switch
3
+ include XClarityClient::Resource
4
+
5
+ BASE_URI = '/switches'.freeze
6
+
7
+ attr_accessor :properties, :_id, :accessState, :applyPending, :attachedNodes, :cmmDisplayName, :cmmHealthState, :entitleSerialNumber, :fans, :firmware, :hostname, :ipInterfaces,
8
+ :leds, :macAddresses, :machineType, :manufacturer, :manufacturerId, :ports, :productId, :productName, :protectedMode, :serialNumber, :type, :upTime, :uuid, :accessState,
9
+ :cmmHealthState, :excludedHealthState, :memoryUtilization, :model, :overallHealthState, :panicDump, :powerState, :savePending, :slots, :posID, :stackMode, :stackedMode,
10
+ :stackRole, :sysObjectID, :temperatureSensors, :userDescription, :vpdID, :contact, :cpuUtilization, :dataHandle, :description, :dnsHostnames, :domainName, :errorFields,
11
+ :FRU, :fruSerialNumber, :ipv4Addresses, :ipv6Addresses, :ipInterfaces, :manufacturingDate, :name, :resetReason, :uri, :backedBy, :partNumber, :parent, :powerAllocation
12
+
13
+
14
+ def initialize(attributes)
15
+ build_resource(attributes)
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,59 @@
1
+ require 'json'
2
+
3
+ module XClarityClient
4
+ class SwitchManagement < XClarityBase
5
+
6
+ BASE_URI = '/switches'.freeze
7
+
8
+ def initialize(conf)
9
+ super(conf, BASE_URI)
10
+ end
11
+
12
+ def population
13
+ response = connection(BASE_URI)
14
+ body = JSON.parse(response.body)
15
+ body = {'switchList' => [body]} unless body.has_key? 'switchList'
16
+ body['switchList'].map do |switch|
17
+ Switch.new switch
18
+ end
19
+ end
20
+
21
+ def get_object_switches(uuids, includeAttributes, excludeAttributes)
22
+
23
+ response = if not includeAttributes.nil?
24
+ get_object_switches_include_attributes(uuids, includeAttributes)
25
+ elsif not excludeAttributes.nil?
26
+ get_object_switches_exclude_attributes(uuids, excludeAttributes)
27
+ elsif not uuids.nil?
28
+ connection(BASE_URI + "/" + uuids.join(","))
29
+ else
30
+ connection(BASE_URI)
31
+ end
32
+
33
+ body = JSON.parse(response.body)
34
+ body = {'switchList' => [body]} unless body.has_key? 'switchList'
35
+ body['switchList'].map do |switch|
36
+ Switch.new switch
37
+ end
38
+
39
+ end
40
+
41
+ def get_object_switches_exclude_attributes(uuids, attributes)
42
+
43
+ response = if not uuids.nil?
44
+ connection(BASE_URI + "/#{uuids.join(",")}"+"?excludeAttributes=#{attributes.join(",")}")
45
+ else
46
+ connection(BASE_URI + "?excludeAttributes=" + attributes.join(","))
47
+ end
48
+
49
+ end
50
+
51
+ def get_object_switches_include_attributes(uuids, attributes)
52
+ response = if not uuids.nil?
53
+ connection(BASE_URI + "/" + uuids.join(",") + "?includeAttributes=" + attributes.join(","))
54
+ else
55
+ connection(BASE_URI + "?includeAttributes=" + attributes.join(","))
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,3 @@
1
1
  module XClarityClient
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,8 +1,12 @@
1
1
  require 'faraday'
2
+ require 'json'
3
+ require 'uri'
2
4
 
3
5
  module XClarityClient
4
6
  class XClarityBase
5
7
 
8
+ token_auth = '/session'.freeze
9
+
6
10
  attr_reader :conn
7
11
 
8
12
  def initialize(conf, uri)
@@ -10,11 +14,20 @@ module XClarityClient
10
14
  end
11
15
 
12
16
  def connection_builder(conf, uri)
17
+
18
+ #Building configuration
13
19
  @conn = Faraday.new(url: conf.host + uri) do |faraday|
14
20
  faraday.request :url_encoded # form-encode POST params
15
- faraday.response :logger # log requests to STDOUT
21
+ # faraday.response :logger # log requests to STDOUT -- This line, should be uncommented if you wanna inspect the URL Request
16
22
  faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
23
+ faraday.ssl[:verify] = conf.verify_ssl == 'PEER'
17
24
  end
25
+
26
+ response = authentication(conf) unless conf.auth_type != 'token'
27
+ #TODO: What's to do with the response of authentication request?
28
+ @conn.basic_auth(conf.username, conf.password) if conf.auth_type == 'basic_auth'
29
+
30
+ @conn
18
31
  end
19
32
 
20
33
  private
@@ -22,5 +35,17 @@ module XClarityClient
22
35
  def connection(uri = "", options = {})
23
36
  @conn.get(uri)
24
37
  end
38
+
39
+ def authentication(conf)
40
+ response = @conn.post do |request|
41
+ request.url '/session'
42
+ request.headers['Content-Type'] = 'application/json'
43
+ request.body = {:UserId => conf.username,
44
+ :password => conf.password,
45
+ :heartBeatEnabled => true,
46
+ :maxLostHeartBeats => 3,
47
+ :csrf => conf.csrf_token}.to_json
48
+ end
49
+ end
25
50
  end
26
51
  end
@@ -0,0 +1,20 @@
1
+ module XClarityClient
2
+ module Resource
3
+ def build_resource(attributes)
4
+ attributes.each do |key, value|
5
+ begin
6
+ value = value.gsub("\u0000", '') if value.is_a?(String)
7
+ send("#{key}=", value)
8
+ rescue
9
+ $log.warn("UNEXISTING ATTRIBUTES FOR #{self.class}: #{key}") unless defined?(Rails).nil?
10
+ end
11
+ end
12
+ end
13
+
14
+ def to_hash
15
+ hash = {}
16
+ instance_variables.each {|var| hash[var.to_s.delete("@")] = instance_variable_get(var) }
17
+ hash
18
+ end
19
+ end
20
+ end
@@ -9,8 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Julian Cheal"]
10
10
  spec.email = ["jcheal@redhat.com"]
11
11
 
12
- spec.summary = %q{Write a short summary, because Rubygems requires one.}
13
- spec.description = %q{Write a longer description or delete this line.}
12
+ spec.summary = %q{Lenovo XClairty API Client}
14
13
  spec.homepage = "https://github.com/juliancheal/xclarity_client"
15
14
 
16
15
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xclarity_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Cheal
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-12 00:00:00.000000000 Z
11
+ date: 2016-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.9.2
97
- description: Write a longer description or delete this line.
97
+ description:
98
98
  email:
99
99
  - jcheal@redhat.com
100
100
  executables: []
@@ -113,17 +113,46 @@ files:
113
113
  - bin/mock_server.ru
114
114
  - bin/setup
115
115
  - docs/apib/aicc.apib
116
+ - docs/apib/cabinet.apib
117
+ - docs/apib/canister.apib
116
118
  - docs/apib/chassis.apib
119
+ - docs/apib/cmm.apib
120
+ - docs/apib/fan.apib
121
+ - docs/apib/fan_mux.apib
122
+ - docs/apib/fan_muxes.apib
117
123
  - docs/apib/node.apib
124
+ - docs/apib/power_supply.apib
125
+ - docs/apib/scalable_complex.apib
126
+ - docs/apib/squisher.rb
127
+ - docs/apib/switches.apib
118
128
  - example/simple.rb
119
129
  - lib/xclarity_client.rb
120
- - lib/xclarity_client/chassis.rb
130
+ - lib/xclarity_client/cabinet.rb
131
+ - lib/xclarity_client/cabinet_management.rb
132
+ - lib/xclarity_client/canister.rb
133
+ - lib/xclarity_client/canister_management.rb
134
+ - lib/xclarity_client/chassi.rb
135
+ - lib/xclarity_client/chassi_management.rb
121
136
  - lib/xclarity_client/client.rb
137
+ - lib/xclarity_client/cmm.rb
138
+ - lib/xclarity_client/cmm_management.rb
122
139
  - lib/xclarity_client/configuration.rb
140
+ - lib/xclarity_client/fan.rb
141
+ - lib/xclarity_client/fan_management.rb
142
+ - lib/xclarity_client/fan_mux.rb
143
+ - lib/xclarity_client/fan_mux_management.rb
123
144
  - lib/xclarity_client/node.rb
145
+ - lib/xclarity_client/node_management.rb
146
+ - lib/xclarity_client/power_supply.rb
147
+ - lib/xclarity_client/power_supply_management.rb
148
+ - lib/xclarity_client/scalable_complex.rb
149
+ - lib/xclarity_client/scalable_complex_management.rb
150
+ - lib/xclarity_client/switch.rb
151
+ - lib/xclarity_client/switch_management.rb
124
152
  - lib/xclarity_client/version.rb
125
153
  - lib/xclarity_client/virtual_appliance_management.rb
126
154
  - lib/xclarity_client/xclarity_base.rb
155
+ - lib/xclarity_client/xclarity_resource.rb
127
156
  - xclarity_client.gemspec
128
157
  homepage: https://github.com/juliancheal/xclarity_client
129
158
  licenses: []
@@ -147,6 +176,6 @@ rubyforge_project:
147
176
  rubygems_version: 2.6.3
148
177
  signing_key:
149
178
  specification_version: 4
150
- summary: Write a short summary, because Rubygems requires one.
179
+ summary: Lenovo XClairty API Client
151
180
  test_files: []
152
181
  has_rdoc:
@@ -1,7 +0,0 @@
1
- module XClarityClient
2
- class Chassis
3
-
4
- def initialize
5
- end
6
- end
7
- end