knife-ucs 0.0.2 → 0.0.3

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.
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,7 +29,7 @@ class Chef
27
29
 
28
30
  def run
29
31
 
30
-
32
+ #TBD
31
33
 
32
34
  end
33
35
 
@@ -0,0 +1,189 @@
1
+ # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
3
+ # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/knife/ucs_base'
21
+
22
+ class Chef
23
+ class Knife
24
+ class UcsPoolList < Knife
25
+
26
+ include Knife::UCSBase
27
+
28
+ banner "knife ucs pool list (options)"
29
+
30
+ attr_accessor :initial_sleep_delay
31
+
32
+ option :type,
33
+ :long => "--pool-type POOLTYPE",
34
+ :description => "The policy type <mac,uuid,wwpn,wwnn>",
35
+ :proc => Proc.new { |f| Chef::Config[:knife][:type] = f }
36
+
37
+ option :org,
38
+ :long => "--org ORG",
39
+ :description => "The organization to use",
40
+ :proc => Proc.new { |f| Chef::Config[:knife][:org] = f }
41
+
42
+ option :name,
43
+ :long => "--policy-name POLICYNAME",
44
+ :description => "The policy name to use",
45
+ :proc => Proc.new { |f| Chef::Config[:knife][:name] = f }
46
+
47
+
48
+ def run
49
+ $stdout.sync = true
50
+
51
+ #Using Chef's UI (much better looking:)) instead of list methods provided by ucslib.
52
+ pool_type = "#{Chef::Config[:knife][:type]}".downcase
53
+ case pool_type
54
+ when 'wwpn'
55
+ wwpnpool_list = [
56
+ ui.color('Organization', :bold),
57
+ ui.color('WWPN', :bold),
58
+ ui.color('Assigned To', :bold),
59
+ ui.color('Assigned', :bold)
60
+ ]
61
+ manager.xpath("configResolveClasses/outConfigs/fcpoolInitiator").each do |wwpnpool|
62
+ extracted_org_names = "#{wwpnpool.attributes["assignedToDn"]}"
63
+ org_names = extracted_org_names.to_s.scan(/\/(org-\w+)/)
64
+ org_names.each do |orgs| #Ugly...refactor
65
+ orgs.each do |org|
66
+ @org = org
67
+ end
68
+ end
69
+ wwpnpool_list << "#{@org}"
70
+ wwpnpool_list << "#{wwpnpool.attributes["id"]}"
71
+ extracted_service_profile_names = "#{wwpnpool.attributes["assignedToDn"]}"
72
+ service_profile_names = extracted_service_profile_names.to_s.scan(/ls-(\w+)/)
73
+ service_profile_names.each do |service_profile_name| #Ugly...refactor
74
+ hostnames = service_profile_name
75
+ hostnames.each do |host_name|
76
+ @host = host_name
77
+ end
78
+ end
79
+ wwpnpool_list << "#{@host}"
80
+ wwpnpool_list << begin
81
+ state = "#{wwpnpool.attributes["assigned"]}"
82
+ case state
83
+ when 'yes'
84
+ ui.color(state, :green)
85
+ when 'assigning'
86
+ ui.color(state, :yellow)
87
+ else
88
+ ui.color(state, :red)
89
+ end
90
+ end
91
+ end
92
+ puts ui.list(wwpnpool_list, :uneven_columns_across, 4)
93
+
94
+ when 'uuid'
95
+ uuidpool_list = [
96
+ ui.color('Organization', :bold),
97
+ ui.color('UUID Suffix', :bold),
98
+ ui.color('Assigned To', :bold),
99
+ ui.color('Assigned', :bold)
100
+ ]
101
+ manager.xpath("configResolveClasses/outConfigs/uuidpoolPooled").each do |uuidpool|
102
+ extracted_org_names = "#{uuidpool.attributes["assignedToDn"]}"
103
+ org_names = extracted_org_names.to_s.scan(/\/(org-\w+)/)
104
+ org_names.each do |orgs| #Ugly...refactor
105
+ orgs.each do |org|
106
+ @org = org
107
+ end
108
+ end
109
+ uuidpool_list << "#{@org}"
110
+ uuidpool_list << "#{uuidpool.attributes["id"]}"
111
+ extracted_service_profile_names = "#{uuidpool.attributes["assignedToDn"]}"
112
+ service_profile_names = extracted_service_profile_names.to_s.scan(/ls-(\w+)/)
113
+ service_profile_names.each do |service_profile_name| #Ugly...refactor
114
+ hostnames = service_profile_name
115
+ hostnames.each do |host_name|
116
+ @host = host_name
117
+ end
118
+ end
119
+ uuidpool_list << "#{@host}"
120
+ uuidpool_list << begin
121
+ state = "#{uuidpool.attributes["assigned"]}"
122
+ case state
123
+ when 'yes'
124
+ ui.color(state, :green)
125
+ when 'assigning'
126
+ ui.color(state, :yellow)
127
+ else
128
+ ui.color(state, :red)
129
+ end
130
+ end
131
+ end
132
+ puts ui.list(uuidpool_list, :uneven_columns_across, 4)
133
+
134
+ when 'mac'
135
+ macpool_list = [
136
+ ui.color('Organization', :bold),
137
+ ui.color('Mac Address', :bold),
138
+ ui.color('Assigned To', :bold),
139
+ ui.color('vNIC', :bold),
140
+ ui.color('Assigned', :bold)
141
+ ]
142
+
143
+ manager.xpath("configResolveClasses/outConfigs/macpoolPooled").each do |macpool|
144
+ extracted_org_names = "#{macpool.attributes["assignedToDn"]}"
145
+ org_names = extracted_org_names.to_s.scan(/\/(org-\w+)/)
146
+ org_names.each do |orgs| #Ugly...refactor
147
+ orgs.each do |org|
148
+ @org = org
149
+ end
150
+ end
151
+ macpool_list << "#{@org}"
152
+ macpool_list << "#{macpool.attributes["id"]}"
153
+ extracted_service_profile_names = "#{macpool.attributes["assignedToDn"]}"
154
+ service_profile_names = extracted_service_profile_names.to_s.scan(/ls-(\w+)/)
155
+ service_profile_names.each do |service_profile_name| #Ugly...refactor
156
+ hostnames = service_profile_name
157
+ hostnames.each do |host_name|
158
+ @host = host_name
159
+ end
160
+ end
161
+ vnics = extracted_service_profile_names.to_s.scan(/ether-vNIC-(\w+)/)
162
+ vnics.each do |vnic| #Ugly...refactor
163
+ assgined_vnics = vnic
164
+ assgined_vnics.each do |vnic|
165
+ @vnic = vnic
166
+ end
167
+ end
168
+ macpool_list << "#{@host}"
169
+ macpool_list << "#{@vnic}"
170
+ macpool_list << begin
171
+ state = "#{macpool.attributes["assigned"]}"
172
+ case state
173
+ when 'yes'
174
+ ui.color(state, :green)
175
+ when 'assigning'
176
+ ui.color(state, :yellow)
177
+ else
178
+ ui.color(state, :red)
179
+ end
180
+ end
181
+ end
182
+ puts ui.list(macpool_list, :uneven_columns_across, 5)
183
+ else
184
+ puts "Incorrect options. Please make sure you are using one of the following: mac,uuid,wwpn"
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -45,6 +47,7 @@ class Chef
45
47
  def run
46
48
  $stdout.sync = true
47
49
 
50
+ #TBD
48
51
 
49
52
  end
50
53
 
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,7 +29,7 @@ class Chef
27
29
 
28
30
  def run
29
31
 
30
-
32
+ #TBD
31
33
 
32
34
  end
33
35
 
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,7 @@
1
1
  # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
2
3
  # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
3
5
  # License:: Apache License, Version 2.0
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +38,7 @@ class Chef
36
38
 
37
39
  option :config,
38
40
  :long => "--config-item CONFIGIETM",
39
- :description => "The item to configure which includes ntp, timezone, power, chassis-discovery",
41
+ :description => "The item to configure which includes syslog, ntp, timezone, power, chassis-discovery, local-disk-policy",
40
42
  :proc => Proc.new { |f| Chef::Config[:knife][:config] = f }
41
43
 
42
44
  option :power,
@@ -59,12 +61,55 @@ class Chef
59
61
  :description => "The timezone for this UCS Domain",
60
62
  :proc => Proc.new { |f| Chef::Config[:knife][:timezone] = f }
61
63
 
64
+ option :localdiskpolicy,
65
+ :long => "--local-disk-policy POLICY",
66
+ :description => "The local disk policy to use: no-local-storage,any-configuration,no-raid,raid-1",
67
+ :proc => Proc.new { |f| Chef::Config[:knife][:localdiskpolicy] = f }
68
+
69
+
70
+ option :org,
71
+ :long => "--org ORG",
72
+ :description => "The organization to use",
73
+ :proc => Proc.new { |f| Chef::Config[:knife][:org] = f }
74
+
75
+ option :syslogserver,
76
+ :long => "--syslog-server SYSLOGSERVER",
77
+ :description => "The syslog server to use <hostname or IP>",
78
+ :proc => Proc.new { |f| Chef::Config[:knife][:syslogserver] = f }
79
+
80
+ option :syslogfacility,
81
+ :long => "--syslog-facility SYSLOGFACILITY",
82
+ :description => "The syslog facility to use <local0-local7>",
83
+ :proc => Proc.new { |f| Chef::Config[:knife][:syslogfacility] = f }
84
+
85
+ option :syslogseverity,
86
+ :long => "--syslog-severity SYSLOGSEVERITY",
87
+ :description => "The syslog severity level to use <debugging,emergencies,information,alerts,warnings,errors,critical>",
88
+ :proc => Proc.new { |f| Chef::Config[:knife][:syslogseverity] = f }
62
89
 
63
90
  def run
64
91
  $stdout.sync = true
65
92
 
66
- config_item = "#{Chef::Config[:knife][:config]}"
93
+ config_item = "#{Chef::Config[:knife][:config]}".downcase
67
94
  case config_item
95
+ when 'syslog'
96
+ json = { :syslog_server => Chef::Config[:knife][:syslogserver],
97
+ :facility => Chef::Config[:knife][:syslogfacility],
98
+ :severity => Chef::Config[:knife][:syslogseverity] }.to_json
99
+
100
+ xml_response = provisioner.set_syslog_server(json)
101
+ xml_doc = Nokogiri::XML(xml_response)
102
+
103
+ xml_doc.xpath("configConfMos/outConfigs/pair/commSyslogClient").each do |syslog|
104
+ puts ''
105
+ puts "Syslog Server: #{ui.color("#{syslog.attributes['hostname']}", :blue)} status: #{ui.color("#{syslog.attributes['status']}", :green)}"
106
+ end
107
+
108
+
109
+ xml_doc.xpath("configConfMos").each do |syslog|
110
+ puts "#{syslog.attributes['errorCode']} #{ui.color("#{syslog.attributes['errorDescr']}", :red)}"
111
+ end
112
+
68
113
  when 'ntp'
69
114
  json = { :ntp_server => Chef::Config[:knife][:ntp] }.to_json
70
115
 
@@ -73,10 +118,10 @@ class Chef
73
118
 
74
119
  xml_doc.xpath("configConfMos/outConfigs/pair/commNtpProvider").each do |ntp|
75
120
  puts ''
76
- puts "NTP Server: #{ui.color("#{ntp.attributes['name']}", :magenta)} status: #{ui.color("#{ntp.attributes['status']}", :green)}"
121
+ puts "NTP Server: #{ui.color("#{ntp.attributes['name']}", :blue)} status: #{ui.color("#{ntp.attributes['status']}", :green)}"
77
122
  end
78
123
 
79
- #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
124
+
80
125
  xml_doc.xpath("configConfMos").each do |ntp|
81
126
  puts "#{ntp.attributes['errorCode']} #{ui.color("#{ntp.attributes['errorDescr']}", :red)}"
82
127
  end
@@ -89,10 +134,10 @@ class Chef
89
134
 
90
135
  xml_doc.xpath("configConfMos/outConfigs/pair/computePsuPolicy").each do |power|
91
136
  puts ''
92
- puts "Power Policy: #{ui.color("#{power.attributes['name']}", :magenta)} status: #{ui.color("#{power.attributes['status']}", :green)}"
137
+ puts "Power Policy: #{ui.color("#{power.attributes['name']}", :blue)} status: #{ui.color("#{power.attributes['status']}", :green)}"
93
138
  end
94
139
 
95
- #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
140
+
96
141
  xml_doc.xpath("configConfMos").each do |power|
97
142
  puts "#{power.attributes['errorCode']} #{ui.color("#{power.attributes['errorDescr']}", :red)}"
98
143
  end
@@ -105,10 +150,10 @@ class Chef
105
150
 
106
151
  xml_doc.xpath("configConfMos/outConfigs/pair/computeChassisDiscPolicy").each do |chassis|
107
152
  puts ''
108
- puts "Chassis Discovery Policy: #{ui.color("#{chassis.attributes['action']}", :magenta)} status: #{ui.color("#{chassis.attributes['status']}", :green)}"
153
+ puts "Chassis Discovery Policy: #{ui.color("#{chassis.attributes['action']}", :blue)} status: #{ui.color("#{chassis.attributes['status']}", :green)}"
109
154
  end
110
155
 
111
- #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
156
+
112
157
  xml_doc.xpath("configConfMos").each do |chassis|
113
158
  puts "#{chassis.attributes['errorCode']} #{ui.color("#{chassis.attributes['errorDescr']}", :red)}"
114
159
  end
@@ -121,19 +166,37 @@ class Chef
121
166
 
122
167
  xml_doc.xpath("configConfMos/outConfigs/pair/commDateTime").each do |timezone|
123
168
  puts ''
124
- puts "Timezone: #{ui.color("#{timezone.attributes['timezone']}", :magenta)} status: #{ui.color("#{timezone.attributes['status']}", :green)}"
169
+ puts "Timezone: #{ui.color("#{timezone.attributes['timezone']}", :blue)} status: #{ui.color("#{timezone.attributes['status']}", :green)}"
125
170
  end
126
171
 
127
- #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
172
+
128
173
  xml_doc.xpath("configConfMos").each do |timezone|
129
174
  puts "#{timezone.attributes['errorCode']} #{ui.color("#{timezone.attributes['errorDescr']}", :red)}"
130
175
  end
176
+
177
+ when 'local-disk-policy'
178
+ json = { :local_disk_policy => Chef::Config[:knife][:localdiskpolicy], :org => Chef::Config[:knife][:org] }.to_json
179
+
180
+
181
+ xml_response = provisioner.set_local_disk_policy(json)
182
+ xml_doc = Nokogiri::XML(xml_response)
183
+
184
+ xml_doc.xpath("configConfMos/outConfigs/pair/storageLocalDiskConfigPolicy").each do |localdiskpolicy|
185
+ puts ''
186
+ puts "Local Disk Policy: #{ui.color("#{localdiskpolicy.attributes['mode']}", :blue)} status: #{ui.color("#{localdiskpolicy.attributes['status']}", :green)}"
187
+ end
188
+
189
+
190
+ xml_doc.xpath("configConfMos").each do |localdiskpolicy|
191
+ puts "#{localdiskpolicy.attributes['errorCode']} #{ui.color("#{localdiskpolicy.attributes['errorDescr']}", :red)}"
192
+ end
193
+
194
+
131
195
  else
132
196
  puts ''
133
- puts "Incorrect options. Please make sure you are using one of the following: ntp,timezone,power,chassis-discovery"
197
+ puts "Incorrect options. Type --help to list options"
134
198
  puts ''
135
199
  end
136
-
137
200
  end
138
201
  end
139
202
  end
@@ -0,0 +1,174 @@
1
+ # Author:: Murali Raju (<murali.raju@appliv.com>)
2
+ # Author:: Velankani Engineering <eng@velankani.net>
3
+ # Copyright:: Copyright (c) 2012 Murali Raju.
4
+ # Copyright:: Copyright (c) 2012 Velankani Information Systems, Inc
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/knife/ucs_base'
21
+
22
+ class Chef
23
+ class Knife
24
+ class UcsTemplateCreate < Knife
25
+
26
+ include Knife::UCSBase
27
+
28
+ deps do
29
+ require 'readline'
30
+ require 'chef/json_compat'
31
+ require 'chef/knife/bootstrap'
32
+ Chef::Knife::Bootstrap.load_deps
33
+ end
34
+
35
+ banner "knife ucs template create (options)"
36
+
37
+ attr_accessor :initial_sleep_delay
38
+
39
+ option :template,
40
+ :long => "--template-type TEMPLATE",
41
+ :description => "The template type <vnic,vhba,serviceprofile>",
42
+ :proc => Proc.new { |f| Chef::Config[:knife][:template] = f }
43
+
44
+ option :name,
45
+ :long => "--template-name TEMPLATENAME",
46
+ :description => "The template name",
47
+ :proc => Proc.new { |f| Chef::Config[:knife][:name] = f }
48
+
49
+ option :pool,
50
+ :long => "--pool-name POOLNAME",
51
+ :description => "The pool name to use for this template <macpool, wwnnpool, wwpnpool>",
52
+ :proc => Proc.new { |f| Chef::Config[:knife][:pool] = f }
53
+
54
+ option :fabric,
55
+ :long => "--fabric FABRIC",
56
+ :description => "Fabric: A or B switch",
57
+ :proc => Proc.new { |f| Chef::Config[:knife][:fabric] = f }
58
+
59
+ option :org,
60
+ :long => "--org ORG",
61
+ :description => "The organization to use",
62
+ :proc => Proc.new { |f| Chef::Config[:knife][:org] = f }
63
+
64
+ option :vlans,
65
+ :long => "--vlans VLANS",
66
+ :description => "The vlans IDs to use separated by commas <vlan1,vlan2,vlan3>",
67
+ :proc => Proc.new { |f| Chef::Config[:knife][:vlans] = f }
68
+
69
+ option :vsan,
70
+ :long => "--vsan-name VSAN",
71
+ :description => "The vsan name to use",
72
+ :proc => Proc.new { |f| Chef::Config[:knife][:vsan] = f }
73
+
74
+ option :native,
75
+ :long => "--native-vlan VLAN",
76
+ :description => "The native vlan name",
77
+ :proc => Proc.new { |f| Chef::Config[:knife][:native] = f }
78
+
79
+ option :mtu,
80
+ :long => "--mtu MTU",
81
+ :description => "The MTU value",
82
+ :proc => Proc.new { |f| Chef::Config[:knife][:mtu] = f }
83
+
84
+ def run
85
+ $stdout.sync = true
86
+
87
+ template_type = "#{Chef::Config[:knife][:template]}".downcase
88
+ case template_type
89
+ when 'vnic'
90
+
91
+ json = { :vnic_template_name => Chef::Config[:knife][:name], :vnic_template_mac_pool => Chef::Config[:knife][:pool],
92
+ :switch => Chef::Config[:knife][:fabric], :org => Chef::Config[:knife][:org], :vnic_template_VLANs => Chef::Config[:knife][:vlans],
93
+ :vnic_template_native_VLAN => Chef::Config[:knife][:native], :vnic_template_mtu => Chef::Config[:knife][:mtu] }.to_json
94
+
95
+ xml_response = provisioner.set_vnic_template(json)
96
+ xml_doc = Nokogiri::XML(xml_response)
97
+
98
+ xml_doc.xpath("configConfMos/outConfigs/pair/vnicLanConnTempl").each do |vnic|
99
+ puts ''
100
+ puts "vNIC Template: #{ui.color("#{vnic.attributes['name']}", :blue)} Type: #{ui.color("#{vnic.attributes['templType']}", :blue)}" +
101
+ " Fabric: #{ui.color("#{vnic.attributes['switchId']}", :blue)} status: #{ui.color("#{vnic.attributes['status']}", :green)}"
102
+ end
103
+
104
+ #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
105
+ xml_doc.xpath("configConfMos").each do |vnic|
106
+ puts "#{vnic.attributes['errorCode']} #{ui.color("#{vnic.attributes['errorDescr']}", :red)}"
107
+ end
108
+
109
+ when 'vhba'
110
+
111
+ json = { :vbha_template_name => Chef::Config[:knife][:name], :wwpn_pool => Chef::Config[:knife][:pool],
112
+ :switch => Chef::Config[:knife][:fabric], :vsan_name => Chef::Config[:knife][:vsan], :org => Chef::Config[:knife][:org] }.to_json
113
+
114
+
115
+ #puts provisioner.set_vhba_template(json)
116
+ xml_response = provisioner.set_vhba_template(json)
117
+ xml_doc = Nokogiri::XML(xml_response)
118
+
119
+ xml_doc.xpath("configConfMos/outConfigs/pair/vnicSanConnTempl").each do |vnic|
120
+ puts ''
121
+ puts "vHBA Template: #{ui.color("#{vnic.attributes['name']}", :blue)} Type: #{ui.color("#{vnic.attributes['templType']}", :blue)}" +
122
+ " Fabric: #{ui.color("#{vnic.attributes['switchId']}", :blue)} status: #{ui.color("#{vnic.attributes['status']}", :green)}"
123
+ end
124
+
125
+ #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
126
+ xml_doc.xpath("configConfMos").each do |vnic|
127
+ puts "#{vnic.attributes['errorCode']} #{ui.color("#{vnic.attributes['errorDescr']}", :red)}"
128
+ end
129
+
130
+ when 'serviceprofile'
131
+
132
+ json = { :service_profile_template_name => Chef::Config[:knife][:name], :service_profile_template_boot_policy => Chef::Config[:knife][:bootpolicy],
133
+ :service_profile_template_host_fw_policy => Chef::Config[:knife][:hostfwpolicy], :service_profile_template_mgmt_fw_policy => Chef::Config[:knife][:mgmtfwpolicy],
134
+ :org => Chef::Config[:knife][:org] }.to_json
135
+ #
136
+ # service_profile_template_name = JSON.parse(json)['service_profile_template_name']
137
+ # service_profile_template_boot_policy = JSON.parse(json)['service_profile_template_boot_policy']
138
+ # service_profile_template_host_fw_policy = JSON.parse(json)['service_profile_template_host_fw_policy']
139
+ # service_profile_template_mgmt_fw_policy = JSON.parse(json)['service_profile_template_mgmt_fw_policy']
140
+ # service_profile_template_uuid_pool = JSON.parse(json)['service_profile_template_uuid_pool']
141
+ # service_profile_template_vnics_a = JSON.parse(json)['service_profile_template_vnics_a'].split(',')
142
+ # service_profile_template_vnic_a_template = JSON.parse(json)['service_profile_template_vnic_a_template']
143
+ # service_profile_template_vnics_b = JSON.parse(json)['service_profile_template_vnics_b'].split(',')
144
+ # service_profile_template_vnic_b_template = JSON.parse(json)['service_profile_template_vnic_b_template'].to_s
145
+ # service_profile_template_wwnn_pool = JSON.parse(json)['service_profile_template_wwnn_pool'].to_s
146
+ # service_profile_template_vhba_a = JSON.parse(json)['service_profile_template_vhba_a']
147
+ # service_profile_template_vhba_a_template = JSON.parse(json)['service_profile_template_vhba_a_template']
148
+ # service_profile_template_vhba_b = JSON.parse(json)['service_profile_template_vhba_b'].to_s
149
+ # service_profile_template_vhba_b_template = JSON.parse(json)['service_profile_template_vhba_b_template'].to_s
150
+ # org = JSON.parse(json)['org'].to_s
151
+ #
152
+
153
+ #puts provisioner.set_vhba_template(json)
154
+ xml_response = provisioner.set_vhba_template(json)
155
+ xml_doc = Nokogiri::XML(xml_response)
156
+
157
+ xml_doc.xpath("configConfMos/outConfigs/pair/vnicSanConnTempl").each do |vnic|
158
+ puts ''
159
+ puts "vHBA Template: #{ui.color("#{vnic.attributes['name']}", :blue)} Type: #{ui.color("#{vnic.attributes['templType']}", :blue)}" +
160
+ " Fabric: #{ui.color("#{vnic.attributes['switchId']}", :blue)} status: #{ui.color("#{vnic.attributes['status']}", :green)}"
161
+ end
162
+
163
+ #Ugly...refactor later to parse error with better exception handling. Nokogiri xpath search for elements might be an option
164
+ xml_doc.xpath("configConfMos").each do |vnic|
165
+ puts "#{vnic.attributes['errorCode']} #{ui.color("#{vnic.attributes['errorDescr']}", :red)}"
166
+ end
167
+ else
168
+ "Incorrect options. Please make sure you are using one of the following: vnic,vhba,serviceprofile"
169
+ end
170
+
171
+ end
172
+ end
173
+ end
174
+ end