auser-poolparty 1.3.10 → 1.3.11
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/bin/cloud-thrift +2 -2
- data/config/jeweler.rb +0 -1
- data/examples/thrift/thrift_example.rb +2 -1
- data/lib/cloud_providers/cloud_provider_instance.rb +7 -2
- data/lib/cloud_providers/ec2/ec2.rb +3 -2
- data/lib/poolparty/cloud.rb +2 -0
- data/lib/poolparty/monitor.rb +1 -1
- data/lib/poolparty/plugins/hermes.rb +9 -4
- data/lib/poolparty/resources/file.rb +2 -2
- data/lib/poolparty/resources/link.rb +2 -1
- data/lib/proto/command_interface_handler.rb +27 -8
- data/tasks/poolparty.rake +24 -0
- data/test/lib/poolparty/cloud_test.rb +6 -1
- data/test/lib/poolparty/monitor_test.rb +1 -1
- data/test/lib/poolparty/resources/conditional_test.rb +1 -0
- metadata +1 -1
data/VERSION.yml
CHANGED
data/bin/cloud-thrift
CHANGED
@@ -60,8 +60,8 @@ EOS
|
|
60
60
|
if cmd == "query"
|
61
61
|
require "command_query_handler"
|
62
62
|
|
63
|
-
@loaded_clouds.
|
64
|
-
CommandQueryHandler.run_query(cld, ARGV.shift, ARGV, options)
|
63
|
+
@loaded_clouds.each do |cld|
|
64
|
+
puts CommandQueryHandler.run_query(cld, ARGV.shift, ARGV, options)
|
65
65
|
end
|
66
66
|
else
|
67
67
|
block = Proc.new do
|
data/config/jeweler.rb
CHANGED
@@ -25,7 +25,6 @@ end
|
|
25
25
|
s.test_files = Dir["test/**/test_*.rb"]
|
26
26
|
|
27
27
|
s.files = (%w(Rakefile README.rdoc License.txt VERSION.yml) + Dir["{config,examples,lib,test,tasks,script,generators,bin,vendor}/**/*"])
|
28
|
-
|
29
28
|
s.files += ["vendor/erlang/hermes/ebin/*.tar.gz"]
|
30
29
|
|
31
30
|
s.files.exclude 'vendor/erlang/hermes'
|
@@ -23,7 +23,8 @@ client = CloudThrift::CommandInterface::Client.new(protocol)
|
|
23
23
|
transport.open()
|
24
24
|
|
25
25
|
cld = CloudThrift::CloudQuery.new
|
26
|
-
cld.name = '
|
26
|
+
cld.name = 'pp2'
|
27
|
+
# cld.name = 'monitored_app'
|
27
28
|
# cld.name = 'vmware'
|
28
29
|
|
29
30
|
resp = client.run_command(cld, "name", [])
|
@@ -68,10 +68,15 @@ module CloudProviders
|
|
68
68
|
raise StandardError.new("You must pass in a cloud to configure an instance") unless cloud
|
69
69
|
cloud.compile(self)
|
70
70
|
|
71
|
-
scp(:source => keypair.full_filepath,
|
72
|
-
|
71
|
+
# scp(:source => keypair.full_filepath,
|
72
|
+
# :destination => "/etc/poolparty/keys/#{keypair.basename}")
|
73
73
|
|
74
74
|
FileUtils.mkdir_p cloud.tmp_path/"etc"/"poolparty" unless File.directory?(cloud.tmp_path/"etc"/"poolparty")
|
75
|
+
FileUtils.mkdir_p cloud.tmp_path/"etc"/"poolparty"/"keys" unless File.directory?(cloud.tmp_path/"etc"/"poolparty"/"keys")
|
76
|
+
|
77
|
+
FileUtils.cp keypair.full_filepath, cloud.tmp_path/"etc"/"poolparty"/"keys"/keypair.basename
|
78
|
+
File.open(cloud.tmp_path/"etc"/"poolparty"/"cloud_name", "w") {|f| f << cloud.name }
|
79
|
+
|
75
80
|
pack_clouds_dot_rb_and_expected_directories
|
76
81
|
|
77
82
|
dputs("Rsyncing #{cloud.tmp_path/"*"}")
|
@@ -159,7 +159,7 @@ module CloudProviders
|
|
159
159
|
end
|
160
160
|
|
161
161
|
def after_compile(cld)
|
162
|
-
save_aws_env_to_yml(cld.tmp_path/"etc"/"poolparty"/"env.yml")
|
162
|
+
save_aws_env_to_yml(cld.tmp_path/"etc"/"poolparty"/"env.yml") rescue nil
|
163
163
|
end
|
164
164
|
|
165
165
|
# Read yaml file and use it to set environment variables and local variables.
|
@@ -171,7 +171,8 @@ module CloudProviders
|
|
171
171
|
|
172
172
|
# Save aws keys and env variables to a yaml file
|
173
173
|
def save_aws_env_to_yml(filename='/etc/poolparty/env.yml')
|
174
|
-
|
174
|
+
hsh = aws_hash(default_options, "/etc/poolparty/ec2")
|
175
|
+
File.open(filename, 'w') {|f| f<<YAML::dump(hsh) }
|
175
176
|
end
|
176
177
|
|
177
178
|
# Return a hash of the aws keys and environment variables
|
data/lib/poolparty/cloud.rb
CHANGED
@@ -196,12 +196,14 @@ module PoolParty
|
|
196
196
|
# the defined (or the default dependency_resolver, chef)
|
197
197
|
def compile(caller=nil)
|
198
198
|
callback :before_compile
|
199
|
+
cloud_provider.before_compile(self)
|
199
200
|
FileUtils.mkdir_p tmp_path unless File.directory?(tmp_path)
|
200
201
|
ddputs <<-EOE
|
201
202
|
Compiling cloud #{self.name} to #{tmp_path/"etc"/"#{dependency_resolver_name}"}
|
202
203
|
number of resources: #{ordered_resources.size}
|
203
204
|
EOE
|
204
205
|
out = dependency_resolver.compile_to(ordered_resources, tmp_path/"etc"/"#{dependency_resolver_name}", caller)
|
206
|
+
cloud_provider.after_compile(self)
|
205
207
|
callback :after_compile
|
206
208
|
out
|
207
209
|
end
|
data/lib/poolparty/monitor.rb
CHANGED
@@ -14,6 +14,7 @@ module PoolParty
|
|
14
14
|
run_dependencies
|
15
15
|
build_rsync_directory
|
16
16
|
add_unpack
|
17
|
+
run_dependencies
|
17
18
|
run_if_needed
|
18
19
|
end
|
19
20
|
|
@@ -53,16 +54,20 @@ module PoolParty
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def add_unpack
|
56
|
-
has_exec "install_hermes",
|
57
|
+
has_exec "install_hermes",
|
57
58
|
:command => "cd /tmp/hermes && escript target_system install hermes-#{hermes_release_version} #{remote_hermes_deployed_dir}",
|
58
59
|
:creates => "#{remote_hermes_deployed_dir}/releases/#{hermes_release_version}",
|
59
|
-
:requires =>
|
60
|
+
:requires => get_package("erlang-dev")
|
61
|
+
|
62
|
+
has_link :name => "collectd_dir",
|
63
|
+
:to => "/var/lib/collectd/rrd/\#{`hostname -f`.chomp}", :source => "/var/lib/collectd/localhost",
|
64
|
+
:requires => [get_package("collectd")]
|
60
65
|
end
|
61
66
|
|
62
67
|
def run_if_needed
|
63
|
-
has_exec "env GEN_CLUSTER_SEED_CONFIG=/etc/poolparty/seeds.conf #{remote_hermes_deployed_dir}/bin/erl -boot #{remote_hermes_deployed_dir}/releases/#{hermes_release_version}/start -noshell -detached",
|
68
|
+
has_exec "env GEN_CLUSTER_SEED_CONFIG=/etc/poolparty/seeds.conf HERMES_RRD_DIRECTORY=/var/lib/collectd/localhost #{remote_hermes_deployed_dir}/bin/erl -boot #{remote_hermes_deployed_dir}/releases/#{hermes_release_version}/start -noshell -detached",
|
64
69
|
:not_if => "ps aux | grep -v grep | grep hermes | grep beam",
|
65
|
-
:requires => get_exec("install_hermes")
|
70
|
+
:requires => [get_exec("install_hermes"), get_link("collectd_dir")]
|
66
71
|
end
|
67
72
|
|
68
73
|
private
|
@@ -66,8 +66,8 @@ end
|
|
66
66
|
file = arg.first
|
67
67
|
@template = if File.file?(b = File.expand_path(file))
|
68
68
|
b
|
69
|
-
elsif File.file?(
|
70
|
-
|
69
|
+
elsif File.file?(d = File.expand_path(File.join(clouds_dot_rb_dir, file)))
|
70
|
+
d
|
71
71
|
elsif f = search_in_known_locations(file)
|
72
72
|
f
|
73
73
|
else
|
@@ -30,12 +30,13 @@ module PoolParty
|
|
30
30
|
|
31
31
|
default_options(
|
32
32
|
:link_type => :symbolic,
|
33
|
+
:source => nil,
|
33
34
|
:to => nil
|
34
35
|
)
|
35
36
|
|
36
37
|
def print_to_chef
|
37
38
|
<<-EOE
|
38
|
-
link "<%= name %>" do
|
39
|
+
link "<%= source || name %>" do
|
39
40
|
link_type <%= print_variable(link_type) %>
|
40
41
|
action :<%= exists? ? :create : :delete %>
|
41
42
|
to <%= print_variable(to) %>
|
@@ -4,7 +4,31 @@ class CommandInterfaceHandler
|
|
4
4
|
cr = CloudThrift::CloudResponse.new
|
5
5
|
cr.name = cld.name
|
6
6
|
cr.command = command
|
7
|
-
|
7
|
+
|
8
|
+
cr.response = format_response(get_response(cld, command, args))
|
9
|
+
|
10
|
+
return cr
|
11
|
+
end
|
12
|
+
|
13
|
+
def cast_command(cld, command, args)
|
14
|
+
|
15
|
+
cr = CloudThrift::CloudResponse.new
|
16
|
+
cr.name = cld.name
|
17
|
+
cr.command = command
|
18
|
+
cr.response = format_response("Running command: #{command}(#{args})")
|
19
|
+
|
20
|
+
fork do
|
21
|
+
get_response(cld, command, args)
|
22
|
+
end
|
23
|
+
|
24
|
+
return cr
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def get_response(cld, command, args)
|
31
|
+
begin
|
8
32
|
the_cloud = clouds[cld.name]
|
9
33
|
if the_cloud
|
10
34
|
if command.include?(".")
|
@@ -25,15 +49,9 @@ class CommandInterfaceHandler
|
|
25
49
|
end
|
26
50
|
rescue Exception => e
|
27
51
|
cr.response = "Error: #{e.inspect}"
|
28
|
-
end
|
29
|
-
|
30
|
-
cr.response = format_response(resp)
|
31
|
-
|
32
|
-
return cr
|
52
|
+
end
|
33
53
|
end
|
34
54
|
|
35
|
-
private
|
36
|
-
|
37
55
|
def format_response(resp)
|
38
56
|
case resp
|
39
57
|
when Array
|
@@ -44,4 +62,5 @@ class CommandInterfaceHandler
|
|
44
62
|
[resp]
|
45
63
|
end.map {|ele| ele.to_s }
|
46
64
|
end
|
65
|
+
|
47
66
|
end
|
data/tasks/poolparty.rake
CHANGED
@@ -22,6 +22,30 @@ task :thrift do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
namespace(:hermes) do
|
26
|
+
|
27
|
+
desc "Pack for distribution"
|
28
|
+
task :target_system do
|
29
|
+
erl_dir = File.dirname(__FILE__) + "/../vendor/erlang"
|
30
|
+
hermes_dir = File.join(erl_dir, "hermes")
|
31
|
+
|
32
|
+
puts `cd #{hermes_dir} && make target_system`
|
33
|
+
end
|
34
|
+
desc "Update hermes code"
|
35
|
+
task :update do
|
36
|
+
erl_dir = File.dirname(__FILE__) + "/../vendor/erlang"
|
37
|
+
hermes_dir = File.join(erl_dir, "hermes")
|
38
|
+
|
39
|
+
if File.directory?(hermes_dir)
|
40
|
+
`cd #{hermes_dir} && git pull origin master`
|
41
|
+
else
|
42
|
+
FileUtils.mkdir_p erl_dir
|
43
|
+
r = "git clone git://github.com/auser/hermes.git #{hermes_dir}"
|
44
|
+
Kernel.system r
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
25
49
|
namespace(:pp) do
|
26
50
|
task :build_gem => ["poolparty:vendor:setup", "poolparty:vendor:update", :gemspec, :build]
|
27
51
|
|
@@ -134,7 +134,6 @@ class CloudTest < Test::Unit::TestCase
|
|
134
134
|
assert_equal 22, clouds["noneity"].ssh_port
|
135
135
|
end
|
136
136
|
|
137
|
-
|
138
137
|
def test_children_getting_parent_options
|
139
138
|
clear!
|
140
139
|
pool "outside" do
|
@@ -183,5 +182,11 @@ class CloudTest < Test::Unit::TestCase
|
|
183
182
|
assert_equal 1, clouds["app_cloud"].monitors.size
|
184
183
|
|
185
184
|
clouds["app_cloud"].compile
|
185
|
+
|
186
|
+
compile_dir = clouds["app_cloud"].tmp_path/"etc"/"chef"/"cookbooks"/"poolparty"
|
187
|
+
recipe_file = compile_dir/"recipes"/"default.rb"
|
188
|
+
recipe_contents = open(recipe_file).read
|
189
|
+
|
190
|
+
assert_match /install hermes/, recipe_contents
|
186
191
|
end
|
187
192
|
end
|
@@ -3,7 +3,7 @@ require "#{File.dirname(__FILE__)}/../../test_helper"
|
|
3
3
|
class MonitorTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def setup
|
6
|
-
@mon = PoolParty::Monitor.new(
|
6
|
+
@mon = PoolParty::Monitor.new("cpu-idle") do |c|
|
7
7
|
vote_for(:expand) if c > 0.8
|
8
8
|
configure if c < 0.1
|
9
9
|
end
|