auser-poolparty 0.2.66 → 0.2.67
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 +83 -41
- data/PostInstall.txt +2 -2
- data/README.txt +1 -2
- data/Rakefile +14 -1
- data/bin/cloud-start +11 -10
- data/bin/{pool-spec → pool-generate} +0 -0
- data/bin/pool-init +3 -3
- data/bin/pool-start +8 -7
- data/bin/server-update-hosts +1 -1
- data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +1 -1
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +1 -1
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +1 -1
- data/lib/erlang/messenger/include/defines.hrl +7 -3
- data/lib/erlang/messenger/lib/eunit/.svn/all-wcprops +53 -0
- data/lib/erlang/messenger/lib/eunit/.svn/entries +140 -0
- data/lib/erlang/messenger/lib/eunit/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/.svn/prop-base/NOTES.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/AUTHORS.svn-base +2 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/CHANGELOG.svn-base +14 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/COPYING.svn-base +504 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/NOTES.svn-base +276 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/README.svn-base +3 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/sys.config.svn-base +9 -0
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/vsn.mk.svn-base +1 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/all-wcprops +59 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/entries +142 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/erlang.png.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/eunit.html.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/index.html.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/modules-frame.html.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/overview-summary.html.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/packages-frame.html.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/edoc-info.svn-base +3 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/erlang.png.svn-base +0 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/eunit.html.svn-base +172 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/index.html.svn-base +17 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/modules-frame.html.svn-base +12 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview-summary.html.svn-base +984 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview.edoc.svn-base +980 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/packages-frame.html.svn-base +11 -0
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/stylesheet.css.svn-base +55 -0
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/all-wcprops +5 -0
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/dir-prop-base +8 -0
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/entries +28 -0
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/all-wcprops +23 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/entries +66 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/eunit_examples.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/fib.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/eunit_examples.erl.svn-base +339 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/fib.erl.svn-base +19 -0
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/tests.txt.svn-base +1 -0
- data/lib/erlang/messenger/lib/eunit/include/.svn/all-wcprops +11 -0
- data/lib/erlang/messenger/lib/eunit/include/.svn/entries +41 -0
- data/lib/erlang/messenger/lib/eunit/include/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/include/.svn/prop-base/eunit.hrl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/include/.svn/text-base/eunit.hrl.svn-base +313 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/all-wcprops +113 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/entries +259 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/format +1 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/autoload.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/code_monitor.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_autoexport.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_data.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_internal.hrl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_lib.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_proc.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_serial.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_server.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_striptests.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_test.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tests.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tty.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/file_monitor.erl.svn-base +5 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/autoload.erl.svn-base +388 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/code_monitor.erl.svn-base +243 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.app.src.svn-base +21 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.appup.src.svn-base +1 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.erl.svn-base +196 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_autoexport.erl.svn-base +102 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_data.erl.svn-base +798 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_internal.hrl.svn-base +48 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_lib.erl.svn-base +682 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_proc.erl.svn-base +552 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_serial.erl.svn-base +157 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_server.erl.svn-base +340 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_striptests.erl.svn-base +64 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_test.erl.svn-base +334 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tests.erl.svn-base +45 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tty.erl.svn-base +272 -0
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/file_monitor.erl.svn-base +409 -0
- data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_client_rel-0.1.script +77 -85
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +78 -85
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +77 -86
- data/lib/erlang/messenger/src/pm_node.erl +46 -9
- data/lib/erlang/messenger/src/utils.erl +7 -1
- data/lib/poolparty.rb +17 -23
- data/lib/poolparty/base_packages/poolparty.rb +1 -1
- data/lib/poolparty/core/string.rb +11 -2
- data/lib/poolparty/helpers/binary.rb +31 -0
- data/lib/poolparty/helpers/console.rb +25 -16
- data/lib/poolparty/helpers/nice_printer.rb +36 -0
- data/lib/poolparty/helpers/optioner.rb +8 -0
- data/lib/poolparty/helpers/provisioner_base.rb +7 -5
- data/lib/poolparty/helpers/provisioners/master.rb +1 -1
- data/lib/poolparty/helpers/provisioners/slave.rb +2 -1
- data/lib/poolparty/modules/cloud_resourcer.rb +1 -1
- data/lib/poolparty/modules/file_writer.rb +12 -1
- data/lib/poolparty/modules/resourcing_dsl.rb +2 -1
- data/lib/poolparty/monitors/base_monitor.rb +3 -0
- data/lib/poolparty/net/remoter.rb +13 -11
- data/lib/poolparty/pool/base.rb +25 -13
- data/lib/poolparty/pool/cloud.rb +32 -10
- data/lib/poolparty/pool/custom_resource.rb +16 -7
- data/lib/poolparty/pool/plugin_model.rb +2 -2
- data/lib/poolparty/pool/pool.rb +2 -2
- data/lib/poolparty/pool/resource.rb +25 -7
- data/lib/poolparty/pool/resources/class_package.rb +3 -2
- data/lib/poolparty/pool/resources/exec.rb +1 -1
- data/lib/poolparty/pool/resources/variable.rb +4 -0
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +13 -11
- data/spec/poolparty/core/hash_spec.rb +1 -1
- data/spec/poolparty/core/time_spec.rb +1 -1
- data/spec/poolparty/net/remote_spec.rb +1 -1
- data/spec/poolparty/pool/base_spec.rb +25 -20
- data/spec/poolparty/pool/cloud_spec.rb +50 -3
- data/spec/poolparty/pool/plugin_spec.rb +1 -0
- data/spec/poolparty/pool/resource_spec.rb +4 -3
- data/spec/poolparty/spec_helper.rb +3 -4
- data/tasks/deployment.rake +15 -3
- data/website/index.html +2 -2
- metadata +88 -46
- data/lib/erlang/messenger/Makefile +0 -15
- data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
- data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
- data/lib/poolparty/config/allowed_commands.yml +0 -1
- data/lib/poolparty/plugins/git.rb +0 -45
- data/spec/poolparty/plugins/git_spec.rb +0 -40
@@ -18,13 +18,14 @@
|
|
18
18
|
terminate/2, code_change/3]).
|
19
19
|
|
20
20
|
-record(state, {
|
21
|
-
monitors = {} % Tuple of monitors
|
21
|
+
monitors = {}, % Tuple of monitors
|
22
|
+
stored_loads = ?DICT:new() % Dictionary of latest loads
|
22
23
|
}).
|
23
24
|
-define(SERVER, ?MODULE).
|
24
25
|
|
25
26
|
% Client function definitions
|
26
27
|
-export ([stop/0]).
|
27
|
-
-export ([
|
28
|
+
-export ([get_current_load_for_type/1, run_cmd/1, fire_cmd/1]).
|
28
29
|
-export ([run_reconfig/0, local_update/1, still_here/0, print_monitors/0]).
|
29
30
|
-export ([server_location/0]).
|
30
31
|
%%====================================================================
|
@@ -36,10 +37,40 @@
|
|
36
37
|
|
37
38
|
|
38
39
|
% Get the load for the type sent...
|
39
|
-
|
40
|
+
get_current_load_for_type(Type) ->
|
40
41
|
String = string:concat(". /etc/profile && server-get-load -m ",Type),
|
41
|
-
|
42
|
-
|
42
|
+
LatestLoad = os:cmd(String),
|
43
|
+
Load = gen_server:call(server_location(), {update_load, Type, LatestLoad}),
|
44
|
+
{Load}.
|
45
|
+
|
46
|
+
get_load_listing(Type, State) ->
|
47
|
+
% Find or create the stored node
|
48
|
+
case ?DICT:is_key(Type, State#state.stored_loads) of
|
49
|
+
true ->
|
50
|
+
LoadStore = ?DICT:fetch(Type, State#state.stored_loads),
|
51
|
+
{LoadStore, State};
|
52
|
+
false ->
|
53
|
+
LoadStore = [],
|
54
|
+
NewState = State#state{stored_loads = ?DICT:store(Type, LoadStore, State#state.stored_loads)},
|
55
|
+
{LoadStore, NewState}
|
56
|
+
end.
|
57
|
+
|
58
|
+
get_average_load_listing(Type, State) ->
|
59
|
+
{LoadListing, _} = get_load_listing(Type, State),
|
60
|
+
utils:average_of_list(LoadListing).
|
61
|
+
% Get the stored load for the type
|
62
|
+
% Only store the latest NUM_LOADS_TO_STORE in the stored_loads array
|
63
|
+
store_load_for_type(Type, Load, State) ->
|
64
|
+
{LoadStore, LoadListingState} = get_load_listing(Type, State),
|
65
|
+
LoadList = lists:reverse(LoadStore),
|
66
|
+
case length(LoadList) >= ?NUM_LOADS_TO_STORE of
|
67
|
+
true -> [_|T] = LoadList;
|
68
|
+
false -> T = LoadList
|
69
|
+
end,
|
70
|
+
NewStoredLoad = lists:append([Load], lists:reverse(T)),
|
71
|
+
NewState = State#state{stored_loads = ?DICT:store(Type, NewStoredLoad, LoadListingState#state.stored_loads)},
|
72
|
+
{Type, NewState}.
|
73
|
+
|
43
74
|
% Rerun the configuration
|
44
75
|
run_reconfig() -> gen_server:cast(server_location(), {run_reconfig}).
|
45
76
|
print_monitors() -> gen_server:call(server_location(), {print_monitors}).
|
@@ -56,9 +87,9 @@ stop() -> gen_server:cast(server_location(), stop).
|
|
56
87
|
% Run every UPDATE_TIME seconds
|
57
88
|
local_update(Types) ->
|
58
89
|
?TRACE("Updating", [?MASTER_LOCATION]),
|
59
|
-
net_adm:ping(?MASTER_LOCATION),
|
60
|
-
Load = [{Ty, element(1,
|
61
|
-
gen_server:cast(?MASTER_SERVER, {update_node_load, node(), Load}).
|
90
|
+
net_adm:ping(?MASTER_LOCATION), % check in with the master
|
91
|
+
Load = [{Ty, element(1, get_current_load_for_type(Ty))} || Ty <- Types],
|
92
|
+
gen_server:cast(?MASTER_SERVER, {update_node_load, node(), Load}).
|
62
93
|
|
63
94
|
%%--------------------------------------------------------------------
|
64
95
|
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
@@ -88,7 +119,8 @@ init(Args) ->
|
|
88
119
|
process_flag(trap_exit, true),
|
89
120
|
utils:start_timer(?UPDATE_TIME, fun() -> pm_node:local_update(Args) end),
|
90
121
|
{ok, #state{
|
91
|
-
monitors=Args
|
122
|
+
monitors=Args,
|
123
|
+
stored_loads = ?DICT:new()
|
92
124
|
}}.
|
93
125
|
|
94
126
|
%%--------------------------------------------------------------------
|
@@ -103,6 +135,11 @@ init(Args) ->
|
|
103
135
|
handle_call({run_command, Cmd}, _From, State) ->
|
104
136
|
Reply = os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\""),
|
105
137
|
{reply, Reply, State};
|
138
|
+
handle_call({update_load, Type, Load}, _From, State) ->
|
139
|
+
{Type, NewState} = store_load_for_type(Type, Load, State),
|
140
|
+
Reply = get_average_load_listing(Type, NewState),
|
141
|
+
?TRACE("Updated load", [Reply]),
|
142
|
+
{reply, Reply, NewState};
|
106
143
|
handle_call({still_there}, _From, State) ->
|
107
144
|
Reply = still_here,
|
108
145
|
{reply, Reply, State};
|
@@ -35,7 +35,13 @@ tick_timer(Time, Fun) ->
|
|
35
35
|
end.
|
36
36
|
|
37
37
|
average_of_list(L) ->
|
38
|
-
Sum = lists:foldr( fun(Int, Sum) ->
|
38
|
+
Sum = lists:foldr( fun(Int, Sum) ->
|
39
|
+
case erlang:is_float(Int) of
|
40
|
+
true -> Integer = Int;
|
41
|
+
false -> Integer = erlang:list_to_float(Int)
|
42
|
+
end,
|
43
|
+
Integer + Sum
|
44
|
+
end, 0, [F || F <- L] ),
|
39
45
|
average_for_list(Sum, L).
|
40
46
|
|
41
47
|
% Get the average of the list
|
data/lib/poolparty.rb
CHANGED
@@ -10,31 +10,25 @@ require 'rubygems'
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
require "#{File.dirname(__FILE__)}/poolparty/helpers/nice_printer"
|
14
|
+
|
13
15
|
unless @required_software.empty?
|
14
|
-
@
|
15
|
-
|
16
|
-
def wrap_cline(line)
|
17
|
-
"* #{line.center(@centered_lines)} *"
|
18
|
-
end
|
19
|
-
def wrap_lline(line)
|
20
|
-
"* #{line.ljust(@centered_lines)} *"
|
21
|
-
end
|
22
|
-
def header
|
23
|
-
"*"*@num_lines
|
24
|
-
end
|
25
|
-
empty_line = "* #{" ".ljust(@centered_lines)} *"
|
16
|
+
@np = NicePrinter.new(45)
|
17
|
+
|
26
18
|
# error_initializing_message.txt
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
19
|
+
@np.header
|
20
|
+
@np.center("Error")
|
21
|
+
@np.left("Missing required software")
|
22
|
+
@required_software.map {|a| @np << " #{a}" }
|
23
|
+
@np << "Please install the required software"
|
24
|
+
@np << "and try again"
|
25
|
+
@np.empty
|
26
|
+
@np << "Try installing #{@required_software.size == 1 ? "it" : "them"} with"
|
27
|
+
@required_software.map {|a| @np << " gem install #{a}" }
|
28
|
+
@np.empty
|
29
|
+
@np.footer
|
30
|
+
|
31
|
+
@np.print
|
38
32
|
exit(0)
|
39
33
|
end
|
40
34
|
|
@@ -91,7 +91,7 @@ module PoolParty
|
|
91
91
|
has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master") #, :ifnot => "/bin/ps aux | /bin/grep -q pm_master"
|
92
92
|
has_exec(:name => "start client server", :command => ". /etc/profile && server-start-client") #, :ifnot => "/bin/ps aux | /bin/grep -q client_server"
|
93
93
|
|
94
|
-
has_cron({:name => "maintain script", :command => ". /etc/profile &&
|
94
|
+
has_cron({:name => "maintain script", :command => ". /etc/profile && cloud-maintain -n #{cloud.name}", :minute => "*/3", :requires => [get_gempackage("poolparty"), get_cron("puppetd runner"), get_cron("Load handler"), get_service("haproxy")]})
|
95
95
|
|
96
96
|
has_remotefile(:name => "/usr/bin/puppetcleaner") do
|
97
97
|
mode 744
|
@@ -27,6 +27,15 @@ class String
|
|
27
27
|
def sanitize
|
28
28
|
self.gsub(/[ \.\/\-]*/, '')
|
29
29
|
end
|
30
|
+
def keyerize
|
31
|
+
signed_short = 0x7FFFFFFF
|
32
|
+
len = self.sanitize.length
|
33
|
+
hash = 0
|
34
|
+
len.times{ |i|
|
35
|
+
hash = self[i] + ( hash << 6 ) + ( hash << 16 ) - hash
|
36
|
+
}
|
37
|
+
hash & signed_short
|
38
|
+
end
|
30
39
|
def dir_safe
|
31
40
|
self.downcase.gsub(/[ ]/, '_')
|
32
41
|
end
|
@@ -65,8 +74,8 @@ class String
|
|
65
74
|
klass
|
66
75
|
end
|
67
76
|
|
68
|
-
def module_constant(&block)
|
69
|
-
symc = "#{self}_Module".classify
|
77
|
+
def module_constant(append="", &block)
|
78
|
+
symc = "#{self}_Module#{append}".classify
|
70
79
|
mod = Object.const_defined?(symc) ? Object.const_get(symc.to_sym) : Module.new(&block)
|
71
80
|
Object.const_set(symc, mod) unless Object.const_defined?(symc)
|
72
81
|
symc.to_s.constantize
|
@@ -1,5 +1,22 @@
|
|
1
1
|
require "ftools"
|
2
2
|
module PoolParty
|
3
|
+
|
4
|
+
# Load a file that contains a pool into memory
|
5
|
+
def load_pool(filename)
|
6
|
+
|
7
|
+
unless filename && ::File.readable?(filename)
|
8
|
+
puts "Please specify your cloud with -s, move it to ./pool.spec or in your POOL_SPEC environment variable"
|
9
|
+
exit(1)
|
10
|
+
else
|
11
|
+
$pool_specfile = filename
|
12
|
+
PoolParty::Script.inflate(open(filename).read, filename)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def pool_specfile
|
17
|
+
$pool_specfile
|
18
|
+
end
|
19
|
+
|
3
20
|
module Binary
|
4
21
|
|
5
22
|
class << self
|
@@ -26,6 +43,20 @@ module PoolParty
|
|
26
43
|
f unless ::File.readable?(f)
|
27
44
|
end.first
|
28
45
|
end
|
46
|
+
# Daemonize the process
|
47
|
+
def daemonize(&block)
|
48
|
+
vputs "Daemonizing..."
|
49
|
+
trap("CHLD") {Process.wait(-1, Process::WNOHANG)}
|
50
|
+
fork do
|
51
|
+
Signal.trap('HUP', 'IGNORE') # Don't die upon logout
|
52
|
+
File.open("/dev/null", "r+") do |devnull|
|
53
|
+
$stdout.reopen(devnull)
|
54
|
+
$stderr.reopen(devnull)
|
55
|
+
$stdin.reopen(devnull) unless @use_stdin
|
56
|
+
end
|
57
|
+
block.call if block
|
58
|
+
end
|
59
|
+
end
|
29
60
|
|
30
61
|
end
|
31
62
|
|
@@ -5,23 +5,30 @@ module PoolParty
|
|
5
5
|
|
6
6
|
include Display
|
7
7
|
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
# Print help commands for the console
|
9
|
+
# level 0 - Basic help
|
10
|
+
# level 1 - Commands
|
11
|
+
def help(level=0)
|
12
|
+
@np = NicePrinter.new(60)
|
13
|
+
@np.header
|
14
|
+
@np.center "PoolParty console help"
|
15
|
+
@np.center "Basics"
|
16
|
+
@np << "Load your pool with load_pool(filename)"
|
17
|
+
@np << "Reference clouds with"
|
18
|
+
@np << "c = cloud :cloudname"
|
19
|
+
@np.empty
|
20
|
+
if level >= 1
|
21
|
+
@np.center "CloudSpeak"
|
22
|
+
@np << "All the commands set on your cloud can be called within the console"
|
23
|
+
@np << "list_of_running_instances - get list of running nodes"
|
24
|
+
@np << "list_of_pending_instances - get list of pending nodes"
|
25
|
+
@np << "available_monitors - get list of the available monitors on the cloud"
|
26
|
+
@np << " note: all monitors can be called as a method on the cloud"
|
27
|
+
@np << " i.e. CpuMonitor makes the method cpu available on the cloud"
|
28
|
+
@np.empty
|
16
29
|
end
|
17
|
-
|
18
|
-
|
19
|
-
def extract_cloud_from_options(o)
|
20
|
-
o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
|
21
|
-
end
|
22
|
-
|
23
|
-
def extract_pool_from_options(o)
|
24
|
-
o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
|
30
|
+
@np.footer
|
31
|
+
@np.print
|
25
32
|
end
|
26
33
|
|
27
34
|
# Clear all the pools and reload the console
|
@@ -29,6 +36,8 @@ module PoolParty
|
|
29
36
|
# as well
|
30
37
|
def reload!
|
31
38
|
reset!
|
39
|
+
require File.dirname(__FILE__) + "/../../../poolparty"
|
40
|
+
require File.dirname(__FILE__) + "/../../../poolpartycl"
|
32
41
|
end
|
33
42
|
|
34
43
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class NicePrinter
|
2
|
+
|
3
|
+
attr_accessor :num_lines
|
4
|
+
attr_reader :centered_lines
|
5
|
+
|
6
|
+
def initialize(num_lines=60)
|
7
|
+
@num_lines = num_lines
|
8
|
+
@centered_lines = @num_lines - 4
|
9
|
+
end
|
10
|
+
|
11
|
+
def center(line)
|
12
|
+
lines << "* #{line.center(@centered_lines)} *"
|
13
|
+
end
|
14
|
+
def left(line)
|
15
|
+
lines << "* #{line.ljust(@centered_lines)} *"
|
16
|
+
end
|
17
|
+
def header
|
18
|
+
lines << "*"*@num_lines
|
19
|
+
end
|
20
|
+
def footer
|
21
|
+
header
|
22
|
+
end
|
23
|
+
def empty
|
24
|
+
lines << "* #{" ".ljust(@centered_lines)} *"
|
25
|
+
end
|
26
|
+
def print
|
27
|
+
puts lines.join("\n")
|
28
|
+
""
|
29
|
+
end
|
30
|
+
def <<(line)
|
31
|
+
left(line)
|
32
|
+
end
|
33
|
+
def lines
|
34
|
+
@lines ||= []
|
35
|
+
end
|
36
|
+
end
|
@@ -92,4 +92,12 @@ module PoolParty
|
|
92
92
|
end
|
93
93
|
|
94
94
|
end
|
95
|
+
|
96
|
+
def extract_cloud_from_options(o)
|
97
|
+
o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
|
98
|
+
end
|
99
|
+
|
100
|
+
def extract_pool_from_options(o)
|
101
|
+
o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
|
102
|
+
end
|
95
103
|
end
|
@@ -52,10 +52,11 @@ module PoolParty
|
|
52
52
|
|
53
53
|
include Configurable
|
54
54
|
include CloudResourcer
|
55
|
+
include FileWriter
|
55
56
|
|
56
|
-
def initialize(instance,
|
57
|
+
def initialize(instance,cld=self, os=:ubuntu)
|
57
58
|
@instance = instance
|
58
|
-
@cloud =
|
59
|
+
@cloud = cld
|
59
60
|
|
60
61
|
options(cloud.options) if cloud && cloud.respond_to?(:options)
|
61
62
|
set_vars_from_options(instance.options) unless instance.nil? || !instance.options || !instance.options.empty?
|
@@ -88,7 +89,7 @@ module PoolParty
|
|
88
89
|
def process_install!(testing=false)
|
89
90
|
error unless valid?
|
90
91
|
write_install_file
|
91
|
-
setup_runner
|
92
|
+
setup_runner
|
92
93
|
|
93
94
|
unless testing
|
94
95
|
vputs "Logging on to #{@instance.ip} (#{@instance.name})"
|
@@ -128,7 +129,7 @@ module PoolParty
|
|
128
129
|
def process_configure!(testing=false)
|
129
130
|
error unless valid?
|
130
131
|
write_configure_file
|
131
|
-
setup_runner
|
132
|
+
setup_runner
|
132
133
|
|
133
134
|
unless testing
|
134
135
|
vputs "Logging on to #{@instance.ip}"
|
@@ -168,7 +169,7 @@ module PoolParty
|
|
168
169
|
# Tasks that need to be performed everytime we do any
|
169
170
|
# remote ssh'ing into any instance
|
170
171
|
def setup_runner(force=false)
|
171
|
-
@cloud.
|
172
|
+
@cloud.prepare_for_configuration
|
172
173
|
@cloud.build_and_store_new_config_file(force)
|
173
174
|
end
|
174
175
|
def valid?
|
@@ -283,6 +284,7 @@ module PoolParty
|
|
283
284
|
def fix_rubygems
|
284
285
|
<<-EOE
|
285
286
|
#{installer_for("ruby rubygems")}
|
287
|
+
gem update --system # Force rubygems update
|
286
288
|
echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem
|
287
289
|
EOE
|
288
290
|
end
|
@@ -192,7 +192,7 @@ cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolpa
|
|
192
192
|
def restart_puppetd
|
193
193
|
<<-EOS
|
194
194
|
echo "Running puppet manifest"
|
195
|
-
/
|
195
|
+
/usr/bin/puppetrunner
|
196
196
|
EOS
|
197
197
|
end
|
198
198
|
def last_install_tasks
|
@@ -5,6 +5,11 @@ module PoolParty
|
|
5
5
|
path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
|
6
6
|
FileUtils.cp file, path unless file == path || ::File.exists?(path)
|
7
7
|
end
|
8
|
+
def cleanup_storage_directory
|
9
|
+
Dir["#{Base.storage_directory}/**"].each do |f|
|
10
|
+
::FileUtils.rm f if ::File.file?(f)
|
11
|
+
end
|
12
|
+
end
|
8
13
|
def copy_template_to_storage_directory(file)
|
9
14
|
make_template_directory
|
10
15
|
path = ::File.join( Base.tmp_path, Base.template_directory, ::File.basename(file) )
|
@@ -17,6 +22,10 @@ module PoolParty
|
|
17
22
|
end
|
18
23
|
::File.basename(path)
|
19
24
|
end
|
25
|
+
def make_directory_in_storage_directory(dirname="newdir")
|
26
|
+
path = ::File.join( Base.storage_directory, dirname )
|
27
|
+
make_base_path path
|
28
|
+
end
|
20
29
|
def write_to_file_in_storage_directory(file, str, preceded="", &block)
|
21
30
|
path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
|
22
31
|
write_to_file(path, str, &block)
|
@@ -70,7 +79,9 @@ module PoolParty
|
|
70
79
|
path
|
71
80
|
end
|
72
81
|
def clear_base_directory
|
73
|
-
|
82
|
+
Dir["#{Base.storage_directory}/**"].each do |f|
|
83
|
+
::FileUtils.rm f if ::File.file?(f)
|
84
|
+
end
|
74
85
|
end
|
75
86
|
end
|
76
87
|
end
|