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.
- checksums.yaml +5 -5
- data/docs/apib/discover_request.apib +3 -1
- data/docs/apib/event.apib +0 -1
- data/docs/apib/manage_request.apib +359 -0
- data/docs/apib/storages.apib +3 -3
- data/docs/apib/update_comp.apib +426 -0
- data/docs/apib/update_repo.apib +0 -57
- data/lib/xclarity_client.rb +0 -1
- data/lib/xclarity_client/client.rb +3 -0
- data/lib/xclarity_client/connection/connection.rb +73 -35
- data/lib/xclarity_client/endpoints/endpoints.rb +3 -0
- data/lib/xclarity_client/endpoints/manage_request.rb +11 -0
- data/lib/xclarity_client/endpoints/management_server.rb +5 -0
- data/lib/xclarity_client/endpoints/storage.rb +7 -6
- data/lib/xclarity_client/endpoints/update_comp.rb +18 -0
- data/lib/xclarity_client/mixins/job_mixin.rb +0 -4
- data/lib/xclarity_client/mixins/manage_request_mixin.rb +54 -0
- data/lib/xclarity_client/mixins/management_server_mixin.rb +40 -0
- data/lib/xclarity_client/mixins/mixins.rb +3 -0
- data/lib/xclarity_client/mixins/node_mixin.rb +42 -0
- data/lib/xclarity_client/mixins/update_comp_mixin.rb +37 -0
- data/lib/xclarity_client/mixins/update_repo_mixin.rb +107 -7
- data/lib/xclarity_client/services/job_management.rb +2 -4
- data/lib/xclarity_client/services/manage_request_management.rb +62 -0
- data/lib/xclarity_client/services/management_server_management.rb +86 -0
- data/lib/xclarity_client/services/node_management.rb +46 -0
- data/lib/xclarity_client/services/osimage_management.rb +3 -2
- data/lib/xclarity_client/services/remote_access_management.rb +6 -4
- data/lib/xclarity_client/services/services.rb +3 -0
- data/lib/xclarity_client/services/update_comp_management.rb +111 -0
- data/lib/xclarity_client/services/update_repo_management.rb +100 -47
- data/lib/xclarity_client/services/virtual_appliance_management.rb +13 -16
- data/lib/xclarity_client/services/xclarity_service.rb +2 -3
- data/lib/xclarity_client/version.rb +1 -1
- data/lib/xclarity_client/xclarity_credentials_validator.rb +8 -11
- data/xclarity_client.gemspec +2 -2
- metadata +26 -11
- data/lib/xclarity_client/xclarity_base.rb +0 -88
data/docs/apib/update_repo.apib
CHANGED
@@ -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
|
data/lib/xclarity_client.rb
CHANGED
@@ -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
|
-
@
|
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
|
-
@
|
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
|
-
@
|
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
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
-
|
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)
|
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
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
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
|
-
|
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
|
@@ -6,14 +6,15 @@ module XClarityClient
|
|
6
6
|
# speed, security and high availability
|
7
7
|
#
|
8
8
|
class Storage < Endpoints::XclarityEndpoint
|
9
|
-
BASE_URI = '/
|
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, :
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
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
|
@@ -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
|