auser-poolparty 1.3.10 → 1.3.11
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/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
|