brocadesan 0.4.1 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/brocadesan.gemspec +5 -5
- data/lib/brocadesan/config/brocade/san/switch_cmd_mapping.yml +23 -3
- data/lib/brocadesan/config/parser_mapping.yml +4 -1
- data/lib/brocadesan/provisioning.rb +6 -3
- data/lib/brocadesan/switch.rb +55 -19
- data/lib/meta_methods.rb +27 -0
- data/test/outputs/fabricprincipal_1.txt +3 -0
- data/test/outputs/fabricprincipal_1.yml +3 -0
- data/test/outputs/fabricprincipal_2.txt +3 -0
- data/test/outputs/fabricprincipal_2.yml +3 -0
- data/test/outputs/fabricprincipal_3.txt +3 -0
- data/test/outputs/fabricprincipal_3.yml +3 -0
- data/test/outputs/ipaddrshow_1.txt +7 -0
- data/test/outputs/ipaddrshow_1.yml +4 -0
- data/test/outputs/ipaddrshow_2.txt +21 -0
- data/test/outputs/ipaddrshow_2.yml +4 -0
- data/test/outputs/mapsdbshow_1.txt +32 -0
- data/test/outputs/mapsdbshow_1.yml +7 -0
- data/test/outputs/vf_switch_1.txt +1 -1
- data/test/provisioning_test.rb +44 -43
- data/test/switch_test.rb +33 -3
- metadata +29 -25
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWQzNDA4YmVhZmJiYzgxZWMyYjRjYTRjZmFkZWJmOTljMDQwNGQzNQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MDM5MGY3YWUyOTQ1OGNkYTI3MjY1MmQ5ZDdmM2U1ZjY5YTkzYmY3MA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmUxN2I2ZDdmNjg5MzA1OTdlYTRkZjMxNmEyNDFjZDYzMzgwNjc3ZDQ1NGUx
|
10
|
+
ODIzNDA5YjdkYjFiYzE3ZWU1YjhlYTNjZjIwZjEzODUxMGQ2YzVjMmJiYTQ2
|
11
|
+
ZjU4NTAzNjMyMjNhMjI5ZGRiMTNlYThjYTlhOTc5ODU3NTVhNWM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2YwYTczYTRiZTBiZjVmNDhiOTNkMDM3NzZiZjliYzk5NjkwNzQzMDA4YTM2
|
14
|
+
YjIwNzE3MzM5NmIzYjVjMWIyMTBjYjNkNzY2NTM3NTkyYWRjN2VjODMwZDcw
|
15
|
+
OTBhZGExMWI2MzAzNGE2ZGNkNjEwYTBlNjc3OTY2YTNlMTUwYWU=
|
data/brocadesan.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'brocadesan'
|
3
|
-
s.version = '0.4.
|
4
|
-
s.date = '
|
3
|
+
s.version = '0.4.8'
|
4
|
+
s.date = '2016-02-26'
|
5
5
|
s.summary = "Brocade SAN library"
|
6
6
|
s.description = "Gem to manipulate FABOS based devices"
|
7
7
|
s.authors = ["Tomas Trnecka"]
|
8
8
|
s.email = 'trnecka@gmail.com'
|
9
9
|
s.files = `git ls-files`.split("\n")
|
10
10
|
s.homepage = 'http://rubygems.org/gems/brocadesan'
|
11
|
-
s.add_runtime_dependency "net-ssh", "
|
12
|
-
s.add_development_dependency "minitest",["
|
13
|
-
s.add_development_dependency "rake-notes",["
|
11
|
+
s.add_runtime_dependency "net-ssh", "~> 2.9"
|
12
|
+
s.add_development_dependency "minitest",["~> 5.0"]
|
13
|
+
s.add_development_dependency "rake-notes",["~> 0.2"]
|
14
14
|
end
|
@@ -10,6 +10,10 @@
|
|
10
10
|
:cmd: switchshow
|
11
11
|
:attr: switch_mode
|
12
12
|
:format: string
|
13
|
+
:type:
|
14
|
+
:cmd: switchshow
|
15
|
+
:attr: switch_type
|
16
|
+
:format: string
|
13
17
|
:role:
|
14
18
|
:cmd: switchshow
|
15
19
|
:attr: switch_role
|
@@ -90,9 +94,17 @@
|
|
90
94
|
:cmd: "switchstatusshow"
|
91
95
|
:attr: switchstatusshow
|
92
96
|
:format: string
|
97
|
+
:maps_status:
|
98
|
+
:cmd: "mapsdb --show"
|
99
|
+
:attr: current_switch_policy_status
|
100
|
+
:format: string
|
101
|
+
:maps_status_details:
|
102
|
+
:cmd: "mapsdb --show"
|
103
|
+
:attr: maps_summary
|
104
|
+
:format: string
|
93
105
|
:ip:
|
94
|
-
:cmd: "
|
95
|
-
:attr:
|
106
|
+
:cmd: "ipaddrshow"
|
107
|
+
:attr: ethernet_ip_address
|
96
108
|
:format: string
|
97
109
|
:supportshow:
|
98
110
|
:cmd: "supportshow"
|
@@ -113,4 +125,12 @@
|
|
113
125
|
:cfg_transaction:
|
114
126
|
:cmd: "cfgtransshow"
|
115
127
|
:attr: cfg_transaction
|
116
|
-
:format: hash
|
128
|
+
:format: hash
|
129
|
+
:principal_mode:
|
130
|
+
:cmd: fabricprincipal
|
131
|
+
:attr: principal_selection_mode
|
132
|
+
:format: string
|
133
|
+
:principal_priority:
|
134
|
+
:cmd: fabricprincipal
|
135
|
+
:attr: principal_switch_selection_priority
|
136
|
+
:format: string
|
@@ -7,6 +7,7 @@
|
|
7
7
|
:dlsshow: oneline
|
8
8
|
:iodshow: oneline
|
9
9
|
:switchstatusshow: multiline
|
10
|
+
:mapsdb: multiline
|
10
11
|
:supportshow: multiline
|
11
12
|
:cfgshow: cfgshow
|
12
13
|
:nsshow: ns
|
@@ -18,4 +19,6 @@
|
|
18
19
|
:trunkshow: trunk
|
19
20
|
:cfgtransshow: multiline
|
20
21
|
:zoneshow: cfgshow
|
21
|
-
:alishow: cfgshow
|
22
|
+
:alishow: cfgshow
|
23
|
+
:fabricprincipal: multiline
|
24
|
+
:ipaddrshow: ipaddrshow
|
@@ -34,6 +34,9 @@ module Provisioning
|
|
34
34
|
# Checks as well if the switch is virtual fabric enabled since that defines the way it will be queried further.
|
35
35
|
def self.create(*params)
|
36
36
|
agent=new(*params)
|
37
|
+
#TODO revisit this once the v7.3 is installed
|
38
|
+
agent.override_vf
|
39
|
+
agent
|
37
40
|
end
|
38
41
|
|
39
42
|
# Queries the agent for ongoing transaction.
|
@@ -748,9 +751,9 @@ module Provisioning
|
|
748
751
|
when "delete"
|
749
752
|
""
|
750
753
|
when "create"
|
751
|
-
", \
|
754
|
+
", \'#{obj.members.join(";")}\'"
|
752
755
|
when "remove","add"
|
753
|
-
", \
|
756
|
+
", \'#{member}\'"
|
754
757
|
else
|
755
758
|
""
|
756
759
|
end
|
@@ -803,7 +806,7 @@ module Provisioning
|
|
803
806
|
cmd_part = get_cmd klass, word
|
804
807
|
object_member_part = get_member_part obj, word, member
|
805
808
|
response = script_mode do
|
806
|
-
query("#{cmd_part} \
|
809
|
+
query("#{cmd_part} \'#{obj}\'#{object_member_part}")
|
807
810
|
end
|
808
811
|
validate_and_save(response)
|
809
812
|
end
|
data/lib/brocadesan/switch.rb
CHANGED
@@ -130,6 +130,12 @@ module SAN
|
|
130
130
|
@fid = fid.to_i==0 ? 128 : fid.to_i
|
131
131
|
end
|
132
132
|
|
133
|
+
# override VF settings
|
134
|
+
# all commands will run only on base switch
|
135
|
+
# this is to allow to run certain commands on VF enabled switches untill the fosexec is fixed
|
136
|
+
def override_vf
|
137
|
+
@configuration[:override_vf]=true
|
138
|
+
end
|
133
139
|
# gets the +attr+
|
134
140
|
#
|
135
141
|
# +attr+ has to be speficied in the CMD_MAPPING
|
@@ -380,7 +386,11 @@ module SAN
|
|
380
386
|
end
|
381
387
|
|
382
388
|
def query(*cmds) #:nodoc
|
383
|
-
|
389
|
+
if get_mode=="interactive"
|
390
|
+
cmds[0]=fullcmd(cmds[0])
|
391
|
+
else
|
392
|
+
cmds.map! {|cmd| fullcmd(cmd)}
|
393
|
+
end
|
384
394
|
super(*cmds)
|
385
395
|
end
|
386
396
|
|
@@ -496,12 +506,12 @@ module SAN
|
|
496
506
|
end
|
497
507
|
|
498
508
|
def fullcmd(cmd)
|
499
|
-
if @configuration[:vf]=="enabled" && @fid
|
509
|
+
if @configuration[:vf]=="enabled" && @fid && !@configuration[:override_vf]
|
500
510
|
cmds = cmd.split("|")
|
501
511
|
if cmds.size>1
|
502
|
-
"fosexec --fid #{@fid} \'#{cmds.shift}\' |#{cmds.join("|")}"
|
512
|
+
"fosexec --fid #{@fid} -cmd \'#{cmds.shift}\' |#{cmds.join("|")}"
|
503
513
|
else
|
504
|
-
"fosexec --fid #{@fid} \'#{cmds.shift}\'"
|
514
|
+
"fosexec --fid #{@fid} -cmd \'#{cmds.shift}\'"
|
505
515
|
end
|
506
516
|
else
|
507
517
|
cmd
|
@@ -568,7 +578,7 @@ module SAN
|
|
568
578
|
# we detect which command output we parse - commands start with defined prompt on the XML line
|
569
579
|
@parsed[:parsing_position] = case
|
570
580
|
# stripping fosexec, all pipes and ' to get pure command
|
571
|
-
when line.match(/^#{@prompt}/) then line.gsub(/(fosexec --fid \d+ \')|\'$|\' \|.*$/,"").split(" ")[1]
|
581
|
+
when line.match(/^#{@prompt}/) then line.gsub(/(fosexec --fid \d+ -cmd \')|\'$|\' \|.*$/,"").split(" ")[1]
|
572
582
|
else @parsed[:parsing_position]
|
573
583
|
end
|
574
584
|
#some default processing
|
@@ -605,6 +615,8 @@ module SAN
|
|
605
615
|
parse_ns(line)
|
606
616
|
when @parsed[:parsing_position].match(/#{PARSER_MAPPING.map{ |k,v| v=='trunk' ? k : nil }.compact.join("|")}/i)
|
607
617
|
parse_trunk(line)
|
618
|
+
when @parsed[:parsing_position].match(/#{PARSER_MAPPING.map{ |k,v| v=='ipaddrshow' ? k : nil }.compact.join("|")}/i)
|
619
|
+
parse_ipaddrshow(line)
|
608
620
|
end
|
609
621
|
end
|
610
622
|
|
@@ -615,24 +627,48 @@ module SAN
|
|
615
627
|
|
616
628
|
# parser used to parse commands with multi lines output
|
617
629
|
def parse_multiline(line)
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
630
|
+
case @parsed[:parsing_position]
|
631
|
+
when "mapsdb"
|
632
|
+
case
|
633
|
+
when line.match(/^Current Switch Policy Status/)
|
634
|
+
arr = line.split(":")
|
635
|
+
@parsed[arr[0].strip.gsub(/\s+/,"_").gsub(/([a-z])([A-Z])/,'\1_\2').downcase.to_sym]=arr[1..-1].join(":").strip
|
636
|
+
when line.match(/Summary Report/)
|
637
|
+
@in_maps_summary = true
|
638
|
+
when line.match(/Rules Affecting Health/)
|
639
|
+
@in_maps_summary = false
|
640
|
+
#@parsed[:maps_summary].gsub!(/\n$/,"")
|
641
|
+
when @in_maps_summary == true
|
642
|
+
return nil if line.match(/^=/)
|
643
|
+
@parsed[:maps_summary]||=""
|
644
|
+
@parsed[:maps_summary]+=line+"\n"
|
645
|
+
end
|
629
646
|
else
|
630
|
-
#
|
631
|
-
|
632
|
-
|
647
|
+
# switchstatusshow
|
648
|
+
case
|
649
|
+
when line.match(/^\s*[a-z]+.*:/i)
|
650
|
+
arr = line.split(":")
|
651
|
+
@parsed[arr[0].strip.gsub(/\s+/,"_").gsub(/([a-z])([A-Z])/,'\1_\2').downcase.to_sym]=arr[1..-1].join(":").strip
|
652
|
+
when line.match(/^There is no outstanding/) && @parsed[:parsing_position]=="cfgtransshow"
|
653
|
+
@parsed[:cfg_transaction] = {:id=>-1, :abortable=>nil, :msg => "no transaction"}
|
654
|
+
when line.match(/^Current transaction token is (.+)$/) && @parsed[:parsing_position]=="cfgtransshow"
|
655
|
+
@parsed[:cfg_transaction][:id] = $1
|
656
|
+
when line.match(/It is(.+)abortable$/) && @parsed[:parsing_position]=="cfgtransshow"
|
657
|
+
@parsed[:cfg_transaction][:abortable] = $1.match(/not/) ? false : true
|
658
|
+
else
|
659
|
+
#supportshow
|
660
|
+
@parsed[@parsed[:parsing_position].to_sym]||=""
|
661
|
+
@parsed[@parsed[:parsing_position].to_sym]+=line+"\n"
|
662
|
+
end
|
633
663
|
end
|
634
664
|
end
|
635
665
|
|
666
|
+
#parser for ipaddrshow
|
667
|
+
def parse_ipaddrshow(line)
|
668
|
+
if @parsed[:ethernet_ip_address].nil? && line.match(/Ethernet IP Address/)
|
669
|
+
@parsed[:ethernet_ip_address] = line.split(":")[1].strip
|
670
|
+
end
|
671
|
+
end
|
636
672
|
# parser for multiline output where each line is independent
|
637
673
|
def parse_simple(line)
|
638
674
|
case
|
data/lib/meta_methods.rb
CHANGED
@@ -26,6 +26,15 @@ class Brocade::SAN::Switch
|
|
26
26
|
#
|
27
27
|
# Returns value in (string) format
|
28
28
|
|
29
|
+
##
|
30
|
+
# :method: type
|
31
|
+
# :call-seq:
|
32
|
+
# type(forced=true)
|
33
|
+
#
|
34
|
+
# If called with +true+ argument it will get the switch_type from the switch instead of cache
|
35
|
+
#
|
36
|
+
# Returns value in (string) format
|
37
|
+
|
29
38
|
##
|
30
39
|
# :method: role
|
31
40
|
# :call-seq:
|
@@ -260,4 +269,22 @@ class Brocade::SAN::Switch
|
|
260
269
|
#
|
261
270
|
# Returns value in (hash) format
|
262
271
|
|
272
|
+
##
|
273
|
+
# :method: principal_mode
|
274
|
+
# :call-seq:
|
275
|
+
# principal_mode(forced=true)
|
276
|
+
#
|
277
|
+
# If called with +true+ argument it will get the principal_selection_mode from the switch instead of cache
|
278
|
+
#
|
279
|
+
# Returns value in (string) format
|
280
|
+
|
281
|
+
##
|
282
|
+
# :method: principal_priority
|
283
|
+
# :call-seq:
|
284
|
+
# principal_priority(forced=true)
|
285
|
+
#
|
286
|
+
# If called with +true+ argument it will get the principal_switch_selection_priority from the switch instead of cache
|
287
|
+
#
|
288
|
+
# Returns value in (string) format
|
289
|
+
|
263
290
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
> ipaddrshow
|
2
|
+
|
3
|
+
CHASSIS
|
4
|
+
Ethernet IP Address: 10.200.0.153
|
5
|
+
Ethernet Subnetmask: 255.255.0.0
|
6
|
+
|
7
|
+
CP0
|
8
|
+
Ethernet IP Address: 10.200.0.151
|
9
|
+
Ethernet Subnetmask: 255.255.0.0
|
10
|
+
Host Name: PLNPOD2N2ECS001-mgmt06
|
11
|
+
Gateway IP Address: 10.200.0.1
|
12
|
+
|
13
|
+
CP1
|
14
|
+
Ethernet IP Address: 10.200.0.152
|
15
|
+
Ethernet Subnetmask: 255.255.0.0
|
16
|
+
Host Name: PLNPOD2N2ECS001-mgmt07
|
17
|
+
Gateway IP Address: 10.200.0.1
|
18
|
+
IPv6 Autoconfiguration Enabled: Yes
|
19
|
+
Local IPv6 Addresses:
|
20
|
+
IPv6 Gateways:
|
21
|
+
DHCPv6: Off
|
@@ -0,0 +1,32 @@
|
|
1
|
+
> mapsdb --show
|
2
|
+
|
3
|
+
1 Dashboard Information:
|
4
|
+
=======================
|
5
|
+
|
6
|
+
DB start time: Mon Jan 25 11:00:04 2016
|
7
|
+
Active policy: dflt_base_policy
|
8
|
+
Configured Notifications: None
|
9
|
+
Quarantined Ports : None
|
10
|
+
|
11
|
+
2 Switch Health Report:
|
12
|
+
=======================
|
13
|
+
|
14
|
+
Current Switch Policy Status: HEALTHY
|
15
|
+
|
16
|
+
|
17
|
+
3.1 Summary Report:
|
18
|
+
===================
|
19
|
+
|
20
|
+
Category |Today |Last 7 days
|
21
|
+
--------------------------------------------------------------------------------
|
22
|
+
Fru Health |No Errors |No Errors
|
23
|
+
Switch Resource |No Errors |No Errors
|
24
|
+
|
25
|
+
|
26
|
+
3.2 Rules Affecting Health:
|
27
|
+
===========================
|
28
|
+
|
29
|
+
Category(Rule Count)|RepeatCount|Rule Name |Execution Time |Object |Triggered Value(Units)|
|
30
|
+
------------------------------------------------------------------------------------------------------------------------
|
31
|
+
|
32
|
+
MAPS is not Licensed. MAPS extended features are available ONLY with License
|
@@ -0,0 +1,7 @@
|
|
1
|
+
:current_switch_policy_status: HEALTHY
|
2
|
+
:maps_summary: |
|
3
|
+
Category |Today |Last 7 days
|
4
|
+
--------------------------------------------------------------------------------
|
5
|
+
Fru Health |No Errors |No Errors
|
6
|
+
Switch Resource |No Errors |No Errors
|
7
|
+
:parsing_position: end
|
data/test/provisioning_test.rb
CHANGED
@@ -21,6 +21,7 @@ class ProvisioningTest < MiniTest::Test
|
|
21
21
|
def test_device_setup
|
22
22
|
assert_instance_of Provisioning::Agent, @agent
|
23
23
|
assert_equal nil, @agent.instance_variable_get(:@transaction)
|
24
|
+
assert @agent.instance_variable_get(:@configuration)[:override_vf]
|
24
25
|
|
25
26
|
# this hack ensures I can test verify false inside create
|
26
27
|
Provisioning::Agent.class_eval do
|
@@ -342,12 +343,12 @@ class ProvisioningTest < MiniTest::Test
|
|
342
343
|
:cmd => "cfgcreate",
|
343
344
|
:member_name => "Zone",
|
344
345
|
:error=>Provisioning::Agent::Error::CFG_BAD,:method=>:cfg_create,
|
345
|
-
:msg_invalid => "> cfgcreate \
|
346
|
+
:msg_invalid => "> cfgcreate \'test-04\',\'koza; byk\'\nInvalid name\n",
|
346
347
|
:resp_invalid => "Invalid name",
|
347
|
-
:msg_ok => "> cfgcreate \
|
348
|
+
:msg_ok => "> cfgcreate \'test\',\'koza; byk\'\n",
|
348
349
|
:resp_ok => "",
|
349
|
-
:msg_duplicate => "> cfgcreate cfg1, zone1\n\
|
350
|
-
:resp_duplicate => "\
|
350
|
+
:msg_duplicate => "> cfgcreate cfg1, zone1\n\'cfg1\' duplicate name\n",
|
351
|
+
:resp_duplicate => "\'cfg1\' duplicate name",
|
351
352
|
:members => zones.map {|z| z.to_s}
|
352
353
|
},
|
353
354
|
{:obj=>Zone.new("zonetest"),
|
@@ -355,12 +356,12 @@ class ProvisioningTest < MiniTest::Test
|
|
355
356
|
:cmd => "zonecreate",
|
356
357
|
:member_name => "Alias",
|
357
358
|
:error => Provisioning::Agent::Error::ZONE_BAD,:method=>:zone_create,
|
358
|
-
:msg_invalid => "> zonecreate \
|
359
|
+
:msg_invalid => "> zonecreate \'test-04\',\'koza; byk\'\nInvalid name\n",
|
359
360
|
:resp_invalid => "Invalid name",
|
360
|
-
:msg_ok => "> zonecreate \
|
361
|
+
:msg_ok => "> zonecreate \'test\',\'koza; byk\'\n",
|
361
362
|
:resp_ok => "",
|
362
|
-
:msg_duplicate => "> zonecreate WYN_vls1_node3_fc0, 5B:49:9B:AF:F0:93:00:13\n\
|
363
|
-
:resp_duplicate => "\
|
363
|
+
:msg_duplicate => "> zonecreate WYN_vls1_node3_fc0, 5B:49:9B:AF:F0:93:00:13\n\'WYN_vls1_node3_fc0\' duplicate name\n",
|
364
|
+
:resp_duplicate => "\'WYN_vls1_node3_fc0\' duplicate name",
|
364
365
|
:members => als.map {|a| a.to_s}
|
365
366
|
},
|
366
367
|
{:obj=>Alias.new("aliastest"),
|
@@ -368,12 +369,12 @@ class ProvisioningTest < MiniTest::Test
|
|
368
369
|
:cmd => "alicreate",
|
369
370
|
:member_name => "Wwn",
|
370
371
|
:error => Provisioning::Agent::Error::ALIAS_BAD,:method=>:alias_create,
|
371
|
-
:msg_invalid => "> alicreate \
|
372
|
+
:msg_invalid => "> alicreate \'test\',\'50:00; 50:02\'\nInvalid alias\n",
|
372
373
|
:resp_invalid => "Invalid alias",
|
373
|
-
:msg_ok => "> alicreate \
|
374
|
+
:msg_ok => "> alicreate \'test\',\'50:00; 50:02\'\n",
|
374
375
|
:resp_ok => "",
|
375
|
-
:msg_duplicate => "> alicreate WYN_vls1_node3_fc0, 5B:49:9B:AF:F0:93:00:13\n\
|
376
|
-
:resp_duplicate => "\
|
376
|
+
:msg_duplicate => "> alicreate WYN_vls1_node3_fc0, 5B:49:9B:AF:F0:93:00:13\n\'WYN_vls1_node3_fc0\' duplicate name\n",
|
377
|
+
:resp_duplicate => "\'WYN_vls1_node3_fc0\' duplicate name",
|
377
378
|
:members => wwns.map {|w| w.to_s}
|
378
379
|
}
|
379
380
|
]
|
@@ -432,7 +433,7 @@ class ProvisioningTest < MiniTest::Test
|
|
432
433
|
@agent.query_stub do
|
433
434
|
assert_equal obj[:obj], @agent.send(:obj_create,obj[:obj],obj[:klass])
|
434
435
|
# checks the cmd sent to query
|
435
|
-
assert_equal "#{obj[:cmd]} \
|
436
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\', \'#{obj[:obj].members.join(";")}\'", @agent.instance_variable_get(:@query_string)
|
436
437
|
end
|
437
438
|
end
|
438
439
|
|
@@ -485,9 +486,9 @@ class ProvisioningTest < MiniTest::Test
|
|
485
486
|
:member_name => "Zone",
|
486
487
|
:error=>Provisioning::Agent::Error::CFG_BAD,
|
487
488
|
:method=>:cfg_delete,
|
488
|
-
:msg_not_found => "> cfgdelete \
|
489
|
+
:msg_not_found => "> cfgdelete \'test\'\nnot found\n",
|
489
490
|
:resp_not_found => "not found",
|
490
|
-
:msg_ok => "> cfgedelete \
|
491
|
+
:msg_ok => "> cfgedelete \'test\'\n",
|
491
492
|
:resp_ok => ""
|
492
493
|
},
|
493
494
|
{:obj=>Zone.new("zonetest"),
|
@@ -496,9 +497,9 @@ class ProvisioningTest < MiniTest::Test
|
|
496
497
|
:member_name => "Alias",
|
497
498
|
:error => Provisioning::Agent::Error::ZONE_BAD,
|
498
499
|
:method=>:zone_delete,
|
499
|
-
:msg_not_found => "> zonedelete \
|
500
|
+
:msg_not_found => "> zonedelete \'test\'\nnot found\n",
|
500
501
|
:resp_not_found => "not found",
|
501
|
-
:msg_ok => "> zonedelete \
|
502
|
+
:msg_ok => "> zonedelete \'test\'\n",
|
502
503
|
:resp_ok => ""
|
503
504
|
},
|
504
505
|
{:obj=>Alias.new("aliastest"),
|
@@ -507,9 +508,9 @@ class ProvisioningTest < MiniTest::Test
|
|
507
508
|
:member_name => "Wwn",
|
508
509
|
:error => Provisioning::Agent::Error::ALIAS_BAD,
|
509
510
|
:method=>:alias_delete,
|
510
|
-
:msg_not_found => "> alidelete \
|
511
|
+
:msg_not_found => "> alidelete \'test\'\nnot found\n",
|
511
512
|
:resp_not_found => "not found",
|
512
|
-
:msg_ok => "> alidelete \
|
513
|
+
:msg_ok => "> alidelete \'test\'\n",
|
513
514
|
:resp_ok => ""
|
514
515
|
}
|
515
516
|
]
|
@@ -554,7 +555,7 @@ class ProvisioningTest < MiniTest::Test
|
|
554
555
|
@agent.query_stub do
|
555
556
|
assert_equal obj[:obj], @agent.send(:obj_delete,obj[:obj],obj[:klass])
|
556
557
|
# checks the cmd sent to query
|
557
|
-
assert_equal "#{obj[:cmd]} \
|
558
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\'", @agent.instance_variable_get(:@query_string)
|
558
559
|
end
|
559
560
|
end
|
560
561
|
end
|
@@ -576,7 +577,7 @@ class ProvisioningTest < MiniTest::Test
|
|
576
577
|
:method => :alias_change
|
577
578
|
}
|
578
579
|
]
|
579
|
-
@response.data="> alidelete \
|
580
|
+
@response.data="> alidelete \'test\'\n"
|
580
581
|
objs.each do |obj|
|
581
582
|
@agent.multistub [
|
582
583
|
[:check_for_running_transaction, false],
|
@@ -590,11 +591,11 @@ class ProvisioningTest < MiniTest::Test
|
|
590
591
|
@agent.query_stub do
|
591
592
|
assert_equal obj[:obj], @agent.send(:obj_change,obj[:obj],obj[:klass])
|
592
593
|
# checks the cmd sent to query
|
593
|
-
assert_equal "#{obj[:queries][0]} \
|
594
|
+
assert_equal "#{obj[:queries][0]} \'#{obj[:obj].name}\'#{obj[:queries][1]} \'#{obj[:obj].name}\', \'#{obj[:obj].members.join(";")}\'", @agent.instance_variable_get(:@query_string)
|
594
595
|
@agent.instance_variable_set(:@query_string,"")
|
595
596
|
# test wrapper method
|
596
597
|
@agent.send obj[:method],obj[:obj]
|
597
|
-
assert_equal "#{obj[:queries][0]} \
|
598
|
+
assert_equal "#{obj[:queries][0]} \'#{obj[:obj].name}\'#{obj[:queries][1]} \'#{obj[:obj].name}\', \'#{obj[:obj].members.join(";")}\'", @agent.instance_variable_get(:@query_string)
|
598
599
|
end
|
599
600
|
end
|
600
601
|
end
|
@@ -612,9 +613,9 @@ class ProvisioningTest < MiniTest::Test
|
|
612
613
|
:error=>Provisioning::Agent::Error::CFG_BAD,
|
613
614
|
:error_member => Provisioning::Agent::Error::ZONE_BAD,
|
614
615
|
:method=>:cfg_remove,
|
615
|
-
:msg_not_found => "> cfgremove \
|
616
|
+
:msg_not_found => "> cfgremove \'zctest\',\'zonetest\'\nnot found\n",
|
616
617
|
:resp_not_found => "not found",
|
617
|
-
:msg_ok => "> cfgremove \
|
618
|
+
:msg_ok => "> cfgremove \'zctest\',\'zonetest\'\n",
|
618
619
|
:resp_ok => ""
|
619
620
|
},
|
620
621
|
{:obj=>Zone.new("zonetest"),
|
@@ -627,9 +628,9 @@ class ProvisioningTest < MiniTest::Test
|
|
627
628
|
:error => Provisioning::Agent::Error::ZONE_BAD,
|
628
629
|
:error_member => Provisioning::Agent::Error::MEMBER_BAD,
|
629
630
|
:method=>:zone_remove,
|
630
|
-
:msg_not_found => "> zoneremove \
|
631
|
+
:msg_not_found => "> zoneremove \'zonename\',\'aliastest\'\nnot found\n",
|
631
632
|
:resp_not_found => "not found",
|
632
|
-
:msg_ok => "> zoneremove \
|
633
|
+
:msg_ok => "> zoneremove \'zonename\',\'aliastest\'\n",
|
633
634
|
:resp_ok => ""
|
634
635
|
},
|
635
636
|
{:obj=>Alias.new("aliastest"),
|
@@ -642,9 +643,9 @@ class ProvisioningTest < MiniTest::Test
|
|
642
643
|
:error => Provisioning::Agent::Error::ALIAS_BAD,
|
643
644
|
:error_member => Provisioning::Agent::Error::ALIAS_MEMBER_BAD,
|
644
645
|
:method=>:alias_remove,
|
645
|
-
:msg_not_found => "> aliremove \
|
646
|
+
:msg_not_found => "> aliremove \'aliastest\',\'50:00; 50:02\'\nnot found\n",
|
646
647
|
:resp_not_found => "not found",
|
647
|
-
:msg_ok => "> aliremove \
|
648
|
+
:msg_ok => "> aliremove \'aliastest\',\'50:00; 50:02\'\n",
|
648
649
|
:resp_ok => ""
|
649
650
|
}
|
650
651
|
]
|
@@ -697,11 +698,11 @@ class ProvisioningTest < MiniTest::Test
|
|
697
698
|
@agent.query_stub do
|
698
699
|
obj[:members_ok].each do |mem_ok|
|
699
700
|
assert_equal obj[:obj], @agent.send(:obj_remove,obj[:obj],obj[:klass],mem_ok)
|
700
|
-
assert_equal "#{obj[:cmd]} \
|
701
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\', \'#{mem_ok}\'", @agent.instance_variable_get(:@query_string)
|
701
702
|
@agent.instance_variable_set(:@query_string,"")
|
702
703
|
# test wrapper method
|
703
704
|
@agent.send obj[:method],obj[:obj],mem_ok
|
704
|
-
assert_equal "#{obj[:cmd]} \
|
705
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\', \'#{mem_ok}\'", @agent.instance_variable_get(:@query_string)
|
705
706
|
@agent.instance_variable_set(:@query_string,"")
|
706
707
|
end
|
707
708
|
end
|
@@ -735,9 +736,9 @@ class ProvisioningTest < MiniTest::Test
|
|
735
736
|
:error=>Provisioning::Agent::Error::CFG_BAD,
|
736
737
|
:error_member => Provisioning::Agent::Error::ZONE_BAD,
|
737
738
|
:method=>:cfg_add,
|
738
|
-
:msg_not_found => "> cfgadd \
|
739
|
+
:msg_not_found => "> cfgadd \'zctest\',\'zonetest\'\nnot found\n",
|
739
740
|
:resp_not_found => "not found",
|
740
|
-
:msg_ok => "> cfgadd \
|
741
|
+
:msg_ok => "> cfgadd \'zctest\',\'zonetest\'\n",
|
741
742
|
:resp_ok => ""
|
742
743
|
},
|
743
744
|
{:obj=>Zone.new("zonetest"),
|
@@ -750,9 +751,9 @@ class ProvisioningTest < MiniTest::Test
|
|
750
751
|
:error => Provisioning::Agent::Error::ZONE_BAD,
|
751
752
|
:error_member => Provisioning::Agent::Error::MEMBER_BAD,
|
752
753
|
:method=>:zone_add,
|
753
|
-
:msg_not_found => "> zoneadd \
|
754
|
+
:msg_not_found => "> zoneadd \'zonename\',\'aliastest\'\nnot found\n",
|
754
755
|
:resp_not_found => "not found",
|
755
|
-
:msg_ok => "> zoneadd \
|
756
|
+
:msg_ok => "> zoneadd \'zonename\',\'aliastest\'\n",
|
756
757
|
:resp_ok => ""
|
757
758
|
},
|
758
759
|
{:obj=>Alias.new("aliastest"),
|
@@ -765,9 +766,9 @@ class ProvisioningTest < MiniTest::Test
|
|
765
766
|
:error => Provisioning::Agent::Error::ALIAS_BAD,
|
766
767
|
:error_member => Provisioning::Agent::Error::ALIAS_MEMBER_BAD,
|
767
768
|
:method=>:alias_add,
|
768
|
-
:msg_not_found => "> aliadd \
|
769
|
+
:msg_not_found => "> aliadd \'aliastest\',\'50:00; 50:02\'\nnot found\n",
|
769
770
|
:resp_not_found => "not found",
|
770
|
-
:msg_ok => "> aliadd \
|
771
|
+
:msg_ok => "> aliadd \'aliastest\',\'50:00; 50:02\'\n",
|
771
772
|
:resp_ok => ""
|
772
773
|
}
|
773
774
|
]
|
@@ -820,11 +821,11 @@ class ProvisioningTest < MiniTest::Test
|
|
820
821
|
@agent.query_stub do
|
821
822
|
obj[:members_ok].each do |mem_ok|
|
822
823
|
assert_equal obj[:obj], @agent.send(:obj_add,obj[:obj],obj[:klass],mem_ok)
|
823
|
-
assert_equal "#{obj[:cmd]} \
|
824
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\', \'#{mem_ok}\'", @agent.instance_variable_get(:@query_string)
|
824
825
|
@agent.instance_variable_set(:@query_string,"")
|
825
826
|
# test wrapper method
|
826
827
|
@agent.send obj[:method],obj[:obj],mem_ok
|
827
|
-
assert_equal "#{obj[:cmd]} \
|
828
|
+
assert_equal "#{obj[:cmd]} \'#{obj[:obj].name}\', \'#{mem_ok}\'", @agent.instance_variable_get(:@query_string)
|
828
829
|
@agent.instance_variable_set(:@query_string,"")
|
829
830
|
end
|
830
831
|
end
|
@@ -878,7 +879,7 @@ class ProvisioningTest < MiniTest::Test
|
|
878
879
|
}
|
879
880
|
]
|
880
881
|
# some ok response
|
881
|
-
@response.data="> alidelete \
|
882
|
+
@response.data="> alidelete \'test\'\n"
|
882
883
|
objs.each do |obj|
|
883
884
|
@agent.multistub [
|
884
885
|
[:check_for_running_transaction, false],
|
@@ -893,11 +894,11 @@ class ProvisioningTest < MiniTest::Test
|
|
893
894
|
@agent.query_stub do
|
894
895
|
assert_equal obj[:obj], @agent.send(:obj_purge,obj[:obj],obj[:klass])
|
895
896
|
# checks the cmd sent to query
|
896
|
-
assert_equal "#{obj[:queries][0]} \
|
897
|
+
assert_equal "#{obj[:queries][0]} \'#{obj[:parents][0]}\', \'#{obj[:obj]}\'#{obj[:queries][1]} \'#{obj[:obj]}\'", @agent.instance_variable_get(:@query_string)
|
897
898
|
@agent.instance_variable_set(:@query_string,"")
|
898
899
|
# test wrapper method
|
899
900
|
@agent.send obj[:method],obj[:obj]
|
900
|
-
assert_equal "#{obj[:queries][0]} \
|
901
|
+
assert_equal "#{obj[:queries][0]} \'#{obj[:parents][0]}\', \'#{obj[:obj]}\'#{obj[:queries][1]} \'#{obj[:obj]}\'", @agent.instance_variable_get(:@query_string)
|
901
902
|
end
|
902
903
|
end
|
903
904
|
end
|
@@ -1040,4 +1041,4 @@ class ProvisioningTest < MiniTest::Test
|
|
1040
1041
|
end
|
1041
1042
|
end
|
1042
1043
|
|
1043
|
-
end; end
|
1044
|
+
end; end
|
data/test/switch_test.rb
CHANGED
@@ -6,6 +6,7 @@ module Brocade module SAN
|
|
6
6
|
|
7
7
|
class SwitchTest < MiniTest::Test
|
8
8
|
include OutputReader
|
9
|
+
include SshStoryWriter
|
9
10
|
include Mock::Net::SSH
|
10
11
|
patch_set
|
11
12
|
|
@@ -17,6 +18,11 @@ class SwitchTest < MiniTest::Test
|
|
17
18
|
@device = Switch.new("test","test","test")
|
18
19
|
end
|
19
20
|
|
21
|
+
def test_override_vf
|
22
|
+
@device.override_vf
|
23
|
+
assert @device.instance_variable_get(:@configuration)[:override_vf]
|
24
|
+
end
|
25
|
+
|
20
26
|
def test_query
|
21
27
|
response=@device.query("test")
|
22
28
|
assert_instance_of Switch::Response, response
|
@@ -33,6 +39,24 @@ class SwitchTest < MiniTest::Test
|
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
42
|
+
def test_interactive_query
|
43
|
+
cmds = ["fosexec --fid 99 -cmd 'cfgsave'","y"]
|
44
|
+
replies = ["confirm? [y,n]"]
|
45
|
+
exp_response = write_interactive_story(cmds,replies,TestDevice::DEFAULT_QUERY_PROMPT)
|
46
|
+
|
47
|
+
@device.set_mode("interactive")
|
48
|
+
@device.set_context 99
|
49
|
+
# connection is net/ssh/test method
|
50
|
+
@device.instance_variable_set(:@session,connection)
|
51
|
+
|
52
|
+
response=nil
|
53
|
+
assert_scripted do
|
54
|
+
response=@device.query("cfgsave","y")
|
55
|
+
assert_equal exp_response, response.data
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
36
60
|
def test_device_setup
|
37
61
|
assert_instance_of Switch, @device
|
38
62
|
end
|
@@ -138,15 +162,21 @@ class SwitchTest < MiniTest::Test
|
|
138
162
|
|
139
163
|
#vf enabled and fid given
|
140
164
|
@device.set_context 99
|
141
|
-
assert_equal "fosexec --fid 99 \'test\'", @device.send(:fullcmd,"test")
|
165
|
+
assert_equal "fosexec --fid 99 -cmd \'test\'", @device.send(:fullcmd,"test")
|
142
166
|
|
143
167
|
#vf enabled and fid given and piped commnad
|
144
168
|
@device.set_context 99
|
145
|
-
assert_equal "fosexec --fid 99 \'test\' |grep shit", @device.send(:fullcmd,"test|grep shit")
|
169
|
+
assert_equal "fosexec --fid 99 -cmd \'test\' |grep shit", @device.send(:fullcmd,"test|grep shit")
|
146
170
|
|
147
171
|
#vf enabled and fid given and piped commnad
|
148
172
|
@device.set_context 99
|
149
|
-
assert_equal "fosexec --fid 99 \'test\' | grep shit| grep shit2", @device.send(:fullcmd,"test| grep shit| grep shit2")
|
173
|
+
assert_equal "fosexec --fid 99 -cmd \'test\' | grep shit| grep shit2", @device.send(:fullcmd,"test| grep shit| grep shit2")
|
174
|
+
|
175
|
+
#vf enabled and fid given and override
|
176
|
+
@device.set_context 99
|
177
|
+
@device.override_vf
|
178
|
+
assert_equal "test", @device.send(:fullcmd,"test")
|
179
|
+
|
150
180
|
end
|
151
181
|
|
152
182
|
def test_zone_cfgs_and_effective_cfg_and_zones
|
metadata
CHANGED
@@ -1,64 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brocadesan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tomas Trnecka
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-02-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: net-ssh
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.9
|
19
|
+
version: '2.9'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.9
|
26
|
+
version: '2.9'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: minitest
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: 5.0
|
33
|
+
version: '5.0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: 5.0
|
40
|
+
version: '5.0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake-notes
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.2
|
47
|
+
version: '0.2'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.2
|
54
|
+
version: '0.2'
|
62
55
|
description: Gem to manipulate FABOS based devices
|
63
56
|
email: trnecka@gmail.com
|
64
57
|
executables: []
|
@@ -107,16 +100,28 @@ files:
|
|
107
100
|
- test/outputs/dlsshow_1.yml
|
108
101
|
- test/outputs/dlsshow_2.txt
|
109
102
|
- test/outputs/dlsshow_2.yml
|
103
|
+
- test/outputs/fabricprincipal_1.txt
|
104
|
+
- test/outputs/fabricprincipal_1.yml
|
105
|
+
- test/outputs/fabricprincipal_2.txt
|
106
|
+
- test/outputs/fabricprincipal_2.yml
|
107
|
+
- test/outputs/fabricprincipal_3.txt
|
108
|
+
- test/outputs/fabricprincipal_3.yml
|
110
109
|
- test/outputs/fabricshow_1.txt
|
111
110
|
- test/outputs/fabricshow_1.yml
|
112
111
|
- test/outputs/iodshow_1.txt
|
113
112
|
- test/outputs/iodshow_1.yml
|
113
|
+
- test/outputs/ipaddrshow_1.txt
|
114
|
+
- test/outputs/ipaddrshow_1.yml
|
115
|
+
- test/outputs/ipaddrshow_2.txt
|
116
|
+
- test/outputs/ipaddrshow_2.yml
|
114
117
|
- test/outputs/islshow_1.txt
|
115
118
|
- test/outputs/islshow_1.yml
|
116
119
|
- test/outputs/islshow_2.txt
|
117
120
|
- test/outputs/islshow_2.yml
|
118
121
|
- test/outputs/lscfg_show_1.txt
|
119
122
|
- test/outputs/lscfg_show_1.yml
|
123
|
+
- test/outputs/mapsdbshow_1.txt
|
124
|
+
- test/outputs/mapsdbshow_1.yml
|
120
125
|
- test/outputs/ns_1.txt
|
121
126
|
- test/outputs/ns_1.yml
|
122
127
|
- test/outputs/ns_2.txt
|
@@ -145,26 +150,25 @@ files:
|
|
145
150
|
- test/zone_test.rb
|
146
151
|
homepage: http://rubygems.org/gems/brocadesan
|
147
152
|
licenses: []
|
153
|
+
metadata: {}
|
148
154
|
post_install_message:
|
149
155
|
rdoc_options: []
|
150
156
|
require_paths:
|
151
157
|
- lib
|
152
158
|
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
159
|
requirements:
|
155
160
|
- - ! '>='
|
156
161
|
- !ruby/object:Gem::Version
|
157
162
|
version: '0'
|
158
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
164
|
requirements:
|
161
165
|
- - ! '>='
|
162
166
|
- !ruby/object:Gem::Version
|
163
167
|
version: '0'
|
164
168
|
requirements: []
|
165
169
|
rubyforge_project:
|
166
|
-
rubygems_version:
|
170
|
+
rubygems_version: 2.3.0
|
167
171
|
signing_key:
|
168
|
-
specification_version:
|
172
|
+
specification_version: 4
|
169
173
|
summary: Brocade SAN library
|
170
174
|
test_files: []
|