knife-rackspace-cluster 0.0.5 → 0.0.6
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.
- data/lib/chef/knife/rax_cluster_base.rb +2 -3
- data/lib/chef/knife/rax_cluster_build.rb +4 -1
- data/lib/chef/knife/rax_cluster_change.rb +10 -1
- data/lib/chef/knife/rax_cluster_create.rb +32 -10
- data/lib/chef/knife/rax_cluster_delete.rb +5 -1
- data/lib/chef/knife/rax_cluster_expand.rb +5 -1
- data/lib/chef/knife/rax_cluster_list.rb +4 -2
- metadata +21 -2
@@ -107,11 +107,10 @@ class Chef
|
|
107
107
|
}
|
108
108
|
#Get to work boy! This is Ruby!
|
109
109
|
uri = URI.parse(uri)
|
110
|
-
|
111
110
|
http = Net::HTTP.new(uri.host, uri.port)
|
112
|
-
|
111
|
+
if uri.host =~ /https/
|
113
112
|
http.use_ssl = true
|
114
|
-
|
113
|
+
end
|
115
114
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
116
115
|
request = eval verbs[httpVerb]
|
117
116
|
if httpVerb == 'post' or httpVerb == 'put'
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
#=====================================================================
|
2
|
+
# Had to subclass this from knife-rackspace, neeeded to return the
|
3
|
+
# Instance data after build/bootstrap
|
4
|
+
#=====================================================================
|
2
5
|
require 'chef/knife/rackspace_server_create'
|
3
6
|
class Chef
|
4
7
|
class Knife
|
@@ -29,7 +29,11 @@ class Chef
|
|
29
29
|
:long => "--chef-env environment",
|
30
30
|
:description => "Pass a comma delimted run list --run-list 'recipe[apt],role[base]'",
|
31
31
|
:proc => Proc.new { |chef_env| Chef::Config[:knife][:chef_env] = chef_env}
|
32
|
-
|
32
|
+
#=====================================================================
|
33
|
+
# Takes an array of hashes of instance data and a block that provides
|
34
|
+
# what work should be done. This function will look up the chef object
|
35
|
+
# For the node and pass that object into the calling block.
|
36
|
+
#=====================================================================
|
33
37
|
def change_chef_vars(instances, &block)
|
34
38
|
instances.each { |inst|
|
35
39
|
query = "name:#{inst['server_name']}"
|
@@ -39,6 +43,11 @@ class Chef
|
|
39
43
|
end
|
40
44
|
}
|
41
45
|
end
|
46
|
+
#=====================================================================
|
47
|
+
# Looks up the LB meta data and grabs the server name for every node
|
48
|
+
# In the LB pool
|
49
|
+
# Looks them up in chef and changes there run_list or chef_env
|
50
|
+
#=====================================================================
|
42
51
|
def run
|
43
52
|
if !config[:run_list] and !config[:chef_env]
|
44
53
|
ui.fatal "Please specify either --run-list or --chef-env to change on your cluster"
|
@@ -66,7 +66,10 @@ class Chef
|
|
66
66
|
#:long => "--session-persistence session_persistence_on_or_off",
|
67
67
|
#:description => "Load balancer session persistence on or off",
|
68
68
|
#:proc => Proc.new { |session_persistence| Chef::Config[:knife][:session_persistence] = session_persistence}
|
69
|
-
|
69
|
+
#================================================================
|
70
|
+
# Generates a template json file in the current dir called
|
71
|
+
# map_template.json
|
72
|
+
#================================================================
|
70
73
|
def generate_map_template
|
71
74
|
file_name = "./map_template.json"
|
72
75
|
template = %q(
|
@@ -89,6 +92,12 @@ class Chef
|
|
89
92
|
|
90
93
|
File.open(file_name, 'w') { |file| file.write(template)}
|
91
94
|
end
|
95
|
+
#================================================================
|
96
|
+
# Takes instance array of hash data and creates a load balancer.
|
97
|
+
# Will put all nodes created in the LB pool (using private IP)
|
98
|
+
# Will store servers in meta data using key = server name
|
99
|
+
# value = uuid, this is for updates on chef vars on these nodes
|
100
|
+
#================================================================
|
92
101
|
def create_lb(instances)
|
93
102
|
lb_request = {
|
94
103
|
"loadBalancer" => {
|
@@ -131,14 +140,34 @@ class Chef
|
|
131
140
|
lb_details['loadBalancer']['virtualIps'].each {|lb| (lb['ipVersion'] == "IPV4") ? lb_ip = lb['address'] : "not_found"}
|
132
141
|
ui.msg "Load Balancer IP Address: #{lb_ip}"
|
133
142
|
end
|
134
|
-
|
135
|
-
|
143
|
+
#============================================================
|
144
|
+
# Parses json, creates blue_prints w/ specified chef vars
|
145
|
+
# If ruby 1.9 is used builds will be spun up with Threads
|
146
|
+
# If update_cluster is specified, an LB will not be created
|
147
|
+
# an array of instance data will be returned to the caller
|
148
|
+
#============================================================
|
136
149
|
def deploy(blue_print,update_cluster=nil)
|
137
150
|
(File.exist?(blue_print)) ? map_contents = JSON.parse(File.read(blue_print)) : map_contents = JSON.parse(blue_print)
|
138
151
|
sleep_interval = 1
|
139
152
|
instances = []
|
140
153
|
if map_contents.has_key?("blue_print")
|
141
154
|
bp_values = map_contents['blue_print']
|
155
|
+
unless bp_values.has_key?("image_ref")
|
156
|
+
ui.fatal "You must specify an image_ref, run the -G command to generate a template blueprint"
|
157
|
+
exit(1)
|
158
|
+
end
|
159
|
+
unless bp_values.has_key?("name_convention")
|
160
|
+
ui.fatal "You must specify a name_convention, run the -G command to generate a template blueprint"
|
161
|
+
exit(1)
|
162
|
+
end
|
163
|
+
unless bp_values.has_key?("flavor")
|
164
|
+
ui.fatal "You must specify a flavor, run the -G command to generate a template blueprint"
|
165
|
+
exit(1)
|
166
|
+
end
|
167
|
+
unless bp_values.has_key?("quantity")
|
168
|
+
ui.fatal "You must specify a quantity of servers, run the -G command to generate a template blueprint"
|
169
|
+
exit(1)
|
170
|
+
end
|
142
171
|
bootstrap_nodes = []
|
143
172
|
quantity = bp_values['quantity'].to_i
|
144
173
|
quantity.times do |node_name|
|
@@ -156,7 +185,6 @@ class Chef
|
|
156
185
|
rescue
|
157
186
|
ui.msg "Bootstrapping failed"
|
158
187
|
end
|
159
|
-
|
160
188
|
end
|
161
189
|
quantity.times do |times|
|
162
190
|
if quantity > 20
|
@@ -178,11 +206,7 @@ class Chef
|
|
178
206
|
else
|
179
207
|
create_lb(instances)
|
180
208
|
end
|
181
|
-
|
182
|
-
|
183
|
-
|
184
209
|
end
|
185
|
-
|
186
210
|
def run
|
187
211
|
#Generate template config
|
188
212
|
if config[:generate_map_template]
|
@@ -190,8 +214,6 @@ class Chef
|
|
190
214
|
ui.msg "Map template saved as ./map_template.json"
|
191
215
|
exit()
|
192
216
|
end
|
193
|
-
|
194
|
-
|
195
217
|
if @name_args.empty? or @name_args.size > 1
|
196
218
|
ui.fatal "Please specify a single name for your cluster"
|
197
219
|
exit(1)
|
@@ -21,7 +21,11 @@ class Chef
|
|
21
21
|
:description => "Load balancer region (only supports ORD || DFW)",
|
22
22
|
:proc => Proc.new { |lb_region| Chef::Config[:knife][:lb_region] = lb_region},
|
23
23
|
:default => "ORD"
|
24
|
-
|
24
|
+
#=====================================================================
|
25
|
+
# Looks up all nodes from lb meta data, deletes them from chef and nova
|
26
|
+
# Via knife rackspace method
|
27
|
+
# AFter node deletion it will delete the LB
|
28
|
+
#=====================================================================
|
25
29
|
def delete_cluster
|
26
30
|
lb_authenticate = authenticate()
|
27
31
|
lb_url = ""
|
@@ -34,7 +34,11 @@ class Chef
|
|
34
34
|
:description => "Load balancer region (only supports ORD || DFW)",
|
35
35
|
:proc => Proc.new { |lb_region| Chef::Config[:knife][:lb_region] = lb_region},
|
36
36
|
:default => "ORD"
|
37
|
-
|
37
|
+
#================================================================
|
38
|
+
# This will take a blueprint file and call the raxClusterCreate
|
39
|
+
# Class to handle parsing and building the nodes. It will then
|
40
|
+
# update the LB ID passed on the CLI with the nodes and meta data
|
41
|
+
#================================================================
|
38
42
|
def expand_cluster
|
39
43
|
rs_cluster = RaxClusterCreate.new
|
40
44
|
rs_cluster.config[:blue_print] = config[:blue_print]
|
@@ -20,8 +20,10 @@ class Chef
|
|
20
20
|
:proc => Proc.new { |lb_region| Chef::Config[:knife][:lb_region] = lb_region},
|
21
21
|
:default => "ORD"
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
|
24
|
+
#=====================================================================
|
25
|
+
# Looks for lb's named $variable_cluster and lists them
|
26
|
+
#=====================================================================
|
25
27
|
def run
|
26
28
|
lb_auth = authenticate
|
27
29
|
headers = {"x-auth-token" => lb_auth['auth_token'], "content-type" => "application/json"}
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-rackspace-cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- zack feldstein
|
@@ -20,6 +25,11 @@ dependencies:
|
|
20
25
|
requirements:
|
21
26
|
- - "="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 55
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 8
|
32
|
+
- 0
|
23
33
|
version: 1.8.0
|
24
34
|
type: :runtime
|
25
35
|
version_requirements: *id001
|
@@ -31,6 +41,9 @@ dependencies:
|
|
31
41
|
requirements:
|
32
42
|
- - ">="
|
33
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
34
47
|
version: "0"
|
35
48
|
type: :runtime
|
36
49
|
version_requirements: *id002
|
@@ -64,17 +77,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
77
|
requirements:
|
65
78
|
- - ">="
|
66
79
|
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
81
|
+
segments:
|
82
|
+
- 0
|
67
83
|
version: "0"
|
68
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
85
|
none: false
|
70
86
|
requirements:
|
71
87
|
- - ">="
|
72
88
|
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
73
92
|
version: "0"
|
74
93
|
requirements: []
|
75
94
|
|
76
95
|
rubyforge_project:
|
77
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.10
|
78
97
|
signing_key:
|
79
98
|
specification_version: 3
|
80
99
|
summary: Knife rax cluster
|