xclarity_client 0.6.3 → 0.6.8

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.
Files changed (38) hide show
  1. checksums.yaml +5 -5
  2. data/docs/apib/discover_request.apib +3 -1
  3. data/docs/apib/event.apib +0 -1
  4. data/docs/apib/manage_request.apib +359 -0
  5. data/docs/apib/storages.apib +3 -3
  6. data/docs/apib/update_comp.apib +426 -0
  7. data/docs/apib/update_repo.apib +0 -57
  8. data/lib/xclarity_client.rb +0 -1
  9. data/lib/xclarity_client/client.rb +3 -0
  10. data/lib/xclarity_client/connection/connection.rb +73 -35
  11. data/lib/xclarity_client/endpoints/endpoints.rb +3 -0
  12. data/lib/xclarity_client/endpoints/manage_request.rb +11 -0
  13. data/lib/xclarity_client/endpoints/management_server.rb +5 -0
  14. data/lib/xclarity_client/endpoints/storage.rb +7 -6
  15. data/lib/xclarity_client/endpoints/update_comp.rb +18 -0
  16. data/lib/xclarity_client/mixins/job_mixin.rb +0 -4
  17. data/lib/xclarity_client/mixins/manage_request_mixin.rb +54 -0
  18. data/lib/xclarity_client/mixins/management_server_mixin.rb +40 -0
  19. data/lib/xclarity_client/mixins/mixins.rb +3 -0
  20. data/lib/xclarity_client/mixins/node_mixin.rb +42 -0
  21. data/lib/xclarity_client/mixins/update_comp_mixin.rb +37 -0
  22. data/lib/xclarity_client/mixins/update_repo_mixin.rb +107 -7
  23. data/lib/xclarity_client/services/job_management.rb +2 -4
  24. data/lib/xclarity_client/services/manage_request_management.rb +62 -0
  25. data/lib/xclarity_client/services/management_server_management.rb +86 -0
  26. data/lib/xclarity_client/services/node_management.rb +46 -0
  27. data/lib/xclarity_client/services/osimage_management.rb +3 -2
  28. data/lib/xclarity_client/services/remote_access_management.rb +6 -4
  29. data/lib/xclarity_client/services/services.rb +3 -0
  30. data/lib/xclarity_client/services/update_comp_management.rb +111 -0
  31. data/lib/xclarity_client/services/update_repo_management.rb +100 -47
  32. data/lib/xclarity_client/services/virtual_appliance_management.rb +13 -16
  33. data/lib/xclarity_client/services/xclarity_service.rb +2 -3
  34. data/lib/xclarity_client/version.rb +1 -1
  35. data/lib/xclarity_client/xclarity_credentials_validator.rb +8 -11
  36. data/xclarity_client.gemspec +2 -2
  37. metadata +26 -11
  38. data/lib/xclarity_client/xclarity_base.rb +0 -88
@@ -1547,60 +1547,3 @@ FORMAT: 1A
1547
1547
  + Response 404
1548
1548
  + Response 409
1549
1549
  + Response 500
1550
-
1551
- # XClarity Update Repositories [/updatableComponents{?action,with,filetypes}]
1552
-
1553
- + Parameters
1554
- + action - The action to take. This can be one of the following values - read, refresh, acquire, delete, export
1555
- + with - The scope of the action. This can be one of the following values - all, latest, payloads
1556
- + filetypes - When action=delete or action=export is specified, this parameter is used. Value can be set to payloads
1557
-
1558
- ## Update Repo [PUT]
1559
- + Request (application/json)
1560
- {
1561
- "mt": [
1562
- "7167"
1563
- ],
1564
- "os": "",
1565
- "type": "catalog"
1566
- }
1567
- + Response 200
1568
-
1569
- + Response 400
1570
- + Response 401
1571
- + Response 404
1572
- + Response 409
1573
- + Response 500
1574
-
1575
- + Request (application/json)
1576
- {
1577
- "fixids": [
1578
- "brcd_fw_bcsw_nos5.0.1_anyos_noarch",
1579
- "brcd_fw_cna_3.2.4.0_linux_32-64",
1580
- "brcd_fw_cna_3.2.3.0_linux_32-64",
1581
- "lenovo_fw_dsa_dsyte2f-9.61_anyos_32-64"
1582
- ],
1583
- "mt": "0000",
1584
- "type": "latest"
1585
- }
1586
- + Response 200
1587
-
1588
- + Response 400
1589
- + Response 401
1590
- + Response 404
1591
- + Response 409
1592
- + Response 500
1593
-
1594
- + Request (application/json)
1595
- {
1596
- "fixids": [
1597
- "lnvgy_fw_cmm_1aon01k-1.0.0k_anyos_noarch"
1598
- ]
1599
- }
1600
- + Response 200
1601
-
1602
- + Response 400
1603
- + Response 401
1604
- + Response 404
1605
- + Response 409
1606
- + Response 500
@@ -8,7 +8,6 @@ end
8
8
  require 'xclarity_client/errors/errors'
9
9
 
10
10
  require 'xclarity_client/configuration'
11
- require 'xclarity_client/xclarity_base'
12
11
  require 'xclarity_client/xclarity_credentials_validator'
13
12
  require 'xclarity_client/discover'
14
13
  require 'xclarity_client/endpoints/endpoints'
@@ -31,8 +31,11 @@ module XClarityClient
31
31
  include XClarityClient::Mixins::StorageMixin
32
32
  include XClarityClient::Mixins::SwitchMixin
33
33
  include XClarityClient::Mixins::UnmanageRequestMixin
34
+ include XClarityClient::Mixins::ManageRequestMixin
34
35
  include XClarityClient::Mixins::UpdateRepoMixin
36
+ include XClarityClient::Mixins::UpdateCompMixin
35
37
  include XClarityClient::Mixins::UserMixin
38
+ include XClarityClient::Mixins::ManagementServerMixin
36
39
 
37
40
  def initialize(config)
38
41
  @config = config
@@ -3,6 +3,7 @@ require 'faraday-cookie_jar'
3
3
  require 'uri'
4
4
  require 'uri/https'
5
5
  require 'timeout'
6
+ require 'net/http'
6
7
 
7
8
  module XClarityClient
8
9
  #
@@ -11,7 +12,6 @@ module XClarityClient
11
12
  #
12
13
  class Connection
13
14
  HEADER_MESSAGE = 'XClarityClient::Connection'.freeze
14
- #
15
15
  # @param [Hash] configuration - the data to create a connection with the LXCA
16
16
  # @option configuration [String] :host the LXCA host
17
17
  # @option configuration [String] :username the LXCA username
@@ -24,20 +24,23 @@ module XClarityClient
24
24
  #
25
25
  def initialize(configuration)
26
26
  @connection = build(configuration)
27
- @timeout = configuration.timeout
27
+ @connection_multipart = build(configuration, true)
28
+ @connection_net_http = build(configuration, false, true)
29
+ @timeout = configuration.timeout
30
+ @configuration = configuration
28
31
  end
29
32
 
30
- #
31
33
  # Does a GET request to an LXCA endpoint
32
34
  #
33
35
  # @param [String] uri - endpoint to do the request
34
36
  # @param [Hash] query - params to query the endpoint resources
35
37
  # @param [Hash] headers - add headers to the request
36
38
  #
37
- def do_get(uri = "", query: {}, headers: {})
39
+ def do_get(uri = "", query: {}, headers: {}, n_http: false)
38
40
  url_query = query.size > 0 ? "?" + query.map {|k, v| "#{k}=#{v}"}.join("&") : ""
39
41
  Timeout.timeout(@timeout) do
40
- @connection.get do |req|
42
+ con = n_http ? @connection_net_http : @connection
43
+ con.get do |req|
41
44
  req.url(uri + url_query)
42
45
  headers.map { |key, value| req.headers[key] = value }
43
46
  end
@@ -49,41 +52,61 @@ module XClarityClient
49
52
  Faraday::Response.new
50
53
  end
51
54
 
52
- #
55
+ def do_get_file_download(url, file_path)
56
+ host = @configuration.host
57
+ username = @configuration.username
58
+ password = @configuration.password
59
+
60
+ uri = 'https://' + host + url unless host.include?('https')
61
+ uri = host + url if host.include?('https')
62
+
63
+ uri = URI(uri)
64
+ Net::HTTP.start(uri.host, uri.port,
65
+ :use_ssl => true,
66
+ :verify_mode => 0) do |http|
67
+
68
+ request = Net::HTTP::Get.new(uri.request_uri)
69
+ request.basic_auth(username, password)
70
+
71
+ http.request(request) do |response|
72
+ open file_path, 'wb' do |io|
73
+ response.read_body do |chunk|
74
+ io.write(chunk)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+
53
81
  # Does a POST request to an LXCA endpoint
54
82
  #
55
83
  # @param [String] uri - endpoint to do the request
56
84
  # @param [JSON] body - json to be sent in request body
57
85
  #
58
- def do_post(uri = '', body = '')
59
- build_request(:post, uri, body)
86
+ def do_post(uri = '', body = '', multipart = false)
87
+ build_request(:post, uri, body, multipart)
60
88
  end
61
89
 
62
- #
63
90
  # Does a PUT request to an LXCA endpoint
64
- #
65
91
  # @param [String] uri - endpoint to do the request
66
92
  # @param [JSON] body - json to be sent in request body
67
- #
68
93
  def do_put(uri = '', body = '')
69
94
  build_request(:put, uri, body)
70
95
  end
71
96
 
72
- #
73
97
  # Does a DELETE request to an LXCA endpoint
74
- #
75
98
  # @param [String] uri - endpoint to do the request
76
- #
77
99
  def do_delete(uri = '')
78
100
  build_request(:delete, uri)
79
101
  end
80
102
 
81
103
  private
82
104
 
83
- def build_request(method, url, body = '')
84
- @connection.send(method) do |request|
105
+ def build_request(method, url, body = '', multipart = false)
106
+ con = multipart ? @connection_multipart : @connection
107
+ con.send(method) do |request|
85
108
  request.url(url)
86
- request.headers['Content-Type'] = 'application/json'
109
+ request.headers['Content-Type'] = 'application/json' unless multipart
87
110
  request.body = body
88
111
  end
89
112
  rescue Faraday::Error::ConnectionFailed => e
@@ -95,32 +118,47 @@ module XClarityClient
95
118
  Faraday::Response.new
96
119
  end
97
120
 
98
- def build(configuration)
99
- header = HEADER_MESSAGE + ' build'
100
- $lxca_log.info(header, 'Building the connection')
101
-
102
- hostname = URI.parse(configuration.host)
103
-
104
- url = URI::HTTPS.build({ :host => hostname.scheme ? hostname.host : hostname.path,
105
- :port => configuration.port.to_i,
106
- :query => hostname.query,
107
- :fragment => hostname.fragment }).to_s
108
- $lxca_log.info(header, "Creating connection to #{url}")
121
+ def create_connection_obj(connection, configuration)
122
+ user_agent_label = configuration.user_agent_label
123
+ agent_label = user_agent_label.nil? ? "" : user_agent_label
124
+ header = "LXCA via Ruby Client/#{XClarityClient::VERSION}"
125
+ connection.headers[:user_agent] = header + agent_label
126
+ basic_auth = configuration.auth_type == 'basic_auth'
127
+ username = configuration.username
128
+ password = configuration.password
129
+ connection.basic_auth(username, password) if basic_auth
130
+ $lxca_log.info(header, 'Connection created Successfuly')
131
+ connection
132
+ end
109
133
 
110
- connection = Faraday.new(url: url) do |faraday|
134
+ def create_faraday_obj(url, configuration, multipart, n_http)
135
+ Faraday.new(url: url) do |faraday|
136
+ faraday.request(:multipart) if multipart # multipart form data
111
137
  faraday.request(:url_encoded) # form-encode POST params
112
138
  faraday.response(:logger, $lxca_log.log) # log requests to log file
113
139
  faraday.use(:cookie_jar) if configuration.auth_type == 'token'
114
- faraday.adapter(:httpclient) # make requests with HTTPClient
140
+ faraday.adapter(:httpclient) unless n_http || multipart
141
+ faraday.adapter(:net_http) if n_http || multipart # with net_http
115
142
  faraday.ssl[:verify] = configuration.verify_ssl == 'PEER'
116
143
  end
144
+ end
117
145
 
118
- connection.headers[:user_agent] = "LXCA via Ruby Client/#{XClarityClient::VERSION}" + (configuration.user_agent_label.nil? ? "" : " (#{configuration.user_agent_label})")
119
-
120
- connection.basic_auth(configuration.username, configuration.password) if configuration.auth_type == 'basic_auth'
121
- $lxca_log.info(header, 'Connection created Successfuly')
146
+ def build_connection(url, configuration, multipart = false, n_http = false)
147
+ con_obj = create_faraday_obj(url, configuration, multipart, n_http)
148
+ create_connection_obj(con_obj, configuration)
149
+ end
122
150
 
123
- connection
151
+ def build(configuration, multipart = false, n_http = false)
152
+ header = HEADER_MESSAGE + ' build'
153
+ $lxca_log.info(header, 'Building the connection')
154
+ hostname = URI.parse(configuration.host)
155
+ host = hostname.scheme ? hostname.host : hostname.path
156
+ url = URI::HTTPS.build(:host => host,
157
+ :port => configuration.port.to_i,
158
+ :query => hostname.query,
159
+ :fragment => hostname.fragment).to_s
160
+ $lxca_log.info(header, "Creating connection to #{url}")
161
+ build_connection(url, configuration, multipart, n_http)
124
162
  end
125
163
  end
126
164
  end
@@ -26,7 +26,9 @@ require 'xclarity_client/endpoints/scalable_complex'
26
26
  require 'xclarity_client/endpoints/switch'
27
27
  require 'xclarity_client/endpoints/storage'
28
28
  require 'xclarity_client/endpoints/unmanage_request'
29
+ require 'xclarity_client/endpoints/manage_request'
29
30
  require 'xclarity_client/endpoints/update_repo'
31
+ require 'xclarity_client/endpoints/update_comp'
30
32
  require 'xclarity_client/endpoints/user'
31
33
  require 'xclarity_client/endpoints/remote_access'
32
34
  require 'xclarity_client/endpoints/globalsettings'
@@ -34,3 +36,4 @@ require 'xclarity_client/endpoints/hostplatform'
34
36
  require 'xclarity_client/endpoints/osimage'
35
37
  require 'xclarity_client/endpoints/remotefileserver'
36
38
  require 'xclarity_client/endpoints/compliance_policy'
39
+ require 'xclarity_client/endpoints/management_server'
@@ -0,0 +1,11 @@
1
+ module XClarityClient
2
+ # ManageRequest class
3
+ class ManageRequest < Endpoints::XclarityEndpoint
4
+ BASE_URI = '/manageRequest'.freeze
5
+ LIST_NAME = 'manageRequestList'.freeze
6
+
7
+ attr_accessor :progress, :results, :messageBundle, :messageID,
8
+ :messageParameters, :result, :resultLongDescription,
9
+ :resultShortDescription, :status, :taskid, :time_spent, :uuid
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module XClarityClient
2
+ class ManagementServer < Endpoints::XclarityEndpoint
3
+ BASE_URI = '/managementServer/updates'.freeze
4
+ end
5
+ end
@@ -6,14 +6,15 @@ module XClarityClient
6
6
  # speed, security and high availability
7
7
  #
8
8
  class Storage < Endpoints::XclarityEndpoint
9
- BASE_URI = '/storages'.freeze
9
+ BASE_URI = '/storage'.freeze
10
10
  LIST_NAME = 'storageList'.freeze
11
11
 
12
12
  attr_accessor :uuid, :name, :type, :accessState, :cmmHealthState,
13
- :enclosures, :overallHealthState, :driveBays,
14
- :enclosureCount, :canisterSlots, :productName,
15
- :machineType, :model, :serialNumber, :contact,
16
- :description, :location, :room, :rack,
17
- :lowestRackUnit, :mgmtProcIPaddress
13
+ :enclosures, :canisters, :overallHealthState, :driveBays,
14
+ :enclosureCount, :canisterSlots, :parent,
15
+ :productName, :machineType, :model,
16
+ :serialNumber, :contact, :description,
17
+ :location, :room, :rack, :lowestRackUnit,
18
+ :mgmtProcIPaddress
18
19
  end
19
20
  end
@@ -0,0 +1,18 @@
1
+ module XClarityClient
2
+ # update component class
3
+ class UpdateComp < Endpoints::XclarityEndpoint
4
+ BASE_URI = '/updatableComponents'.freeze
5
+ LIST_NAME = 'updateCompList'.freeze
6
+
7
+ attr_accessor :DeviceList, :CMMList, :ServerList, :StorageList, :SwitchList,
8
+ :UpdateStatusMetrics, :TotaldeviceUpdates,
9
+ :TotaldeviceUpdatesActive, :TotaldeviceUpdatesComplete,
10
+ :TotaldeviceUpdatesInProgress, :TotalJobs, :TotalJobsComplete,
11
+ :TotalJobsInProgress, :TotalJobsPercentComplete,
12
+ :TotalSupportTasks, :TotalSupportTasksActive, :TotalTasks,
13
+ :TotalTasksBlocked, :TotalTasksCanceled, :TotalTasksComplete,
14
+ :TotalTasksFailed, :TotalTasksInProgress, :TotalTasksSuccess,
15
+ :TotalUpdateTasksActive, :TotalUpdateTasks, :result,
16
+ :messages, :id, :text
17
+ end
18
+ end
@@ -24,9 +24,5 @@ module XClarityClient
24
24
  def delete_job(id = '')
25
25
  JobManagement.new(@config).delete_job(id)
26
26
  end
27
-
28
- def get_job(job_id = '')
29
- JobManagement.new(@config).get_job(job_id)
30
- end
31
27
  end
32
28
  end
@@ -0,0 +1,54 @@
1
+ module XClarityClient
2
+ #
3
+ # Exposes ManageRequestManagement features
4
+ #
5
+ module Mixins::ManageRequestMixin
6
+ def fetch_manage_request(job_id)
7
+ ManageRequestManagement.new(@config).fetch_manage_request(job_id)
8
+ end
9
+
10
+ def get_job_progress(dji, discovery_job_progress)
11
+ discovery_result = DiscoverRequestManagement.new(@config)\
12
+ .monitor_discover_request(dji)
13
+ discovery_result.map do |req|
14
+ req.instance_variables.each do |attr|
15
+ value = req.instance_variable_get(attr)
16
+ discovery_job_progress = value if attr.id2name.eql?('@progress')
17
+ end
18
+ end
19
+ { :discovery_job_progress => discovery_job_progress,
20
+ :discovery_result => discovery_result }
21
+ end
22
+
23
+ def get_discovery_result(discovery_job_id)
24
+ discovery_job_id = discovery_job_id[:location].split('/')[3]
25
+ discovery_job_progress = 0
26
+ return false if discovery_job_id.nil?
27
+ while discovery_job_progress < 100
28
+ sleep 30
29
+ opts = get_job_progress(discovery_job_id, discovery_job_progress)
30
+ discovery_job_progress = opts[:discovery_job_progress]
31
+ end
32
+ opts[:discovery_result]
33
+ end
34
+
35
+ def update_manage_request(manage_request, force, discovery_result)
36
+ ManageRequestManagement.new(@config)\
37
+ .update_manage_request(manage_request,
38
+ force,
39
+ discovery_result)
40
+ end
41
+
42
+ def manage_discovered_devices(manage_request, force)
43
+ discovery_job_id = DiscoverRequestManagement.new(@config)\
44
+ .discover_manageable_devices(
45
+ manage_request[:ip_address]
46
+ )
47
+ d_res = get_discovery_result(discovery_job_id)
48
+ raise 'manageable device Discovery failed' unless d_res
49
+ update_manage_request(manage_request, force, d_res)
50
+ ManageRequestManagement.new(@config)\
51
+ .manage_discovered_devices(manage_request)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,40 @@
1
+ module XClarityClient
2
+ #
3
+ # Exposes ManagementServerManagement features
4
+ #
5
+ module Mixins::ManagementServerMixin
6
+ def get_management_server_updates_info(key = nil)
7
+ obj = ManagementServerManagement.new(@config)
8
+ obj.get_management_server_updates_info(key)
9
+ end
10
+
11
+ def delete_management_server_updates(fixids)
12
+ return "parameter 'fixids' should be array" unless fixids.kind_of?(Array)
13
+ obj = ManagementServerManagement.new(@config)
14
+ obj.delete_management_server_updates(fixids)
15
+ end
16
+
17
+ def download_management_server_updates(fixids)
18
+ return "parameter 'fixids' should be array" unless fixids.kind_of?(Array)
19
+ obj = ManagementServerManagement.new(@config)
20
+ obj.download_management_server_updates(fixids)
21
+ end
22
+
23
+ def apply_management_server_updates(fixids)
24
+ return "parameter 'fixids' should be array" unless fixids.kind_of?(Array)
25
+ obj = ManagementServerManagement.new(@config)
26
+ obj.apply_management_server_updates(fixids)
27
+ end
28
+
29
+ def refresh_management_server_updates_catalog
30
+ obj = ManagementServerManagement.new(@config)
31
+ obj.refresh_management_server_updates_catalog
32
+ end
33
+
34
+ def import_management_server_updates(files)
35
+ return "parameter 'files' should be array" unless files.kind_of?(Array)
36
+ obj = ManagementServerManagement.new(@config)
37
+ obj.import_management_server_updates(files)
38
+ end
39
+ end
40
+ end