brocade_api_client 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :console do
5
+ exec 'irb -r brocade_api_client -I ./lib'
6
+ end
7
+
8
+ namespace :build do
9
+ begin
10
+ require 'rspec/core/rake_task'
11
+
12
+ RSpec::Core::RakeTask.new(:spec) do |t|
13
+ puts '', 'RSpec Task started....'
14
+ t.pattern = Dir.glob('spec/**/*_spec.rb')
15
+ t.rspec_opts = '--format html --out test_reports/rspec_results.html'
16
+ t.fail_on_error = true
17
+ end
18
+
19
+ task default: :spec
20
+ rescue LoadError => e
21
+ # no rspec available
22
+ puts "(#{e.message})"
23
+ end
24
+
25
+ begin
26
+ require 'rubocop/rake_task'
27
+ desc 'Run RuboCop - Ruby static code analyzer'
28
+ RuboCop::RakeTask.new(:rubocop) do |task|
29
+ puts '', 'Rubocop Task started....'
30
+ # task.patterns = ['lib/**/*.rb']
31
+ task.fail_on_error = false
32
+ task.formatters = ['simple']
33
+ task.options = ['--out', 'rubocop_report.txt']
34
+ end
35
+ rescue LoadError => e
36
+ puts "(#{e.message})"
37
+ end
38
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'brocadeapi_client'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,45 @@
1
+ #
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
5
+ #
6
+ # Unless required by applicable law or agreed to in writing,
7
+ # software distributed
8
+ # under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9
+ # CONDITIONS OF ANY KIND, either express or implied. See the License for the
10
+ # specific language governing permissions and limitations under the License.
11
+
12
+ lib = File.expand_path('lib', __dir__)
13
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
14
+ require 'BrocadeAPIClient/version'
15
+
16
+ Gem::Specification.new do |spec|
17
+ spec.name = 'brocade_api_client'
18
+ spec.version = BrocadeAPIClient::VERSION
19
+ spec.authors = ['raldi87']
20
+ spec.email = ['dima.radu.lucian@gmail.com']
21
+
22
+ spec.summary = 'Brocade Network Advisor REST API Client'
23
+ spec.description = 'This gem is used query to Brocade Network Advisor via API'
24
+ spec.homepage = 'https://github.com/raldi87/brocadeapi_client'
25
+ spec.license = 'Apache-2.0'
26
+
27
+ # Specify which files should be added to the gem when it is released.
28
+ # The git ls-files -z
29
+ # loads the files in the RubyGem that have been added into git.
30
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
31
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
32
+ end
33
+ spec.bindir = 'exe'
34
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
+ spec.require_paths = ['lib']
36
+
37
+ spec.required_ruby_version = '~> 2.3.0'
38
+ spec.add_development_dependency 'bundler', '~> 1.16'
39
+ spec.add_development_dependency 'rake', '~> 10.0'
40
+ spec.add_development_dependency 'rspec', '~> 3.0'
41
+ spec.add_development_dependency 'rubocop', '~> 0.66'
42
+ spec.add_development_dependency 'sinatra', '~> 2.0', '>= 2.0.3'
43
+ spec.add_development_dependency 'webmock', '~> 3.5', '>= 3.5.1'
44
+ spec.add_runtime_dependency 'httparty', '~> 0.16.4'
45
+ end
@@ -0,0 +1,47 @@
1
+ # Licensed under the Apache License, Version 2.0 (the "License");
2
+ # you may not use this file except in compliance with the License.
3
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ #
5
+ # Unless required by applicable law or agreed to in writing,
6
+ # software distributed
7
+ # under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, either express or implied. See the License for the
9
+ # specific language governing permissions and limitations under the License.
10
+ require_relative 'exceptions'
11
+ module BrocadeAPIClient
12
+ # Class for checking supported API versions
13
+ class APIVersion
14
+ attr_accessor :major, :minor, :patch
15
+ include Comparable
16
+ def initialize(major, minor, patch)
17
+ @major = major
18
+ @minor = minor
19
+ @patch = patch
20
+ end
21
+
22
+ def <=>(other)
23
+ return -1 if major < other.major
24
+ return 1 if major > other.major
25
+ return -1 if minor < other.minor
26
+ return 1 if minor > other.minor
27
+ return -1 if patch < other.patch
28
+ return 1 if patch > other.patch
29
+
30
+ 0
31
+ end
32
+
33
+ def self.validate(version)
34
+ raise BrocadeAPIClient::InvalidVersion if version.length != 3
35
+ end
36
+
37
+ def self.parser(version)
38
+ version_array = version.split('.')
39
+ validate(version_array)
40
+ @major = version_array[0].to_i
41
+ @minor = version_array[1].to_i
42
+ @patch = version_array[2].to_i
43
+ obj_v = APIVersion.new(@major, @minor, @patch)
44
+ obj_v
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,533 @@
1
+ # Licensed under the Apache License, Version 2.0 (the "License");
2
+ # you may not use this file except in compliance with the License.
3
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ #
5
+ # Unless required by applicable law or agreed to in writing,
6
+ # software distributed
7
+ # under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, either express or implied. See the License for the
9
+ # specific language governing permissions and limitations under the License.
10
+ require_relative 'httpclient'
11
+ require_relative 'fabrics'
12
+ require_relative 'switches'
13
+ require_relative 'ports'
14
+ require_relative 'zones'
15
+ require_relative 'exceptions'
16
+ require_relative 'apiversion'
17
+ require_relative 'static'
18
+ require_relative 'events'
19
+
20
+ module BrocadeAPIClient
21
+ # Class for connecting to BNA
22
+ class Client
23
+ @http = nil
24
+ attr_reader :http, :logger
25
+ def initialize(api_url, debug: false, secure: false, app_type: 'ruby_brocade', enable_logger: nil, log_file_path: nil)
26
+ unless api_url.is_a?(String)
27
+ raise BrocadeAPIClient::BrocadeException.new(nil,
28
+ "'api_url' parameter is mandatory and should be of type String")
29
+ end
30
+ @api_url = api_url
31
+ @debug = debug
32
+ @secure = secure
33
+ @log_level = Logger::INFO
34
+ @enable_logger = enable_logger
35
+ @client_logger = nil
36
+ @log_file_path = log_file_path
37
+ init_log
38
+ @http = JSONRestClient.new(
39
+ @api_url, @secure, @debug,
40
+ @client_logger
41
+ )
42
+ @fabrics = Fabrics.new(@http)
43
+ @switches = Switches.new(@http)
44
+ @ports = Ports.new(@http)
45
+ @zones = Zones.new(@http)
46
+ @events = Events.new(@http)
47
+ @app_type = app_type
48
+ @peer_zone_support = false
49
+ end
50
+
51
+ def login(username, password, options = nil)
52
+ # Authenticate on the Brocade Network Advisor API
53
+ login_info = @http.authenticate(username, password, options)
54
+ api_v = APIVersion.parser(login_info['version'])
55
+ min_api_version = APIVersion.parser(BrocadeAPIClient::BNASupport::BNA_MIN_SUPPORTED)
56
+ min_peerzoning_version = APIVersion.parser(BrocadeAPIClient::BNASupport::BNA_PEER_ZONING_TDZ_MIN_SUPPORTED)
57
+ raise BrocadeAPIClient::UnsupportedVersion if api_v < min_api_version
58
+
59
+ @peer_zone_support = true if api_v >= min_peerzoning_version
60
+ end
61
+
62
+ def logout
63
+ # Delete Session on REST API
64
+ @http.unauthenticate
65
+ end
66
+
67
+ # Get All networks
68
+ #
69
+ #
70
+ # ==== Returns
71
+ # Hash with value as
72
+ # Array of Networks (FC + IP)
73
+ def resourcegroups
74
+ result = @http.get('/resourcegroups')
75
+ result[1]
76
+ end
77
+
78
+ # Get All FC Fabrics
79
+ #
80
+ #
81
+ # ==== Returns
82
+ # Hash with value as
83
+ # Array of Fabrics - Details of the ALL fabrics
84
+ def fabrics
85
+ # API GET for fabrics
86
+ result = @fabrics.fabrics
87
+ result[1]
88
+ end
89
+
90
+ # Get FC Fabric Information based on Fabric ID
91
+ #
92
+ # fabricID = string containing fabricID , ex '10:00:00:00:00:00'
93
+ # ==== Returns
94
+ #
95
+ # Hash - Details of the specified fabric
96
+ def fabric(fabricid)
97
+ result = @fabrics.fabric(fabricid)
98
+ result[1]
99
+ end
100
+
101
+ # Get FC switches members of a specific Fabric ID
102
+ #
103
+ # fabricID = string containing fabricID , ex '10:00:00:00:00:00'
104
+ # ==== Returns
105
+ #
106
+ # Hash - with Value Array with all the switches part of fabricID
107
+ def fabricswitches(fabricid)
108
+ result = @switches.fabricswitches(fabricid)
109
+ result[1]
110
+ end
111
+
112
+ # Get ALL FC Swiches in the Brocade Network Advisor
113
+ #
114
+ #
115
+ # ==== Returns
116
+ #
117
+ # Hash - Key fcswitches and Value of all the switches in BNA
118
+ def allswitches
119
+ result = @switches.allswitches
120
+ result[1]
121
+ end
122
+
123
+ # Get ALL FC Ports in the Brocade Network Advisor
124
+ #
125
+ #
126
+ # ==== Returns
127
+ #
128
+ # Hash - Key fcports , Value of all the ports in BNA
129
+ def allports
130
+ result = @ports.allports
131
+ result[1]
132
+ end
133
+
134
+ # Change port states for on FC switch(non-persistent)
135
+ # Input:
136
+ # switchWWN - switch WWN (it can be retrived using the Switches method)
137
+ # portWWNs - Multiple PortWWN in the same switch that should be changed
138
+ # state - 'disabled|enable'
139
+ #
140
+ # ==== Returns
141
+ #
142
+ # Hash - Key fcPortStateChangeResponseEntry , Value Array of Hashes with all ports changed
143
+ def change_portstates(switchwwn, state, *portwwns)
144
+ result = @ports.change_portstates(switchwwn, state, *portwwns)
145
+ result[1]
146
+ end
147
+
148
+ # Change port states for on FC switch(persistent)
149
+ # Input:
150
+ # switchWWN - switch WWN (it can be retrived using the Switches method)
151
+ # portWWNs - Multiple PortWWN in same switch that should be changed
152
+ # state - 'disabled|enable'
153
+ #
154
+ # ==== Returns
155
+ #
156
+ # Hash - Key fcPortStateChangeResponseEntry , Value Array of Hashes with all ports changed
157
+ def change_persistentportstates(switchwwn, state, *portwwns)
158
+ result = @ports.change_persistentportstates(switchwwn, state, *portwwns)
159
+ result[1]
160
+ end
161
+
162
+ # Set Port Name for a specified port
163
+ # Input:
164
+ # the resource method(ussualy the of the Fabric)
165
+ # switchWWN - switch WWN (it can be retrived using the Switches method)
166
+ # portWWN - Port WWN
167
+ # portNames - the name for the PortName
168
+ #
169
+ # ==== Returns
170
+ #
171
+ # Hash - Key fcPortStateChangeResponseEntry , Value Array of Hashes with all ports changed
172
+ def set_portname(switchwwn, portwwns, portname)
173
+ result = @ports.set_portname(switchwwn, portwwns, portname)
174
+ result[1]
175
+ end
176
+
177
+ # Get all Zones in a Fabric(both active and defined)
178
+ # Input:
179
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
180
+ #
181
+ # ==== Returns
182
+ #
183
+ # Hash - Key zones , Value Array of Hashes with all zones
184
+ def zoneshow_all(fabrickey)
185
+ result = @zones.zoneshow(fabrickey, 'all')
186
+ result[1]
187
+ end
188
+
189
+ # Get all Zones in a Fabric(active)
190
+ # Input:
191
+ # fabrickey - fabric key WWN(it can be retrived
192
+ # using the fabrics methond
193
+ #
194
+ # ==== Returns
195
+ #
196
+ # Hash - Key zones , Value Array of Hashes with all zones
197
+ def zoneshow_all_active(fabrickey)
198
+ result = @zones.zoneshow(fabrickey, 'active')
199
+ result[1]
200
+ end
201
+
202
+ # Get all Zones in a Fabric( defined)
203
+ # Input:
204
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
205
+ #
206
+ # ==== Returns
207
+ #
208
+ # Hash - Key zones , Value Array of Hashes with all zones
209
+ def zoneshow_all_defined(fabrickey)
210
+ result = @zones.zoneshow(fabrickey, 'defined')
211
+ result[1]
212
+ end
213
+
214
+ # Get INFO about active zone in a Fabric( defined)
215
+ # Input:
216
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
217
+ # zonename - string containing the zone name
218
+ # ==== Returns
219
+ #
220
+ # Hash - Key zones , Value Array of Hashes with all zones
221
+ def zoneshow_active(fabrickey, zonename)
222
+ result = @zones.zoneshow(fabrickey, 'active', zonename)
223
+ result[1]
224
+ end
225
+
226
+ # Get INFO about a defined zone in a Fabric( defined)
227
+ # Input:
228
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
229
+ # zonename - string containing the zone name
230
+ # ==== Returns
231
+ #
232
+ # Hash - Key zones , Value Array of Hashes with all zones
233
+ def zoneshow_defined(fabrickey, zonename)
234
+ result = @zones.zoneshow(fabrickey, 'defined', zonename)
235
+ result[1]
236
+ end
237
+
238
+ # Create standard zone
239
+ # Input:
240
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
241
+ # zonename - string containing the zone name
242
+ # *aliases - list of aliases to be added in the zone
243
+ # ==== Returns
244
+ #
245
+ # Hash - Key zones , Value Array of Hashes with all zones
246
+ def zonecreate_standard(fabrickey, zonename, *aliases)
247
+ result = @zones.zonecreate_standard(fabrickey, zonename, *aliases)
248
+ result[1]
249
+ end
250
+
251
+ # Create Peerzone
252
+ # Input:
253
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
254
+ # zonename - string containing the zone name
255
+ # *aliases - list of aliases to be added in the zone
256
+ # ==== Returns
257
+ #
258
+ # Hash - Key zones , Value Array of Hashes with all zones
259
+ def zonecreate_peerzone(fabrickey, zonename, **members)
260
+ raise BrocadeAPIClient::UnsupportedVersion unless @peer_zone_support
261
+
262
+ result = @zones.zonecreate_peerzone(fabrickey, zonename, **members)
263
+ result[1]
264
+ end
265
+
266
+ # Delete Zones from defined configuration
267
+ # Input:
268
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
269
+ # *zonenames - a list of zones to be delete
270
+ # ==== Returns
271
+ #
272
+ # status of request
273
+ def zonedelete(fabrickey, *zonenames)
274
+ result = @zones.zonedelete(fabrickey, *zonenames)
275
+ result[1]
276
+ end
277
+
278
+ # Add aliases to standard zone
279
+ # Input:
280
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
281
+ # *aliasnames - a list of zones to be delete
282
+ # ==== Returns
283
+ #
284
+ # status of request
285
+ def zoneadd_standard(fabrickey, zonename, *aliases)
286
+ result = @zones.alterzoning_standard(fabrickey, 'ADD', zonename, *aliases)
287
+ result[1]
288
+ end
289
+
290
+ # Add aliases to standard zone
291
+ # Input:
292
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
293
+ # *aliasnames - a list of zones to be delete
294
+ # ==== Returns
295
+ #
296
+ # status of request
297
+ def zoneremove_standard(fabrickey, zonename, *aliases)
298
+ result = @zones.alterzoning_standard(fabrickey, 'REMOVE', zonename, *aliases)
299
+ result[1]
300
+ end
301
+
302
+ # Add aliases to standard zone
303
+ # Input:
304
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
305
+ # **wwns - hash with principal and members as keys and values as an array of wwns
306
+ # ==== Returns
307
+ #
308
+ # status of request
309
+ def zoneadd_peerzone(fabrickey, zonename, **wwns)
310
+ result = @zones.alterzoning_peerzone(fabrickey, 'ADD', zonename, **wwns)
311
+ result[1]
312
+ end
313
+
314
+ # Remove members/principal from peerzone
315
+ # Input:
316
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
317
+ # **wwns - hash with principal and members as keys and values as an array of wwns
318
+ # ==== Returns
319
+ #
320
+ # status of request
321
+ def zoneremove_peerzone(fabrickey, zonename, **wwns)
322
+ result = @zones.alterzoning_peerzone(fabrickey, 'REMOVE', zonename, **wwns)
323
+ result[1]
324
+ end
325
+
326
+ # Get Zone DB in a fabric(active and defined)
327
+ # Input:
328
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
329
+ #
330
+ # ==== Returns
331
+ #
332
+ # Hash - Key zones , Value Array of Hashes with all zones
333
+ def zonedbs(fabrickey)
334
+ result = @zones.zonedbs(fabrickey)
335
+ result[1]
336
+ end
337
+
338
+ # Get Zone Aliases in a fabric
339
+ # Input:
340
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
341
+ #
342
+ # ==== Returns
343
+ #
344
+ # Hash - Key zoneAliases , Value Array of Hashes with all aliases
345
+ def alishow(fabrickey, zakey = 'none')
346
+ result = @zones.alishow(fabrickey, zakey)
347
+ result[1]
348
+ end
349
+
350
+ # Get Fabric configuration
351
+ # Input:
352
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
353
+ #
354
+ # ==== Returns
355
+ #
356
+ # Hash - Key zoneAliases , Value Array of Hashes with all aliases
357
+ def cfgshow(fabrickey, type)
358
+ result = @zones.cfgshow(fabrickey, type)
359
+ result[1]
360
+ end
361
+
362
+ # Add zones to defined configuration
363
+ # Input:
364
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
365
+ # cfgname - Fabric configuration name to which to add the zones
366
+ # zonenames - list of zones to be added to the cfg
367
+ # ==== Returns
368
+ #
369
+ # Status of request
370
+ def cfgadd(fabrickey, cfgname, *zonenames)
371
+ result = @zones.altercfg(fabrickey, 'ADD', cfgname, *zonenames)
372
+ result[1]
373
+ end
374
+
375
+ # Remove zones to defined configuration
376
+ # Input:
377
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
378
+ # cfgname - Fabric configuration name from which to remove the zones
379
+ # zonenames - list of zones to be removed to the cfg
380
+ # ==== Returns
381
+ #
382
+ # Status of request
383
+ def cfgremove(fabrickey, cfgname, *zonenames)
384
+ result = @zones.altercfg(fabrickey, 'REMOVE', cfgname, *zonenames)
385
+ result[1]
386
+ end
387
+
388
+ # Enable defined zoning by configuration by name
389
+ # Input:
390
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
391
+ # cfgname - Fabric configuration name from which to remove the zones
392
+ # ==== Returns
393
+ #
394
+ # Status of request
395
+ def cfgenable(fabrickey, cfgname)
396
+ result = @zones.cfgenable(fabrickey, cfgname)
397
+ result[1]
398
+ end
399
+
400
+ # Create Zone Aliases in a fabric
401
+ # Input:
402
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
403
+ # aliname - name for new alias
404
+ # wwn - to be added to aliname , it supports multiple wwns separated by comma
405
+ # ==== Returns
406
+ #
407
+ # Status of request
408
+ def alicreate(fabrickey, aliname, *wwn)
409
+ result = @zones.alicreate(fabrickey, aliname, *wwn)
410
+ result[1]
411
+ end
412
+
413
+ # Add wwn to existing Alias
414
+ # Input:
415
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
416
+ # aliname - name for new alias
417
+ # wwn - to be added to aliname , it supports multiple wwns separated by comma
418
+ # ==== Returns
419
+ #
420
+ # Status of request
421
+ def aliadd(fabrickey, aliname, *wwn)
422
+ result = @zones.alteralias(fabrickey, 'ADD', aliname, *wwn)
423
+ result[1]
424
+ end
425
+
426
+ # Remove wwn to existing Alias
427
+ # Input:
428
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
429
+ # aliname - name for new alias
430
+ # wwn - to be added to aliname , it supports multiple wwns separated by comma
431
+ # ==== Returns
432
+ #
433
+ # Status of request
434
+ def aliremove(fabrickey, aliname, *wwn)
435
+ result = @zones.alteralias(fabrickey, 'REMOVE', aliname, *wwn)
436
+ result[1]
437
+ end
438
+
439
+ # Delete Aliases in defined Fabric
440
+ # Input:
441
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
442
+ # alinames - list of aliases to be delete
443
+ # ==== Returns
444
+ #
445
+ # Status of request
446
+ def alidelete(fabrickey, *alinames)
447
+ result = @zones.alidelete(fabrickey, *alinames)
448
+ result[1]
449
+ end
450
+
451
+ # Start Fabric transaction
452
+ # Input:
453
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
454
+ #
455
+ # ==== Returns
456
+ # Status of request
457
+ def trans_start(fabrickey)
458
+ result = @zones.control_transaction(fabrickey, 'start')
459
+ result[1]
460
+ end
461
+
462
+ # Commit Fabric transaction
463
+ # Input:
464
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
465
+ #
466
+ # ==== Returns
467
+ # Status of request
468
+ def trans_commit(fabrickey)
469
+ result = @zones.control_transaction(fabrickey, 'commit')
470
+ result[1]
471
+ end
472
+
473
+ # Abort Fabric transaction
474
+ # Input:
475
+ # fabrickey - fabric key WWN(it can be retrived using the fabrics methond
476
+ #
477
+ # ==== Returns
478
+ # Status of request
479
+ def trans_abort(fabrickey)
480
+ result = @zones.control_transaction(fabrickey, 'abort')
481
+ result[1]
482
+ end
483
+
484
+ # Get syslog events
485
+ # Input:
486
+ # count - String value to retrive the number of last events
487
+ #
488
+ # ==== Returns
489
+ # Status of request
490
+ def syslog_events(count)
491
+ result = @events.syslog_events(count)
492
+ result[1]
493
+ end
494
+
495
+ # Get trap events
496
+ # Input:
497
+ # count - String value to retrive the number of last events
498
+ #
499
+ # ==== Returns
500
+ # Status of request
501
+ def trap_events(count)
502
+ result = @events.trap_events(count)
503
+ result[1]
504
+ end
505
+
506
+ # Get custom events based on params
507
+ # Input:
508
+ # count - String value to retrive the number of last events
509
+ #
510
+ # ==== Returns
511
+ # Status of request
512
+ def custom_events(startindex = '0', count = '10', origin = 'syslog', severity = 'INFO')
513
+ result = @events.custom_events(startindex, count, origin, severity)
514
+ result[1]
515
+ end
516
+
517
+ private
518
+
519
+ def init_log
520
+ # Create Logger
521
+ @client_logger = if @enable_logger
522
+ if @log_file_path.nil?
523
+ Logger.new(STDOUT)
524
+ else
525
+ Logger.new(@log_file_path, 'daily')
526
+ end
527
+ else @enable_logger = false
528
+ end
529
+
530
+ @log_level = Logger::DEBUG if @debug
531
+ end
532
+ end
533
+ end