xclarity_client 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/docs/apib/event.apib +11 -0
  3. data/docs/apib/update_repo.apib +56 -0
  4. data/lib/xclarity_client/configuration.rb +43 -19
  5. data/lib/xclarity_client/connection/connection.rb +45 -37
  6. data/lib/xclarity_client/endpoints/buildable_resource_mixin.rb +6 -1
  7. data/lib/xclarity_client/endpoints/globalsettings.rb +0 -5
  8. data/lib/xclarity_client/endpoints/hostplatform.rb +0 -4
  9. data/lib/xclarity_client/endpoints/osimage.rb +0 -4
  10. data/lib/xclarity_client/endpoints/remotefileserver.rb +0 -4
  11. data/lib/xclarity_client/mixins/event_mixin.rb +6 -0
  12. data/lib/xclarity_client/mixins/global_setting_mixin.rb +1 -1
  13. data/lib/xclarity_client/mixins/host_platform_mixin.rb +1 -1
  14. data/lib/xclarity_client/mixins/os_image_mixin.rb +1 -1
  15. data/lib/xclarity_client/mixins/remote_file_server_mixin.rb +1 -1
  16. data/lib/xclarity_client/mixins/update_repo_mixin.rb +23 -0
  17. data/lib/xclarity_client/schemas.rb +183 -194
  18. data/lib/xclarity_client/services/compliance_policy_management.rb +4 -6
  19. data/lib/xclarity_client/services/globalsettings_management.rb +8 -15
  20. data/lib/xclarity_client/services/hostplatform_management.rb +9 -18
  21. data/lib/xclarity_client/services/osimage_management.rb +12 -24
  22. data/lib/xclarity_client/services/remotefileserver_management.rb +13 -25
  23. data/lib/xclarity_client/services/update_repo_management.rb +58 -0
  24. data/lib/xclarity_client/services/xclarity_service.rb +27 -32
  25. data/lib/xclarity_client/version.rb +1 -1
  26. data/xclarity_client.gemspec +1 -0
  27. metadata +16 -2
@@ -1,194 +1,183 @@
1
- require 'json-schema'
2
-
3
- module XClarityClient
4
- class Schemas
5
- @remotefs = {
6
- "id" => "create_remotefileserver_profile",
7
- "type" => "object",
8
- "required" => %w(address displayName port protocol),
9
- "properties" => {
10
- "address" => {
11
- "type" => "string"
12
- },
13
- "displayName" => {
14
- "type" => "string"
15
- },
16
- "keyComment" => {
17
- "type" => "string"
18
- },
19
- "keyPassphras" => {
20
- "type" => "string"
21
- },
22
- "keyType" => {
23
- "type" => "string"
24
- },
25
- "password" => {
26
- "type" => "string"
27
- },
28
- "port" => {
29
- "type" => "integer"
30
- },
31
- "protocol" => {
32
- "type" => "string"
33
- },
34
- "serverId" => {
35
- "type" => "string"
36
- },
37
- "username" => {
38
- "type" => "string"
39
- }
40
- }
41
- }
42
-
43
- @hostplatforms = {
44
- "id" => "deploy_osimage",
45
- "type" => "array",
46
- "items" => {
47
- "type" => "object",
48
- "required" => %w(networkSettings selectedImage storageSettings uuid),
49
- "properties" => {
50
- "adusername" => {
51
- "type" => "string"
52
- },
53
- "adpassword" => {
54
- "type" => "string"
55
- },
56
- "configFileId" => {
57
- "type" => "string"
58
- },
59
- "licenseKey" => {
60
- "type" => "string"
61
- },
62
- "selectedImage" => {
63
- "type" => "string"
64
- },
65
- "storageSettings" => {
66
- "type" => "object"
67
- },
68
- "unattendFileId" => {
69
- "type" => "string"
70
- },
71
- "uuid" => {
72
- "type" => "string"
73
- },
74
- "windowsDomain" => {
75
- "type" => "string"
76
- },
77
- "windowsDomainBlob" => {
78
- "type" => "string"
79
- },
80
- "networkSettings" => {
81
- "type" => "object",
82
- "properties" => {
83
- "dns1" => {
84
- "type" => "string"
85
- },
86
- "dns2" => {
87
- "type" => "string"
88
- },
89
- "gateway" => {
90
- "type" => "string"
91
- },
92
- "hostname" => {
93
- "type" => "string"
94
- },
95
- "ipAddress" => {
96
- "type" => "string"
97
- },
98
- "mtu" => {
99
- "type" => "integer"
100
- },
101
- "prefixLength" => {
102
- "type" => "string"
103
- },
104
- "selectedMAC" => {
105
- "type" => "string"
106
- },
107
- "vlanId" => {
108
- "type" => "string"
109
- }
110
- }
111
- }
112
- }
113
- }
114
- }
115
-
116
- @globalsettings = {
117
- "id" => "set_globalsettings",
118
- "type" => "object",
119
- "required" => %w(activeDirectory
120
- ipAssignment
121
- isVLANMode
122
- licenseKeys
123
- credentials),
124
- "properties" => {
125
- "activeDirectory" => {
126
- "type" => "object"
127
- },
128
- "ipAssignment" => {
129
- "type" => "string"
130
- },
131
- "isVLANMode" => {
132
- "type" => "boolean"
133
- },
134
- "licenseKeys" => {
135
- "type" => "object"
136
- },
137
- "deploySettings" => {
138
- "type" => "string"
139
- },
140
- "credentials" => {
141
- "type" => "array",
142
- "items" => {
143
- "type" => "object",
144
- "required" => %w(type name password passwordChanged),
145
- "properties" => {
146
- "type" => {
147
- "type" => "string"
148
- },
149
- "name" => {
150
- "type" => "string"
151
- },
152
- "password" => {
153
- "type" => "string"
154
- },
155
- "passwordChanged" => {
156
- "type" => "boolean"
157
- }
158
- }
159
- }
160
- }
161
- }
162
- }
163
-
164
- REQ_SCHEMA = {
165
- 'deploy_osimage' => @hostplatforms,
166
- 'set_globalsettings' => @globalsettings,
167
- 'create_remotefileserver_profile' => @remotefs
168
- }.freeze
169
-
170
- def self.validate_input(schema_name, data)
171
- x = JSON::Validator.fully_validate(Schemas::REQ_SCHEMA[schema_name], data)
172
- if !x.empty?
173
- errmsg = "input validation failed for data #{data}"
174
- $lxca_log.error(errmsg, '')
175
- x.each { |k| $lxca_log.error(k, '') }
176
- return nil
177
- else
178
- return 1
179
- end
180
- end
181
-
182
- # parameter name should be string
183
- def self.validate_input_parameter(name, value, exp_type)
184
- if !value.kind_of?(exp_type)
185
- errmsg = "invalid #{name} #{value},"\
186
- " expected #{name} of type #{exp_type}"
187
- $lxca_log.error(errmsg, '')
188
- return nil
189
- else
190
- return 1
191
- end
192
- end
193
- end
194
- end
1
+ require 'json-schema'
2
+
3
+ module XClarityClient
4
+ class Schemas
5
+ @remotefs = {
6
+ "id" => "create_remotefileserver_profile",
7
+ "type" => "object",
8
+ "required" => %w(address displayName port protocol),
9
+ "properties" => {
10
+ "address" => {
11
+ "type" => "string"
12
+ },
13
+ "displayName" => {
14
+ "type" => "string"
15
+ },
16
+ "keyComment" => {
17
+ "type" => "string"
18
+ },
19
+ "keyPassphras" => {
20
+ "type" => "string"
21
+ },
22
+ "keyType" => {
23
+ "type" => "string"
24
+ },
25
+ "password" => {
26
+ "type" => "string"
27
+ },
28
+ "port" => {
29
+ "type" => "integer"
30
+ },
31
+ "protocol" => {
32
+ "type" => "string"
33
+ },
34
+ "serverId" => {
35
+ "type" => "string"
36
+ },
37
+ "username" => {
38
+ "type" => "string"
39
+ }
40
+ }
41
+ }
42
+
43
+ @hostplatforms = {
44
+ "id" => "deploy_osimage",
45
+ "type" => "array",
46
+ "items" => {
47
+ "type" => "object",
48
+ "required" => %w(networkSettings selectedImage storageSettings uuid),
49
+ "properties" => {
50
+ "adusername" => {
51
+ "type" => "string"
52
+ },
53
+ "adpassword" => {
54
+ "type" => "string"
55
+ },
56
+ "configFileId" => {
57
+ "type" => "string"
58
+ },
59
+ "licenseKey" => {
60
+ "type" => "string"
61
+ },
62
+ "selectedImage" => {
63
+ "type" => "string"
64
+ },
65
+ "storageSettings" => {
66
+ "type" => "object"
67
+ },
68
+ "unattendFileId" => {
69
+ "type" => "string"
70
+ },
71
+ "uuid" => {
72
+ "type" => "string"
73
+ },
74
+ "windowsDomain" => {
75
+ "type" => "string"
76
+ },
77
+ "windowsDomainBlob" => {
78
+ "type" => "string"
79
+ },
80
+ "networkSettings" => {
81
+ "type" => "object",
82
+ "properties" => {
83
+ "dns1" => {
84
+ "type" => "string"
85
+ },
86
+ "dns2" => {
87
+ "type" => "string"
88
+ },
89
+ "gateway" => {
90
+ "type" => "string"
91
+ },
92
+ "hostname" => {
93
+ "type" => "string"
94
+ },
95
+ "ipAddress" => {
96
+ "type" => "string"
97
+ },
98
+ "mtu" => {
99
+ "type" => "integer"
100
+ },
101
+ "prefixLength" => {
102
+ "type" => "integer"
103
+ },
104
+ "selectedMAC" => {
105
+ "type" => "string"
106
+ },
107
+ "vlanId" => {
108
+ "type" => "integer"
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
115
+
116
+ @globalsettings = {
117
+ "id" => "set_globalsettings",
118
+ "type" => "object",
119
+ "required" => %w(activeDirectory
120
+ ipAssignment
121
+ isVLANMode
122
+ licenseKeys
123
+ credentials),
124
+ "properties" => {
125
+ "activeDirectory" => {
126
+ "type" => "object"
127
+ },
128
+ "ipAssignment" => {
129
+ "type" => "string"
130
+ },
131
+ "isVLANMode" => {
132
+ "type" => "boolean"
133
+ },
134
+ "licenseKeys" => {
135
+ "type" => "object"
136
+ },
137
+ "deploySettings" => {
138
+ "type" => "string"
139
+ },
140
+ "credentials" => {
141
+ "type" => "array",
142
+ "items" => {
143
+ "type" => "object",
144
+ "required" => %w(type name password passwordChanged),
145
+ "properties" => {
146
+ "type" => {
147
+ "type" => "string"
148
+ },
149
+ "name" => {
150
+ "type" => "string"
151
+ },
152
+ "password" => {
153
+ "type" => "string"
154
+ },
155
+ "passwordChanged" => {
156
+ "type" => "boolean"
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ REQ_SCHEMA = {
165
+ :deploy_osimage => @hostplatforms,
166
+ :set_globalsettings => @globalsettings,
167
+ :create_remotefileserver_profile => @remotefs
168
+ }.freeze
169
+
170
+ def self.validate_input(schema_name, data)
171
+ x = JSON::Validator.fully_validate(self::REQ_SCHEMA[schema_name], data)
172
+ unless x.empty?
173
+ errmsg = "input validation failed for data #{data}"
174
+ $lxca_log.error('XClarityClient::Schemas validate_input', errmsg.to_s)
175
+ g = ''
176
+ x.each do |k|
177
+ $lxca_log.error('XClarityClient::Schemas validate_input', k)
178
+ g << "#{k}, "
179
+ end; return { :result => 'Input validation failed', :message => g }
180
+ end; return { :result => 'success' }
181
+ end
182
+ end
183
+ end
@@ -17,10 +17,8 @@ module XClarityClient
17
17
  end
18
18
 
19
19
  def get_update_policy(uri, opts = {})
20
- query = opts
21
- response = @connection.do_get(uri, query)
22
- build_response_with_resource_list(response, managed_resource)
23
- end
20
+ fetch_all(opts, uri)
21
+ end
24
22
 
25
23
  def assign_compliance_policy(opts = {}, keep, auto_assign)
26
24
  assign_hash = {:policyname => opts["policyname"], :type => opts["type"], :uuid => opts["uuid"]}
@@ -37,14 +35,14 @@ module XClarityClient
37
35
 
38
36
  assign_hash_str = assign_hash.to_json
39
37
  response = @connection.do_post(managed_resource::SUB_URIS[:compareResult], "{\"compliance\": [#{assign_hash_str}]}")
40
- puts response.body
38
+ response.body
41
39
  end
42
40
 
43
41
  def delete_compliance_policy(policy_name,removePackage)
44
42
  query = policy_name.nil? ? "" : "?policyName=" + policy_name
45
43
  query = removePackage.nil? ? query : query + "&removePackage=" + removePackage
46
44
  response = @connection.do_delete(managed_resource::BASE_URI + query)
47
- puts response.body
45
+ response.body
48
46
  end
49
47
 
50
48
  end
@@ -2,24 +2,17 @@ require 'json'
2
2
  require 'pathname'
3
3
 
4
4
  module XClarityClient
5
- class GlobalSettingManagement < XClarityBase
6
-
7
- include XClarityClient::ManagementMixin
8
-
9
- def initialize(conf)
10
- super(conf, GlobalSetting::BASE_URI)
11
- end
12
-
13
- def population
14
- response = connection("#{GlobalSetting::BASE_URI}")
15
- response = JSON.parse(response.body)
16
- end
5
+ class GlobalSettingManagement < Services::XClarityService
6
+ manages_endpoint GlobalSetting
17
7
 
18
8
  def set_globalsettings(opts={})
19
9
  request_body = JSON.generate(opts)
20
- if Schemas.validate_input("set_globalsettings", request_body)
21
- response = do_put("#{GlobalSetting::BASE_URI}", request_body)
22
- response = JSON.parse(response.body)
10
+ res = Schemas.validate_input(:set_globalsettings, request_body)
11
+ if res[:result] == 'success'
12
+ response = @connection.do_put("#{GlobalSetting::BASE_URI}",
13
+ request_body)
14
+ else
15
+ res
23
16
  end
24
17
  end
25
18
  end
@@ -2,30 +2,21 @@ require 'json'
2
2
  require 'pathname'
3
3
 
4
4
  module XClarityClient
5
- class HostPlatformManagement < XClarityBase
6
-
7
- include XClarityClient::ManagementMixin
8
-
9
- def initialize(conf)
10
- super(conf, HostPlatform::BASE_URI)
11
- end
12
-
13
- def population
14
- get_all_resources(HostPlatform)
15
- end
5
+ class HostPlatformManagement < Services::XClarityService
6
+ manages_endpoint HostPlatform
16
7
 
17
8
  def get_osimage_deployment_status(uuid)
18
- if Schemas.validate_input_parameter("uuid", uuid, String)
19
- response = connection("#{HostPlatform::BASE_URI}/#{uuid}")
20
- response = JSON.parse(response.body)
21
- end
9
+ response = @connection.do_get("#{HostPlatform::BASE_URI}/#{uuid}")
22
10
  end
23
11
 
24
12
  def deploy_osimage(opts=[])
25
13
  request_body = JSON.generate(opts)
26
- if Schemas.validate_input("deploy_osimage", request_body)
27
- response = do_put("#{HostPlatform::BASE_URI}", request_body)
28
- response = JSON.parse(response.body)
14
+ res = Schemas.validate_input(:deploy_osimage, request_body)
15
+ if res[:result] == 'success'
16
+ response = @connection.do_put("#{HostPlatform::BASE_URI}",
17
+ request_body)
18
+ else
19
+ res
29
20
  end
30
21
  end
31
22
  end
@@ -2,43 +2,31 @@ require 'json'
2
2
  require 'pathname'
3
3
 
4
4
  module XClarityClient
5
- class OsImageManagement < XClarityBase
6
-
7
- include XClarityClient::ManagementMixin
8
-
9
- def initialize(conf)
10
- super(conf, OsImage::BASE_URI)
11
- end
12
-
13
- def population
14
- get_all_resources(OsImage)
15
- end
5
+ class OsImageManagement < Services::XClarityService
6
+ manages_endpoint OsImage
16
7
 
17
8
  def import_osimage(server_id, path)
18
- return unless Schemas.validate_input_parameter("serverId", server_id, String) ||
19
- Schemas.validate_input_parameter("path", path, String)
20
-
21
9
  msg="inputs serverId=#{server_id},path=#{path}"
22
10
  $lxca_log.info self.class.to_s+" "+__method__.to_s, msg
23
11
  opts = { :Action => "Init" }
24
12
  request_body = JSON.generate(opts)
25
- response = do_post("#{OsImage::BASE_URI}?imageType=OS", request_body)
13
+ response = @connection.do_post("#{OsImage::BASE_URI}?imageType=OS",
14
+ request_body)
26
15
  response = JSON.load(response.body).to_hash
27
16
  job_id = response["jobId"]
28
17
  opts = { :serverId => server_id, :path => path }
29
18
  request_body = JSON.generate(opts)
30
19
  image_name = path.split(File::SEPARATOR).last
31
20
  begin
32
- response = do_post(
33
- "#{OsImage::BASE_URI}/?jobId=#{job_id}&imageType=OS&imageName=#{image_name}",
34
- request_body
35
- )
36
- JSON.parse(response.body)
21
+ response = @connection.do_post("#{OsImage::BASE_URI}?jobId=#{job_id}"\
22
+ "&imageType=OS&imageName=#{image_name}",
23
+ request_body)
24
+ response
37
25
  rescue Faraday::TimeoutError => e
38
- result = JSON.generate(
39
- :result => " Job for importing image is in progress with jobId #{job_id}"
40
- )
41
- JSON.parse(result)
26
+ result = {
27
+ :result => "importing image is in progress with jobId #{job_id}"
28
+ }
29
+ result
42
30
  end
43
31
  end
44
32
  end
@@ -1,41 +1,29 @@
1
1
  require 'json'
2
2
 
3
3
  module XClarityClient
4
- class RemoteFileServerManagement < XClarityBase
5
-
6
- include XClarityClient::ManagementMixin
7
-
8
- def initialize(conf)
9
- super(conf, RemoteFileServer::BASE_URI)
10
- end
11
-
12
- def population
13
- get_all_resources(RemoteFileServer)
14
- end
4
+ class RemoteFileServerManagement < Services::XClarityService
5
+ manages_endpoint RemoteFileServer
15
6
 
16
7
  def create_remotefileserver_profile(opts)
17
8
  request_body = JSON.generate(opts)
18
- if Schemas.validate_input("create_remotefileserver_profile", request_body)
19
- response = do_post(RemoteFileServer::BASE_URI, request_body)
20
- msg = "remote file server profile created #{response.body}"
21
- $lxca_log.info self.class.to_s+" "+__method__.to_s, msg
22
- response = JSON.parse(response.body)
9
+ res = Schemas.validate_input(:create_remotefileserver_profile,
10
+ request_body)
11
+ if res[:result] == 'success'
12
+ response = @connection.do_post(RemoteFileServer::BASE_URI,
13
+ request_body)
14
+ else
15
+ res
23
16
  end
24
17
  end
25
18
 
26
19
  def delete_remotefileserver_profile(serverId)
27
- if not Schemas.validate_input_parameter("serverId", serverId, String)
28
- return
29
- end
30
- response = do_delete("#{RemoteFileServer::BASE_URI}/#{serverId}")
31
- response = JSON.parse(response.body)
20
+ response = @connection.do_delete("#{RemoteFileServer::BASE_URI}/"\
21
+ "#{serverId}")
32
22
  end
33
23
 
34
24
  def get_remotefileserver_profile(serverId)
35
- if Schemas.validate_input_parameter("serverId", serverId, String)
36
- response = connection("#{RemoteFileServer::BASE_URI}/#{serverId}")
37
- response = JSON.parse(response.body)
38
- end
25
+ response = @connection.do_get("#{RemoteFileServer::BASE_URI}/"\
26
+ "#{serverId}")
39
27
  end
40
28
  end
41
29
  end
@@ -33,5 +33,63 @@ module XClarityClient
33
33
  updatesByMtByComp
34
34
  )
35
35
  end
36
+
37
+ public
38
+
39
+ def check_file_types(file_types)
40
+ x = 'Invalid value for argument file_types. Allowed values are'\
41
+ + ' - all and payloads'
42
+ raise x unless file_types.casecmp('payloads').zero? ||
43
+ file_types.casecmp('all').zero?
44
+ end
45
+
46
+ def read_update_repo
47
+ response = @connection.do_put(UpdateRepo::BASE_URI + '?action=read')
48
+ response.body
49
+ end
50
+
51
+ def refresh_update_repo(scope, mt, os)
52
+ if scope.casecmp('all') != 0 && scope.casecmp('latest') != 0
53
+ raise 'Invalid argument combination of action and scope. Action'\
54
+ + ' refresh can have scope as either all or latest'
55
+ end
56
+ refresh_req = JSON.generate(:mt => mt, :os => os, :type => 'catalog')
57
+ response = @connection.do_put(UpdateRepo::BASE_URI\
58
+ + '?action=refresh&with='\
59
+ + scope.downcase, refresh_req)
60
+ response.body
61
+ end
62
+
63
+ def acquire_firmware_updates(scope, fixids, mt)
64
+ if scope.casecmp('payloads') != 0
65
+ raise 'Invalid argument combination of action and scope. Action'\
66
+ + ' acquire can have scope as payloads'
67
+ end
68
+ acquire_req = JSON.generate(:mt => mt, :fixids => fixids,
69
+ :type => 'latest')
70
+ response = @connection.do_put(UpdateRepo::BASE_URI\
71
+ + '?action=acquire&with='\
72
+ + scope.downcase, acquire_req)
73
+ response.body
74
+ end
75
+
76
+ def delete_firmware_updates(file_types, fixids)
77
+ check_file_types(file_types)
78
+ delete_req = JSON.generate(:fixids => fixids)
79
+ response = @connection.do_put(UpdateRepo::BASE_URI + '?action='\
80
+ + 'delete&filetypes=' + file_types.downcase,
81
+ delete_req)
82
+ response.body
83
+ end
84
+
85
+ def export_firmware_updates(file_types, fixids)
86
+ check_file_types(file_types)
87
+
88
+ export_req = JSON.generate(:fixids => fixids)
89
+ response = @connection.do_put(UpdateRepo::BASE_URI\
90
+ + '?action=export&filetypes='\
91
+ + file_types.downcase, export_req)
92
+ response.body
93
+ end
36
94
  end
37
95
  end