ucslib 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +20 -8
- data/lib/ucslib/manage.rb +14 -11
- data/lib/ucslib/parser.rb +19 -19
- data/lib/ucslib/update.rb +36 -0
- data/lib/ucslib/version.rb +1 -1
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -1,11 +1,27 @@
|
|
1
1
|
= ucslib (beta)
|
2
2
|
|
3
|
-
Ruby Client Library for Cisco UCS Manager that could be used by DevOps toolchains - Puppet or Chef and other custom tools
|
3
|
+
Ruby Client Library for Cisco UCS Manager that could be used by DevOps toolchains - Puppet or Chef and other custom tools in order to provide MaaS (Metal-as-a-Service) for installing and running OpenStack, CloudStack or Hadoop, etc on Cisco UCS. ucslib accepts JSON as configuration.
|
4
4
|
|
5
|
+
To see an example of how ucslib is being used, checkout the ucs and ucs-solo Chef Cookbooks created by Velankani Information Systems, Inc here - https://github.com/velankanisys/chef-cookbooks
|
5
6
|
|
6
|
-
|
7
|
+
In addition there is a knife plugin that use ucslib as well - https://github.com/velankanisys/knife-ucs
|
7
8
|
|
8
|
-
|
9
|
+
** Version 0.1.5 has been released **
|
10
|
+
|
11
|
+
0.1.5:
|
12
|
+
Moved update boot policy to Update instead of manage
|
13
|
+
Disabled Parser code for now to allow ucslib to work on Debian Squeeze running Ruby1.9.1
|
14
|
+
|
15
|
+
0.1.4:
|
16
|
+
Bug fixes.
|
17
|
+
|
18
|
+
0.1.3:
|
19
|
+
Host firmware XML change for UCS 2.1.
|
20
|
+
|
21
|
+
0.1.2:
|
22
|
+
Bug fixes.
|
23
|
+
|
24
|
+
0.1.1:
|
9
25
|
|
10
26
|
1. Provision has set_ vs create_ methods. Please update your apps.
|
11
27
|
2. Added Manage functions to associate service profiles to server pools
|
@@ -121,12 +137,8 @@ VLAN: 200 with name: OpenStack-Mgmt
|
|
121
137
|
|
122
138
|
== ToDo
|
123
139
|
|
124
|
-
|
140
|
+
Documentation, Documentation, Documentation!
|
125
141
|
|
126
|
-
1. Firmware Management
|
127
|
-
2. Example implementation (workflow) under examples (in progress)
|
128
|
-
3. Server Pools (in progress)
|
129
|
-
4. Service Profile Association (in progress)
|
130
142
|
|
131
143
|
|
132
144
|
== Contributing to ucslib
|
data/lib/ucslib/manage.rb
CHANGED
@@ -27,12 +27,14 @@ class UCSManage
|
|
27
27
|
|
28
28
|
|
29
29
|
def discover_state
|
30
|
-
|
30
|
+
|
31
31
|
#Start Build of the Multi-Class XML for interogating state
|
32
32
|
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
33
33
|
xml.configResolveClasses('cookie' => @cookie, 'inHierarchical' => 'false') {
|
34
34
|
xml.inIds{
|
35
35
|
xml.classId("value" => "macpoolPooled")
|
36
|
+
xml.classId("value" => "uuidpoolPooled")
|
37
|
+
xml.classId("value" => "fcpoolInitiator")
|
36
38
|
}
|
37
39
|
}
|
38
40
|
end
|
@@ -42,13 +44,13 @@ class UCSManage
|
|
42
44
|
ucs_multi_class_state_xml = xml_builder.to_xml.to_s
|
43
45
|
ucs_response_multi_class_state = RestClient.post(@url, ucs_multi_class_state_xml, :content_type => 'text/xml').body
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
Nokogiri::XML(ucs_response_multi_class_state)
|
51
|
-
|
47
|
+
#Uncomment the following to create a dump to review and debug elements
|
48
|
+
# fh = File.new("ucs_response_multiclass_state.xml", "w")
|
49
|
+
# fh.puts ucs_response_multi_class_state.inspect
|
50
|
+
# fh.close
|
51
|
+
|
52
|
+
Nokogiri::XML(ucs_response_multi_class_state)
|
53
|
+
|
52
54
|
end
|
53
55
|
|
54
56
|
|
@@ -59,8 +61,8 @@ class UCSManage
|
|
59
61
|
service_profile_mgmt_fw_policy = JSON.parse(json)['service_profile_mgmt_fw_policy']
|
60
62
|
service_profile_uuid_pool = JSON.parse(json)['service_profile_uuid_pool']
|
61
63
|
service_profile_template_to_bind = JSON.parse(json)['service_profile_template_to_bind']
|
62
|
-
service_profile_server_pool
|
63
|
-
org
|
64
|
+
service_profile_server_pool = JSON.parse(json)['service_profile_server_pool']
|
65
|
+
org = JSON.parse(json)['org']
|
64
66
|
|
65
67
|
|
66
68
|
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
@@ -91,6 +93,7 @@ class UCSManage
|
|
91
93
|
rescue Exception => e
|
92
94
|
raise "Error #{e}"
|
93
95
|
end
|
94
|
-
|
96
|
+
|
95
97
|
end
|
98
|
+
|
96
99
|
end
|
data/lib/ucslib/parser.rb
CHANGED
@@ -15,22 +15,22 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
require 'nokogiri'
|
19
|
-
|
20
|
-
class UCSParser
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
18
|
+
# require 'nokogiri'
|
19
|
+
#
|
20
|
+
# class UCSParser
|
21
|
+
# class Nokogiri::XML::Node
|
22
|
+
# TYPENAMES = {1=>'element',2=>'attribute',3=>'text',4=>'cdata',8=>'comment'}
|
23
|
+
# def to_hash
|
24
|
+
# {kind:TYPENAMES[node_type],name:name}.tap do |h|
|
25
|
+
# h.merge! nshref:namespace.href, nsprefix:namespace.prefix if namespace
|
26
|
+
# h.merge! text:text
|
27
|
+
# h.merge! attr:attribute_nodes.map(&:to_hash) if element?
|
28
|
+
# h.merge! kids:children.map(&:to_hash) if element?
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# class Nokogiri::XML::Document
|
33
|
+
# def to_hash; root.to_hash; end
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# end
|
data/lib/ucslib/update.rb
CHANGED
@@ -63,5 +63,41 @@ class UCSUpdate
|
|
63
63
|
|
64
64
|
end
|
65
65
|
|
66
|
+
def update_boot_policy_on_service_profile_template(json)
|
67
|
+
|
68
|
+
service_profile_template_name = JSON.parse(json)['service_profile_template_name']
|
69
|
+
org = JSON.parse(json)['org']
|
70
|
+
service_profile_template_mgmt_ip_pool = JSON.parse(json)['service_profile_template_mgmt_ip_pool']
|
71
|
+
service_profile_template_boot_policy = JSON.parse(json)['service_profile_template_boot_policy']
|
72
|
+
service_profile_template_host_fw_policy = JSON.parse(json)['service_profile_template_host_fw_policy']
|
73
|
+
service_profile_template_uuid_pool = JSON.parse(json)['service_profile_template_uuid_pool']
|
74
|
+
|
75
|
+
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
76
|
+
xml.configConfMos('cookie' => "#{@cookie}", 'inHierarchical' => 'false'){
|
77
|
+
xml.inConfigs{
|
78
|
+
xml.pair('key' => "org-root/org-#{org}/ls-#{service_profile_template_name}"){
|
79
|
+
xml.lsServer('agentPolicyName' => '', 'biosProfileName' => '', 'bootPolicyName' => "#{service_profile_template_boot_policy}",
|
80
|
+
'descr' => '', 'dn' => "org-root/org-#{org}/ls-#{service_profile_template_name}",
|
81
|
+
'dynamicConPolicyName' => '', 'extIPPoolName' => "#{service_profile_template_mgmt_ip_pool}",
|
82
|
+
'extIPState' => 'none', 'hostFwPolicyName' => "#{service_profile_template_host_fw_policy}",
|
83
|
+
'identPoolName' => "#{service_profile_template_uuid_pool}", 'localDiskPolicyName' => 'default', 'maintPolicyName' => 'default',
|
84
|
+
'mgmtAccessPolicyName' => '', 'mgmtFwPolicyName' => '', 'policyOwner' => 'local',
|
85
|
+
'powerPolicyName' => 'default', 'scrubPolicyName' => '', 'solPolicyName' => 'default', 'srcTemplName' => '', 'statsPolicyName' => 'default',
|
86
|
+
'status' => 'created,modified', 'usrLbl' => '', 'uuid' => '0', 'vconProfileName' => '')
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
end
|
91
|
+
#Create Template xml
|
92
|
+
update_boot_policy_on_service_profile_template_xml = xml_builder.to_xml.to_s
|
93
|
+
|
94
|
+
#Post Update Boot Policy on Service Profile Template
|
95
|
+
begin
|
96
|
+
RestClient.post(@url, update_boot_policy_on_service_profile_template_xml, :content_type => 'text/xml').body
|
97
|
+
rescue Exception => e
|
98
|
+
raise "Error #{e}"
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
66
102
|
|
67
103
|
end
|
data/lib/ucslib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ucslib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|