auser-poolparty 0.2.60 → 0.2.61
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/Manifest.txt +2 -0
- data/README.txt +2 -0
- data/bin/cloud-ensure-provisioning +8 -2
- data/bin/cloud-provision +1 -0
- data/bin/pool-list +10 -2
- data/bin/server-send-command +18 -0
- data/bin/server-update-hosts +47 -0
- data/lib/poolparty.rb +1 -1
- data/lib/poolparty/aska/aska.rb +1 -1
- data/lib/poolparty/base_packages/haproxy.rb +2 -2
- data/lib/poolparty/base_packages/poolparty.rb +14 -19
- data/lib/poolparty/core/object.rb +7 -4
- data/lib/poolparty/helpers/console.rb +4 -0
- data/lib/poolparty/helpers/optioner.rb +3 -0
- data/lib/poolparty/helpers/provisioners/master.rb +18 -15
- data/lib/poolparty/helpers/provisioners/slave.rb +2 -1
- data/lib/poolparty/modules/cloud_resourcer.rb +27 -8
- data/lib/poolparty/modules/method_missing_sugar.rb +1 -1
- data/lib/poolparty/net/remote.rb +3 -0
- data/lib/poolparty/net/remote_bases/ec2.rb +6 -3
- data/lib/poolparty/net/remote_instance.rb +9 -3
- data/lib/poolparty/net/remoter.rb +8 -39
- data/lib/poolparty/net/remoter_base.rb +4 -9
- data/lib/poolparty/pool/base.rb +4 -3
- data/lib/poolparty/pool/cloud.rb +19 -23
- data/lib/poolparty/pool/plugin.rb +3 -27
- data/lib/poolparty/pool/plugin_model.rb +6 -8
- data/lib/poolparty/pool/pool.rb +15 -4
- data/lib/poolparty/pool/resource.rb +5 -10
- data/lib/poolparty/pool/resources/class_package.rb +6 -4
- data/lib/poolparty/pool/resources/conditional.rb +2 -3
- data/lib/poolparty/templates/puppetrerun +1 -13
- data/lib/poolparty/templates/puppetrunner +1 -12
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +6 -2
- data/spec/poolparty/aska/aska_spec.rb +0 -8
- data/spec/poolparty/helpers/provisioner_base_spec.rb +2 -0
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +2 -2
- data/spec/poolparty/net/remoter_spec.rb +0 -106
- data/spec/poolparty/pool/base_spec.rb +0 -3
- data/spec/poolparty/pool/cloud_spec.rb +10 -19
- data/spec/poolparty/pool/plugin_spec.rb +2 -2
- data/spec/poolparty/pool/pool_spec.rb +16 -1
- data/spec/poolparty/pool/resource_spec.rb +1 -1
- metadata +6 -2
@@ -108,10 +108,13 @@ module PoolParty
|
|
108
108
|
# Take the options of the parents
|
109
109
|
set_vars_from_options(opts) unless opts.empty?
|
110
110
|
set_resource_parent(parent)
|
111
|
-
|
111
|
+
|
112
|
+
run_setup(parent, false, &block) if block
|
113
|
+
# self.run_in_context &block if block
|
112
114
|
loaded(opts, @parent)
|
113
115
|
end
|
114
116
|
|
117
|
+
# Helper to set the containing parent on the resource
|
115
118
|
def set_resource_parent(parent=nil)
|
116
119
|
if parent && parent != self
|
117
120
|
@parent = parent
|
@@ -149,15 +152,7 @@ module PoolParty
|
|
149
152
|
def custom_function(str)
|
150
153
|
self.class.custom_functions << str
|
151
154
|
end
|
152
|
-
|
153
|
-
def cloud
|
154
|
-
@p = parent
|
155
|
-
while !@p.is_a?(PoolParty::Cloud)
|
156
|
-
@p = @p.parent
|
157
|
-
end
|
158
|
-
@p
|
159
|
-
end
|
160
|
-
|
155
|
+
|
161
156
|
def self.custom_functions_to_string(pre="")
|
162
157
|
returning Array.new do |output|
|
163
158
|
PoolParty::Resources.available_custom_resources.each do |resource|
|
@@ -4,7 +4,7 @@ module PoolParty
|
|
4
4
|
# Wrap all the resources into a class package from
|
5
5
|
def classpackage_with_self(parent=self, &block)
|
6
6
|
@cp = PoolParty::Resources::Classpackage.new(parent.options, parent, &block)
|
7
|
-
@cp.
|
7
|
+
@cp.run_in_context {@resources = parent.resources}
|
8
8
|
# parent.instance_eval {@resources = nil}
|
9
9
|
@cp
|
10
10
|
end
|
@@ -17,9 +17,11 @@ module PoolParty
|
|
17
17
|
|
18
18
|
def initialize(opts={}, parent=self, &block)
|
19
19
|
# Take the options of the parents
|
20
|
-
set_parent(parent, false) if parent
|
20
|
+
# set_parent(parent, false) if parent
|
21
21
|
set_vars_from_options(opts) unless opts.empty?
|
22
|
-
self.instance_eval &block if block
|
22
|
+
# self.instance_eval &block if block
|
23
|
+
run_setup(parent, &block) if block
|
24
|
+
# self.run_in_context &block if block
|
23
25
|
# store_block(&block)
|
24
26
|
loaded
|
25
27
|
end
|
@@ -38,7 +40,7 @@ module PoolParty
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def name(*args)
|
41
|
-
args.empty? ? (@name || parent.name || "custom_#{Time.now.to_i}") : @name ||= args.first
|
43
|
+
args.empty? ? (@name || (!parent.nil? && parent.name) || "custom_#{Time.now.to_i}") : @name ||= args.first
|
42
44
|
end
|
43
45
|
def printable?
|
44
46
|
false
|
@@ -12,10 +12,9 @@ module PoolParty
|
|
12
12
|
def execute_if(attr_s="$hostname", comparison="==", str="", cust_opts={}, parent=self, &block)
|
13
13
|
# parent = parent.is_a?(PoolParty::Cloud::Cloud) ? parent : parent.parent
|
14
14
|
opts = {:attribute => attr_s, :equal => str, :comparison => comparison}.merge(cust_opts)
|
15
|
-
options = parent.respond_to?(:options) ? parent.options.merge!(opts) : opts
|
15
|
+
options = (parent.respond_to?(:options) && parent) ? parent.options.merge!(opts) : opts
|
16
16
|
# @c = PoolParty::Resources::Conditional.new(options, parent, &block)
|
17
|
-
|
18
|
-
# @c
|
17
|
+
conditional(options, parent, &block)
|
19
18
|
end
|
20
19
|
|
21
20
|
class Conditional < Resource
|
@@ -1,16 +1,4 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
|
3
3
|
. /etc/profile
|
4
|
-
|
5
|
-
then
|
6
|
-
echo '';
|
7
|
-
else
|
8
|
-
ps aux | grep puppetmaster | awk '{print $2}' | xargs kill; /etc/init.d/puppetmaster stop; rm -rf /etc/puppet/ssl; /etc/init.d/puppetmaster start
|
9
|
-
if [ $(/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master) ];
|
10
|
-
then
|
11
|
-
echo '';
|
12
|
-
else
|
13
|
-
# Try again
|
14
|
-
/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1
|
15
|
-
fi
|
16
|
-
fi
|
4
|
+
/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master
|
@@ -1,15 +1,4 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
|
3
3
|
. /etc/profile
|
4
|
-
|
5
|
-
if [ $(hostname) -eq "master"];
|
6
|
-
then
|
7
|
-
/bin/sh puppetrerun
|
8
|
-
else
|
9
|
-
if [ $(/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master) ];
|
10
|
-
then
|
11
|
-
echo '';
|
12
|
-
else
|
13
|
-
/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master
|
14
|
-
fi
|
15
|
-
fi
|
4
|
+
/usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master
|
data/lib/poolparty/version.rb
CHANGED
data/poolparty.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poolparty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.61
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-11-
|
12
|
+
date: 2008-11-17 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -87,6 +87,7 @@ executables:
|
|
87
87
|
- server-list-active
|
88
88
|
- server-list-responding
|
89
89
|
- server-rerun
|
90
|
+
- server-send-command
|
90
91
|
- server-show-stats
|
91
92
|
- server-start-client
|
92
93
|
- server-start-master
|
@@ -94,6 +95,7 @@ executables:
|
|
94
95
|
- server-stop-client
|
95
96
|
- server-stop-master
|
96
97
|
- server-stop-node
|
98
|
+
- server-update-hosts
|
97
99
|
extensions: []
|
98
100
|
|
99
101
|
extra_rdoc_files:
|
@@ -143,6 +145,7 @@ files:
|
|
143
145
|
- bin/server-list-active
|
144
146
|
- bin/server-list-responding
|
145
147
|
- bin/server-rerun
|
148
|
+
- bin/server-send-command
|
146
149
|
- bin/server-show-stats
|
147
150
|
- bin/server-start-client
|
148
151
|
- bin/server-start-master
|
@@ -150,6 +153,7 @@ files:
|
|
150
153
|
- bin/server-stop-client
|
151
154
|
- bin/server-stop-master
|
152
155
|
- bin/server-stop-node
|
156
|
+
- bin/server-update-hosts
|
153
157
|
- config/hoe.rb
|
154
158
|
- config/requirements.rb
|
155
159
|
- examples/basic.rb
|
@@ -13,14 +13,6 @@ describe "Rules" do
|
|
13
13
|
@car = Car.new
|
14
14
|
end
|
15
15
|
describe "malformed rules" do
|
16
|
-
it "should not put a malformed rule in the rules" do
|
17
|
-
lambda {
|
18
|
-
@plaster = Class.new do
|
19
|
-
include Aska
|
20
|
-
rules :names, "x runs b"
|
21
|
-
end
|
22
|
-
}.should raise_error()
|
23
|
-
end
|
24
16
|
[
|
25
17
|
"k > 10",
|
26
18
|
"x == 2",
|
@@ -100,6 +100,8 @@ describe "ProvisionerBase" do
|
|
100
100
|
stub_list_from_remote_for(@cloud)
|
101
101
|
@cloud.stub!(:keypair).and_return "fake_keypair"
|
102
102
|
@cloud.stub!(:keypair_path).and_return "~/.ec2/fake_keypair"
|
103
|
+
@cloud.stub!(:other_clouds).and_return []
|
104
|
+
@cloud.stub!(:expand_when).and_return "cpu > 10"
|
103
105
|
Provisioner::Master.stub!(:new).and_return @provisioner
|
104
106
|
@cloud.stub!(:copy_file_to_storage_directory).and_return true
|
105
107
|
@cloud.stub!(:rsync_storage_files_to).and_return true
|
@@ -98,12 +98,12 @@ describe "CloudResourcer" do
|
|
98
98
|
@tc.should_receive(:configure).with(@testparent.options)
|
99
99
|
end
|
100
100
|
after do
|
101
|
-
@tc.
|
101
|
+
@tc.run_setup(@testparent)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
describe "parent's services" do
|
105
105
|
before(:each) do
|
106
|
-
@tc.
|
106
|
+
@tc.run_setup(@testparent)
|
107
107
|
end
|
108
108
|
it "should set the parent" do
|
109
109
|
@tc.parent.should == @testparent
|
@@ -91,111 +91,5 @@ describe "Remoter" do
|
|
91
91
|
@tc.launch_and_configure_master!
|
92
92
|
end
|
93
93
|
end
|
94
|
-
describe "listing" do
|
95
|
-
before(:each) do
|
96
|
-
@loc = Base.storage_directory + "/tc-instances.list"
|
97
|
-
@locations = [@loc]
|
98
|
-
@tc.stub!(:local_instances_list_file_locations).and_return @locations
|
99
|
-
end
|
100
|
-
it "should have the method list_from_local available" do
|
101
|
-
TestClass.respond_to?(:list_from_local).should == true
|
102
|
-
end
|
103
|
-
it "should have the method list_from_remote available" do
|
104
|
-
TestClass.respond_to?(:list_from_remote).should == true
|
105
|
-
end
|
106
|
-
describe "remote" do
|
107
|
-
before(:each) do
|
108
|
-
@tc.stub!(:list_of_instances).and_return @sample_instances_list
|
109
|
-
@tc.stub!(:local_instances_list_file_locations).and_return [
|
110
|
-
"#{Base.storage_directory}/tc-instances.list"
|
111
|
-
]
|
112
|
-
end
|
113
|
-
it "should call list_of_instances when trying to list from remote" do
|
114
|
-
TestClass.should_receive(:list_of_instances).once.and_return @sample_instances_list
|
115
|
-
TestClass.list_from_remote
|
116
|
-
end
|
117
|
-
it "should create a new RemoteInstance for each hashed instance" do
|
118
|
-
PoolParty::Remote::RemoteInstance.should_receive(:new).exactly(2).and_return @ri
|
119
|
-
@tc.list_from_remote
|
120
|
-
end
|
121
|
-
it "should return a string" do
|
122
|
-
@tc.list_from_remote.class.should == Array
|
123
|
-
end
|
124
|
-
it "should contain the master in the listing" do
|
125
|
-
@tc.list_from_remote.first.name.should == "master"
|
126
|
-
@tc.list_from_remote.first.master?.should == true
|
127
|
-
end
|
128
|
-
it "should write to the first (preferred) local instances list file location for next time" do
|
129
|
-
@tc.list_from_remote(:cache => true)
|
130
|
-
::File.file?(@tc.local_instances_list_file_locations.first).should == true
|
131
|
-
end
|
132
|
-
after(:all) do
|
133
|
-
# Cleanup after ourselves
|
134
|
-
# FileUtils.rm @loc if ::File.file?(@loc)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
describe "local" do
|
138
|
-
describe "listing" do
|
139
|
-
before(:each) do
|
140
|
-
stub_list_from_remote_for(@tc)
|
141
|
-
@tc.stub!(:list_of_instances).and_return([@ri])
|
142
|
-
end
|
143
|
-
it "should call local_instances_list_file_locations" do
|
144
|
-
@tc.should_receive(:local_instances_list_file_locations).at_least(1).and_return [@loc]
|
145
|
-
end
|
146
|
-
it "should call File.file? on the local_instances_list_file_locations locations" do
|
147
|
-
File.should_receive(:file?).with(@loc).at_least(1).and_return false
|
148
|
-
end
|
149
|
-
it "should call get_working_listing_file to get the working local instance file" do
|
150
|
-
@tc.should_receive(:get_working_listing_file).at_least(1).and_return nil
|
151
|
-
end
|
152
|
-
after(:each) do
|
153
|
-
@tc.list_from_local
|
154
|
-
end
|
155
|
-
end
|
156
|
-
describe "with listing" do
|
157
|
-
before(:each) do
|
158
|
-
str = "master 192.168.0.1
|
159
|
-
node1 192.168.0.2"
|
160
|
-
@loc.stub!(:read).and_return str
|
161
|
-
TestClass.stub!(:open).and_return @loc
|
162
|
-
TestClass.stub!(:get_working_listing_file).and_return @loc
|
163
|
-
@ri = PoolParty::Remote::RemoteInstance.new({:ip => "192.168.0.1", :name => "master"})
|
164
|
-
PoolParty::Remote::RemoteInstance.stub!(:new).and_return @ri
|
165
|
-
stub_list_from_remote_for(@tc)
|
166
|
-
end
|
167
|
-
it "should call open on the get_working_listing_file" do
|
168
|
-
@tc.should_receive(:open).with(@loc).at_least(1).and_return @loc
|
169
|
-
@tc.list_from_local
|
170
|
-
end
|
171
|
-
it "should create a new RemoteInstance for each line in the file" do
|
172
|
-
PoolParty::Remote::RemoteInstance.should_receive(:new).at_least(2)
|
173
|
-
@tc.list_from_local
|
174
|
-
end
|
175
|
-
it "should return a string" do
|
176
|
-
@tc.list_from_local.class.should == Array
|
177
|
-
end
|
178
|
-
it "should have the name of the master and the ip in the list_from_local" do
|
179
|
-
@tc.list_from_local[0].name.should == "master"
|
180
|
-
end
|
181
|
-
it "should have name in the listing" do
|
182
|
-
@ri.should_receive(:name).at_least(1).and_return "node0"
|
183
|
-
@ri.to_s
|
184
|
-
end
|
185
|
-
it "should have the ip in the listing" do
|
186
|
-
@ri.should_receive(:ip).at_least(1).and_return "127.0.0.1"
|
187
|
-
@ri.to_s
|
188
|
-
end
|
189
|
-
it "should call to_s on the RemoteInstance instances" do
|
190
|
-
PoolParty::Remote::RemoteInstance.should_receive(:new).at_least(2).and_return @ri
|
191
|
-
@ri.should_receive(:to_s).at_least(1)
|
192
|
-
@ri.to_s
|
193
|
-
end
|
194
|
-
end
|
195
|
-
after(:each) do
|
196
|
-
@tc.list_from_local
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
94
|
|
201
95
|
end
|
@@ -5,9 +5,6 @@ describe "Base" do
|
|
5
5
|
ENV.stub!(:[]).with("AWS_ACCESS_KEY_ID").and_return "KEY"
|
6
6
|
ENV.stub!(:[]).with("AWS_SECRET_ACCESS_KEY").and_return "SECRET"
|
7
7
|
end
|
8
|
-
it "should set the environment, if not set to production" do
|
9
|
-
Base.environment.should == "production"
|
10
|
-
end
|
11
8
|
it "should set the user to root" do
|
12
9
|
Base.user.should == "root"
|
13
10
|
end
|
@@ -185,6 +185,10 @@ describe "Cloud" do
|
|
185
185
|
it "should it should have the method build_manifest" do
|
186
186
|
@cloud.respond_to?(:build_manifest).should == true
|
187
187
|
end
|
188
|
+
it "should make a new 'haproxy' class" do
|
189
|
+
PoolPartyHaproxyClass.should_receive(:new).once
|
190
|
+
@cloud.add_poolparty_base_requirements
|
191
|
+
end
|
188
192
|
it "should have 3 resources" do
|
189
193
|
@cloud.add_poolparty_base_requirements
|
190
194
|
@cloud.number_of_resources.should > 2
|
@@ -223,7 +227,7 @@ describe "Cloud" do
|
|
223
227
|
describe "after adding" do
|
224
228
|
before(:each) do
|
225
229
|
stub_list_from_remote_for(@cloud)
|
226
|
-
@cloud.add_poolparty_base_requirements
|
230
|
+
@cloud.add_poolparty_base_requirements
|
227
231
|
end
|
228
232
|
it "should add resources onto the heartbeat class inside the cloud" do
|
229
233
|
@cloud.services.size.should > 0
|
@@ -260,7 +264,9 @@ describe "Cloud" do
|
|
260
264
|
node1 192.168.0.2"
|
261
265
|
@sample_instances_list = [{:ip => "192.168.0.1", :name => "master"}, {:ip => "192.168.0.2", :name => "node1"}]
|
262
266
|
@ris = @sample_instances_list.map {|h| PoolParty::Remote::RemoteInstance.new(h, @cloud) }
|
263
|
-
|
267
|
+
|
268
|
+
stub_remoter_for(@cloud)
|
269
|
+
|
264
270
|
@manifest = @cloud.build_manifest
|
265
271
|
end
|
266
272
|
it "should return a string when calling build_manifest" do
|
@@ -272,8 +278,8 @@ describe "Cloud" do
|
|
272
278
|
it "should have the comment of a package in the manifest" do
|
273
279
|
@manifest.should =~ /package \{/
|
274
280
|
end
|
275
|
-
it "should have the comment for
|
276
|
-
@manifest.should =~ /
|
281
|
+
it "should have the comment for haproxy in the manifest" do
|
282
|
+
@manifest.should =~ /haproxy/
|
277
283
|
end
|
278
284
|
it "should include the poolparty gem" do
|
279
285
|
@manifest.should =~ /package \{/
|
@@ -317,21 +323,6 @@ describe "Cloud" do
|
|
317
323
|
@cloud3.master.should_not be_nil
|
318
324
|
end
|
319
325
|
end
|
320
|
-
|
321
|
-
describe "provisioning" do
|
322
|
-
it "should be able to tell that it is provisioning when setting the provisioning flag" do
|
323
|
-
@cloud.provisioning?.should == false
|
324
|
-
end
|
325
|
-
it "should be able to set it as provisioning" do
|
326
|
-
@cloud.provisioning_in_progress
|
327
|
-
@cloud.provisioning?.should == true
|
328
|
-
end
|
329
|
-
it "should be able to unset itself as provisioning" do
|
330
|
-
@cloud.provisioning_in_progress
|
331
|
-
@cloud.provisioning_complete
|
332
|
-
@cloud.provisioning?.should == false
|
333
|
-
end
|
334
|
-
end
|
335
326
|
end
|
336
327
|
end
|
337
328
|
end
|
@@ -28,8 +28,8 @@ describe "Plugin" do
|
|
28
28
|
@c.parent.should == @p
|
29
29
|
end
|
30
30
|
describe "instance" do
|
31
|
-
before(:each) do
|
32
|
-
@plugin =
|
31
|
+
before(:each) do
|
32
|
+
@plugin = @c.apache
|
33
33
|
end
|
34
34
|
it "should not be empty" do
|
35
35
|
@plugin.class.should == PoolPartyApacheClass
|
@@ -78,6 +78,21 @@ describe "Pool" do
|
|
78
78
|
@pool.maximum_instances.should == 5
|
79
79
|
end
|
80
80
|
end
|
81
|
-
end
|
81
|
+
end
|
82
|
+
describe "with clouds" do
|
83
|
+
before(:each) do
|
84
|
+
reset!
|
85
|
+
@pool = Pool.new :test do
|
86
|
+
cloud :app
|
87
|
+
cloud :db
|
88
|
+
end
|
89
|
+
end
|
90
|
+
it "should have 2 clouds in the pool when there are 2 described" do
|
91
|
+
@pool.clouds.size.should == 2
|
92
|
+
end
|
93
|
+
it "should be able to tel the other clouds from within one cloud" do
|
94
|
+
cloud(:app).other_clouds.should == [cloud(:db)]
|
95
|
+
end
|
96
|
+
end
|
82
97
|
end
|
83
98
|
end
|