xclarity_client 0.6.3 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
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