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
@@ -34,5 +34,8 @@ require 'xclarity_client/mixins/scalable_complex_mixin'
|
|
34
34
|
require 'xclarity_client/mixins/storage_mixin'
|
35
35
|
require 'xclarity_client/mixins/switch_mixin'
|
36
36
|
require 'xclarity_client/mixins/unmanage_request_mixin'
|
37
|
+
require 'xclarity_client/mixins/manage_request_mixin'
|
37
38
|
require 'xclarity_client/mixins/update_repo_mixin'
|
39
|
+
require 'xclarity_client/mixins/update_comp_mixin'
|
38
40
|
require 'xclarity_client/mixins/user_mixin'
|
41
|
+
require 'xclarity_client/mixins/management_server_mixin'
|
@@ -57,8 +57,50 @@ module XClarityClient
|
|
57
57
|
node_management.set_power_state(uuid, :bootToF1)
|
58
58
|
end
|
59
59
|
|
60
|
+
def retrieve_mounted_media_details(uuid = '')
|
61
|
+
node_management.retrieve_mounted_media_details(uuid)
|
62
|
+
end
|
63
|
+
|
64
|
+
def enable_media_mount_support_thinkserver(uuid = '')
|
65
|
+
node_management.enable_media_mount_support(uuid)
|
66
|
+
end
|
67
|
+
|
68
|
+
def disable_media_mount_support_thinkserver(uuid = '')
|
69
|
+
node_management.disable_media_mount_support(uuid)
|
70
|
+
end
|
71
|
+
|
72
|
+
def remove_all_mounted_medias_thinksystem(uuid = '')
|
73
|
+
node_management.remove_all_mounted_medias(uuid)
|
74
|
+
end
|
75
|
+
|
76
|
+
def mount_media_thinkserver(uuid, opts)
|
77
|
+
validate_mount_media_params(opts, 'thinkserver')
|
78
|
+
node_management.mount_media(uuid, opts)
|
79
|
+
end
|
80
|
+
|
81
|
+
def mount_media_thinksystem(uuid, opts)
|
82
|
+
validate_mount_media_params(opts)
|
83
|
+
node_management.mount_media(uuid, opts)
|
84
|
+
end
|
85
|
+
|
86
|
+
def unmount_media_thinkserver(uuid, media_type = '')
|
87
|
+
node_management.unmount_media_thinkserver(uuid, media_type)
|
88
|
+
end
|
89
|
+
|
90
|
+
def unmount_media_thinksystem(uuid, media_uid = '')
|
91
|
+
node_management.unmount_media_thinksystem(uuid, media_uid)
|
92
|
+
end
|
93
|
+
|
60
94
|
private
|
61
95
|
|
96
|
+
def validate_mount_media_params(opts, server_type = '')
|
97
|
+
msg = "parameter 'opts' should be of type hash"
|
98
|
+
raise(msg) unless opts.kind_of?(Hash)
|
99
|
+
err_msg = ':mediaType is mandatory field in input hash for thinkserver'
|
100
|
+
raise(err_msg) if server_type == 'thinkserver' &&
|
101
|
+
!opts.keys.include?(:mediaType)
|
102
|
+
end
|
103
|
+
|
62
104
|
def node_management
|
63
105
|
NodeManagement.new(@config)
|
64
106
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module XClarityClient
|
2
|
+
#
|
3
|
+
# Exposes UpdateCompManagement features
|
4
|
+
#
|
5
|
+
module Mixins::UpdateCompMixin
|
6
|
+
def discover_firmware_update_status
|
7
|
+
UpdateCompManagement.new(@config).fetch_all
|
8
|
+
end
|
9
|
+
|
10
|
+
def discover_updatable_device_comp
|
11
|
+
UpdateCompManagement.new(@config).updatable_device_comp
|
12
|
+
end
|
13
|
+
|
14
|
+
def apply_firmware_update(opts, activation_mode = nil,
|
15
|
+
force_update_mode = nil, onerror_mode = nil)
|
16
|
+
UpdateCompManagement.new(@config).apply_firmware_update(opts,
|
17
|
+
activation_mode,
|
18
|
+
force_update_mode,
|
19
|
+
onerror_mode)
|
20
|
+
end
|
21
|
+
|
22
|
+
def cancel_firmware_update(server = nil, switch = nil, storage = nil,
|
23
|
+
cmm = nil)
|
24
|
+
UpdateCompManagement.new(@config).cancel_firmware_update(server,
|
25
|
+
switch,
|
26
|
+
storage,
|
27
|
+
cmm)
|
28
|
+
end
|
29
|
+
|
30
|
+
def modify_power_state(server = nil, switch = nil, storage = nil, cmm = nil)
|
31
|
+
UpdateCompManagement.new(@config).modify_power_state(server,
|
32
|
+
switch,
|
33
|
+
storage,
|
34
|
+
cmm)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -11,23 +11,123 @@ module XClarityClient
|
|
11
11
|
UpdateRepoManagement.new(@config).read_update_repo
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def refresh_update_repo_catalog(scope, machine_types)
|
15
|
+
mt = machine_types
|
16
|
+
msg = 'Parameter machine_types should be of type Array'
|
17
|
+
raise msg unless mt.kind_of?(Array)
|
18
|
+
UpdateRepoManagement.new(@config).refresh_update_repo_catalog(scope, mt)
|
16
19
|
end
|
17
20
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
+
def refresh_uxsp_update_repo_catalog(scope, machine_types)
|
22
|
+
mt = machine_types
|
23
|
+
msg = 'Parameter machine_types should be of type Array'
|
24
|
+
raise msg unless mt.kind_of?(Array)
|
25
|
+
UpdateRepoManagement.new(@config).refresh_uxsp_update_repo_catalog(scope,
|
26
|
+
mt)
|
21
27
|
end
|
22
28
|
|
23
|
-
def
|
29
|
+
def updates_info_by_machine_types(machine_types)
|
30
|
+
mt = machine_types
|
31
|
+
msg = 'Parameter machine_types should be of type Array'
|
32
|
+
raise msg unless mt.kind_of?(Array)
|
33
|
+
UpdateRepoManagement.new(@config).updates_info_by_machine_types(mt)
|
34
|
+
end
|
35
|
+
|
36
|
+
def uxsp_updates_info_by_machine_types(machine_types)
|
37
|
+
mt = machine_types
|
38
|
+
msg = 'Parameter machine_types should be of type Array'
|
39
|
+
raise msg unless mt.kind_of?(Array)
|
40
|
+
UpdateRepoManagement.new(@config).uxsp_updates_info_by_machine_types(mt)
|
41
|
+
end
|
42
|
+
|
43
|
+
def acquire_firmware_updates(machine_types, fixids)
|
44
|
+
mt = machine_types
|
45
|
+
msg = 'Parameter machine_types & fixids should be of type Array'
|
46
|
+
raise msg unless mt.kind_of?(Array) || fixids.kind_of?(Array)
|
47
|
+
UpdateRepoManagement.new(@config).acquire_firmware_updates(mt, fixids)
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete_firmware_updates(file_types, fixids = [])
|
51
|
+
validate_inputs(file_types, fixids)
|
24
52
|
UpdateRepoManagement.new(@config).delete_firmware_updates(file_types,
|
25
53
|
fixids)
|
26
54
|
end
|
27
55
|
|
28
|
-
def export_firmware_updates(file_types, fixids)
|
56
|
+
def export_firmware_updates(file_types, fixids = [])
|
57
|
+
validate_inputs(file_types, fixids)
|
29
58
|
UpdateRepoManagement.new(@config).export_firmware_updates(file_types,
|
30
59
|
fixids)
|
31
60
|
end
|
61
|
+
|
62
|
+
def download_exported_firmware_updates(file_name, dir_path_for_download)
|
63
|
+
dir = dir_path_for_download
|
64
|
+
validate_file_name_dir_path(file_name, dir)
|
65
|
+
UpdateRepoManagement.new(@config)
|
66
|
+
.download_exported_firmware_updates(file_name, dir)
|
67
|
+
end
|
68
|
+
|
69
|
+
def validate_import_updates(file_path)
|
70
|
+
validate_file_path(file_path)
|
71
|
+
UpdateRepoManagement.new(@config).validate_import_updates(file_path)
|
72
|
+
end
|
73
|
+
|
74
|
+
def import_firmware_updates(file_path)
|
75
|
+
validate_file_path(file_path)
|
76
|
+
UpdateRepoManagement.new(@config).import_firmware_updates(file_path)
|
77
|
+
end
|
78
|
+
|
79
|
+
def track_task_status(taskid, tasktype)
|
80
|
+
UpdateRepoManagement.new(@config).track_task_status(taskid, tasktype)
|
81
|
+
end
|
82
|
+
|
83
|
+
def supported_machine_types_detail
|
84
|
+
UpdateRepoManagement.new(@config).supported_machine_types_detail
|
85
|
+
end
|
86
|
+
|
87
|
+
def retrieve_compliance_policy_list
|
88
|
+
UpdateRepoManagement.new(@config).retrieve_compliance_policy_list
|
89
|
+
end
|
90
|
+
|
91
|
+
def export_compliance_policies(policy_names)
|
92
|
+
msg = 'Parameter policy_names should be of type Array'
|
93
|
+
raise msg unless policy_names.kind_of?(Array)
|
94
|
+
UpdateRepoManagement.new(@config).export_compliance_policies(policy_names)
|
95
|
+
end
|
96
|
+
|
97
|
+
def download_exported_compliance_policies(file_name, dir_path_for_download)
|
98
|
+
dir = dir_path_for_download
|
99
|
+
validate_file_name_dir_path(file_name, dir)
|
100
|
+
UpdateRepoManagement.new(@config)\
|
101
|
+
.download_exported_compliance_policies(file_name, dir)
|
102
|
+
end
|
103
|
+
|
104
|
+
def import_compliance_policies(file_path)
|
105
|
+
validate_file_path(file_path)
|
106
|
+
UpdateRepoManagement.new(@config).import_compliance_policies(file_path)
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def validate_inputs(file_types, fixids)
|
112
|
+
msg = 'Invalid value for argument file_types. Allowed values are'\
|
113
|
+
+ ' - all and payloads'
|
114
|
+
raise msg unless %w(payloads all).include?(file_types)
|
115
|
+
msg = 'Parameter fixids should be of type Array'
|
116
|
+
raise msg unless fixids.kind_of?(Array)
|
117
|
+
raise msg if file_types == 'payloads' && !fixids.any?
|
118
|
+
end
|
119
|
+
|
120
|
+
def validate_file_name_dir_path(file_name, dir_path_for_download)
|
121
|
+
msg = 'Parameter file_name and dir_path_for_download,'\
|
122
|
+
+ 'should be of type String'
|
123
|
+
raise msg unless file_name.kind_of?(String)
|
124
|
+
dir = dir_path_for_download
|
125
|
+
msg = dir + ' directory doesnt exists'
|
126
|
+
raise msg unless File.directory?(dir)
|
127
|
+
end
|
128
|
+
|
129
|
+
def validate_file_path(file_path)
|
130
|
+
raise "file #{file_path} doesn't exists" unless File.file?(file_path)
|
131
|
+
end
|
32
132
|
end
|
33
133
|
end
|
@@ -6,13 +6,11 @@ module XClarityClient
|
|
6
6
|
|
7
7
|
def cancel_job(uuid='')
|
8
8
|
cancelReq = JSON.generate(cancelRequest: 'true')
|
9
|
-
|
10
|
-
response
|
9
|
+
@connection.do_put(managed_resource::BASE_URI + '/' + uuid, cancelReq)
|
11
10
|
end
|
12
11
|
|
13
12
|
def delete_job(uuid='')
|
14
|
-
|
15
|
-
response
|
13
|
+
@connection.do_delete(managed_resource::BASE_URI + '/' + uuid)
|
16
14
|
end
|
17
15
|
end
|
18
16
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module XClarityClient
|
4
|
+
# manage request management class
|
5
|
+
class ManageRequestManagement < Services::XClarityService
|
6
|
+
manages_endpoint ManageRequest
|
7
|
+
|
8
|
+
def manage_discovered_devices(manage_request)
|
9
|
+
@connection.do_post(ManageRequest::BASE_URI,
|
10
|
+
JSON.generate([manage_request]))
|
11
|
+
end
|
12
|
+
|
13
|
+
def populate_manage_req_with_security_descriptor(manage_request, val)
|
14
|
+
security_descriptor = {}
|
15
|
+
val = val['securityDescriptor']
|
16
|
+
security_descriptor[:managedAuthEnabled] = val['managedAuthSupported']
|
17
|
+
security_descriptor[:managedAuthSupported] = val['managedAuthSupported']
|
18
|
+
res = security_descriptor[:managedAuthEnabled]
|
19
|
+
security_descriptor[:storedCredentials] = val['storedCredentials'] if res
|
20
|
+
manage_request[:securityDescriptor] = security_descriptor
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_manage_request(manage_request, val)
|
24
|
+
return false unless val.kind_of?(Array) && !val.empty?
|
25
|
+
manage_request[:managementPorts] = val[0]['managementPorts']
|
26
|
+
manage_request[:type] = val[0]['type']
|
27
|
+
manage_request[:uuid] = val[0]['uuid']
|
28
|
+
discovery_ip_addr = val[0]['ipAddresses'][0]
|
29
|
+
manage_request[:ipAddresses] = [discovery_ip_addr]
|
30
|
+
manage_request[:os] = val[0]['os'] if val[0]['type'] == 'Rackswitch'
|
31
|
+
populate_manage_req_with_security_descriptor(manage_request, val[0])
|
32
|
+
end
|
33
|
+
|
34
|
+
def populate_manage_request_with_discovery_res(discovery_result,
|
35
|
+
manage_request)
|
36
|
+
discovery_result.map do |req|
|
37
|
+
req.instance_variables.each do |attr|
|
38
|
+
val = req.instance_variable_get(attr)
|
39
|
+
parse_manage_request(manage_request, val)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def update_manage_request(manage_request, force, discovery_result)
|
45
|
+
populate_manage_request_with_discovery_res(discovery_result,
|
46
|
+
manage_request)
|
47
|
+
manage_request[:forceManage] = true if force.casecmp('true')
|
48
|
+
end
|
49
|
+
|
50
|
+
def fetch_manage_request(job_id)
|
51
|
+
response = @connection.do_get(ManageRequest::BASE_URI + '/jobs/' + job_id)
|
52
|
+
return [] unless response.success?
|
53
|
+
body = JSON.parse(response.body)
|
54
|
+
body = { ManageRequest::LIST_NAME => body } if body.kind_of?(Array)
|
55
|
+
mrql = ManageRequest::LIST_NAME
|
56
|
+
body = { ManageRequest::LIST_NAME => [body] } unless body.key?(mrql)
|
57
|
+
body[ManageRequest::LIST_NAME].map do |resource_params|
|
58
|
+
ManageRequest.new(resource_params)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module XClarityClient
|
5
|
+
# ManagementServerManagement class
|
6
|
+
class ManagementServerManagement < Services::XClarityService
|
7
|
+
manages_endpoint ManagementServer
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def start_management_server_updates_import_job(file_type_dict, files, jobid)
|
12
|
+
url = "/files#{ManagementServer::BASE_URI}?action=import&jobid=#{jobid}"
|
13
|
+
index = 0
|
14
|
+
payload = {}
|
15
|
+
files.each do |file_name|
|
16
|
+
type = file_type_dict[File.extname(file_name)]
|
17
|
+
key = 'file_' + (index += 1).to_s
|
18
|
+
payload[key.to_sym] = Faraday::UploadIO.new(file_name, type)
|
19
|
+
end
|
20
|
+
@connection.do_post(url, payload, true)
|
21
|
+
end
|
22
|
+
|
23
|
+
def populate_payload_files(files, file_type_dict)
|
24
|
+
payload_files = []
|
25
|
+
index = 0
|
26
|
+
files.each do |file|
|
27
|
+
name = File.basename(file)
|
28
|
+
payload_file = { :index => index += 1, :name => name.strip,
|
29
|
+
:type => file_type_dict[File.extname(name)].strip,
|
30
|
+
:size => File.size?(file) }
|
31
|
+
payload_files.push(payload_file)
|
32
|
+
end
|
33
|
+
payload_files
|
34
|
+
end
|
35
|
+
|
36
|
+
public
|
37
|
+
|
38
|
+
def get_management_server_updates_info(key = nil)
|
39
|
+
base_url = ManagementServer::BASE_URI
|
40
|
+
url = key.nil? ? base_url : "#{base_url}?key=#{key}"
|
41
|
+
msg = "input key=#{key}"
|
42
|
+
$lxca_log.info(self.class.to_s + ' ' + __method__.to_s, msg)
|
43
|
+
@connection.do_get(url)
|
44
|
+
end
|
45
|
+
|
46
|
+
def download_management_server_updates(fixids)
|
47
|
+
url = "#{ManagementServer::BASE_URI}?action=acquire"
|
48
|
+
opts = { :fixids => fixids }
|
49
|
+
request_body = JSON.generate(opts)
|
50
|
+
@connection.do_post(url, request_body)
|
51
|
+
end
|
52
|
+
|
53
|
+
def import_management_server_updates(files)
|
54
|
+
url = "#{ManagementServer::BASE_URI}?action=import"
|
55
|
+
file_type_dict = { '.txt' => 'text/plain', '.xml' => 'text/xml',
|
56
|
+
'.chg' => 'application/octet-stream',
|
57
|
+
'.tgz' => 'application/x-compressed' }
|
58
|
+
payload_files = populate_payload_files(files, file_type_dict)
|
59
|
+
request_body = JSON.generate(:files => payload_files)
|
60
|
+
response = @connection.do_post(url, request_body)
|
61
|
+
jobid = JSON.parse(response.body)['jobid']
|
62
|
+
$lxca_log.info(self.class.to_s + ' ' + __method__.to_s, "jobid: #{jobid}")
|
63
|
+
start_management_server_updates_import_job(file_type_dict, files, jobid)
|
64
|
+
end
|
65
|
+
|
66
|
+
def apply_management_server_updates(fixids)
|
67
|
+
url = "#{ManagementServer::BASE_URI}?action=apply"
|
68
|
+
opts = { :fixids => fixids }
|
69
|
+
request_body = JSON.generate(opts)
|
70
|
+
@connection.do_put(url, request_body)
|
71
|
+
end
|
72
|
+
|
73
|
+
def delete_management_server_updates(fixids)
|
74
|
+
fixids = fixids.join(',')
|
75
|
+
url = "#{ManagementServer::BASE_URI}/#{fixids}"
|
76
|
+
@connection.do_delete(url)
|
77
|
+
end
|
78
|
+
|
79
|
+
def refresh_management_server_updates_catalog
|
80
|
+
url = "#{ManagementServer::BASE_URI}?action=refresh"
|
81
|
+
opts = { :mts => ['lxca'] }
|
82
|
+
request_body = JSON.generate(opts)
|
83
|
+
@connection.do_post(url, request_body)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -20,5 +20,51 @@ module XClarityClient
|
|
20
20
|
|
21
21
|
send_power_request(managed_resource::BASE_URI + '/' + uuid + '/bmc', requested_state)
|
22
22
|
end
|
23
|
+
|
24
|
+
def retrieve_mounted_media_details(uuid)
|
25
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
26
|
+
@connection.do_get(uri)
|
27
|
+
end
|
28
|
+
|
29
|
+
def enable_media_mount_support(uuid)
|
30
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
31
|
+
req_body = JSON.generate(:action => 'enableMountMedia')
|
32
|
+
@connection.do_put(uri, req_body)
|
33
|
+
end
|
34
|
+
|
35
|
+
def disable_media_mount_support(uuid)
|
36
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
37
|
+
req_body = JSON.generate(:action => 'disableMountMedia')
|
38
|
+
@connection.do_put(uri, req_body)
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_all_mounted_medias(uuid)
|
42
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
43
|
+
req_body = JSON.generate(:action => 'reset')
|
44
|
+
@connection.do_put(uri, req_body)
|
45
|
+
end
|
46
|
+
|
47
|
+
def mount_media(uuid, opts)
|
48
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
49
|
+
opts[:action] = 'mount'
|
50
|
+
req_body = JSON.generate(opts)
|
51
|
+
@connection.do_put(uri, req_body)
|
52
|
+
end
|
53
|
+
|
54
|
+
def unmount_media_thinkserver(uuid, media_type)
|
55
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
56
|
+
opts = { :action => 'unmount',
|
57
|
+
:mediaType => media_type }
|
58
|
+
req_body = JSON.generate(opts)
|
59
|
+
@connection.do_put(uri, req_body)
|
60
|
+
end
|
61
|
+
|
62
|
+
def unmount_media_thinksystem(uuid, media_uid)
|
63
|
+
uri = Node::BASE_URI + "/#{uuid}/" + 'mediaMount'
|
64
|
+
opts = { :action => 'unmount',
|
65
|
+
:UID => media_uid }
|
66
|
+
req_body = JSON.generate(opts)
|
67
|
+
@connection.do_put(uri, req_body)
|
68
|
+
end
|
23
69
|
end
|
24
70
|
end
|