auser-poolparty 0.2.16 → 0.2.20
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 +72 -7
- data/PostInstall.txt +1 -1
- data/Rakefile +11 -0
- data/bin/cloud-provision +6 -10
- data/bin/server-build-messenger +20 -0
- data/bin/server-fire-cmd +0 -2
- data/bin/server-list-responding +24 -0
- data/bin/server-start-master +4 -9
- data/bin/server-start-node +7 -6
- data/lib/erlang/messenger/Emakefile +1 -0
- data/lib/erlang/messenger/Rakefile +29 -20
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/ebin/node_app.beam +0 -0
- data/lib/erlang/messenger/ebin/packager.app +19 -0
- data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +1 -7
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +1 -7
- data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/AUTHORS +2 -0
- data/lib/erlang/messenger/lib/eunit/CHANGELOG +14 -0
- data/lib/erlang/messenger/lib/eunit/COPYING +504 -0
- data/lib/erlang/messenger/lib/eunit/Makefile +28 -0
- data/lib/erlang/messenger/lib/eunit/NOTES +276 -0
- data/lib/erlang/messenger/lib/eunit/README +3 -0
- data/lib/erlang/messenger/lib/eunit/doc/edoc-info +3 -0
- data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
- data/lib/erlang/messenger/lib/eunit/doc/eunit.html +172 -0
- data/lib/erlang/messenger/lib/eunit/doc/index.html +17 -0
- data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +12 -0
- data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +984 -0
- data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +980 -0
- data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +11 -0
- data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +55 -0
- 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.app +21 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +1 -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/examples/eunit_examples.erl +339 -0
- data/lib/erlang/messenger/lib/eunit/examples/fib.erl +19 -0
- data/lib/erlang/messenger/lib/eunit/examples/tests.txt +1 -0
- data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +313 -0
- data/lib/erlang/messenger/lib/eunit/src/Makefile +46 -0
- data/lib/erlang/messenger/lib/eunit/src/autoload.erl +388 -0
- data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +243 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +21 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +1 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.erl +196 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +102 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +798 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +48 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +682 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +552 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +157 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +340 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +64 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +334 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +45 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +272 -0
- data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +409 -0
- data/lib/erlang/messenger/lib/eunit/sys.config +9 -0
- data/lib/erlang/messenger/lib/eunit/vsn.mk +1 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +75 -2
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +75 -2
- data/lib/erlang/messenger/src/pm_client.erl +8 -3
- data/lib/erlang/messenger/src/pm_cluster.erl +32 -9
- data/lib/erlang/messenger/src/pm_master.erl +10 -11
- data/lib/erlang/messenger/src/pm_node.erl +2 -3
- data/lib/erlang/messenger/src/pm_packager.erl +73 -0
- data/lib/erlang/messenger/src/utils.erl +3 -10
- data/lib/poolparty/base_packages/heartbeat.rb +9 -9
- data/lib/poolparty/base_packages/poolparty.rb +16 -10
- data/lib/poolparty/config/allowed_commands.yml +1 -0
- data/lib/poolparty/core/object.rb +8 -0
- data/lib/poolparty/exceptions/UnacceptableCommand.rb +5 -0
- data/lib/poolparty/helpers/messenger.rb +29 -0
- data/lib/poolparty/helpers/provisioner_base.rb +7 -7
- data/lib/poolparty/helpers/provisioners/master.rb +3 -7
- data/lib/poolparty/helpers/provisioners/slave.rb +1 -0
- data/lib/poolparty/modules/cloud_resourcer.rb +7 -5
- data/lib/poolparty/modules/configurable.rb +1 -1
- data/lib/poolparty/modules/method_missing_sugar.rb +6 -1
- data/lib/poolparty/modules/pretty_printer.rb +1 -0
- data/lib/poolparty/modules/resourcing_dsl.rb +2 -1
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +1 -1
- data/lib/poolparty/net/remoter.rb +3 -1
- data/lib/poolparty/plugins/git.rb +3 -3
- data/lib/poolparty/pool/base.rb +7 -2
- data/lib/poolparty/pool/cloud.rb +3 -3
- data/lib/poolparty/pool/resource.rb +38 -24
- data/lib/poolparty/pool/resources/class_package.rb +2 -2
- data/lib/poolparty/pool/resources/conditional.rb +8 -4
- data/lib/poolparty/pool/resources/{gem.rb → gem_package.rb} +0 -0
- data/lib/poolparty/pool/resources/package.rb +8 -1
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +1 -1
- data/poolparty.gemspec +476 -61
- data/spec/poolparty/core/object_spec.rb +20 -0
- data/spec/poolparty/helpers/messenger_spec.rb +14 -0
- data/spec/poolparty/helpers/provisioners/master_spec.rb +2 -2
- data/spec/poolparty/net/remoter_spec.rb +1 -1
- data/spec/poolparty/plugins/git_spec.rb +26 -19
- data/spec/poolparty/pool/base_spec.rb +20 -2
- data/spec/poolparty/pool/cloud_spec.rb +256 -249
- data/spec/poolparty/pool/custom_resource_spec.rb +6 -1
- data/spec/poolparty/pool/plugin_spec.rb +71 -65
- data/spec/poolparty/pool/resource_spec.rb +314 -237
- data/spec/poolparty/pool/resources/class_package_spec.rb +71 -66
- data/spec/poolparty/pool/resources/conditional_spec.rb +30 -26
- data/spec/poolparty/pool/resources/gem_spec.rb +18 -14
- data/spec/poolparty/pool/resources/variable_spec.rb +1 -1
- data/spec/poolparty/pool/script_spec.rb +46 -37
- data/spec/poolparty/spec_helper.rb +4 -0
- data/tasks/cloud.rake +0 -54
- data/tasks/development.rake +11 -14
- data/tasks/ec2.rake +10 -17
- data/tasks/instance.rake +0 -61
- data/website/index.html +1 -1
- metadata +83 -10
|
@@ -1,22 +1,33 @@
|
|
|
1
|
-
-module(
|
|
1
|
+
-module(pm_cluster).
|
|
2
2
|
|
|
3
3
|
-ifdef(EUNIT).
|
|
4
4
|
-include_lib("eunit/include/eunit.hrl").
|
|
5
5
|
-endif.
|
|
6
6
|
|
|
7
|
-
-export([slaves/1]).
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
-export ([slaves/1, slaves/0]).
|
|
8
|
+
-export ([get_live_nodes/0,refresh_live_nodes/0]).
|
|
9
|
+
-export ([send_call/2, master/0]).
|
|
10
|
+
|
|
11
|
+
send_call(Type, Args) ->
|
|
12
|
+
Nodes = get_live_nodes(),
|
|
13
|
+
rpc:multicall(Nodes, pm_node, Type, [Args]).
|
|
14
|
+
|
|
15
|
+
master() ->
|
|
16
|
+
{erlang:node()}.
|
|
17
|
+
|
|
10
18
|
slaves([]) ->
|
|
11
19
|
ok;
|
|
12
20
|
|
|
13
21
|
slaves([Host|Hosts]) ->
|
|
14
22
|
Args = erl_system_args(),
|
|
15
|
-
NodeName = "
|
|
23
|
+
NodeName = "pp_cluster",
|
|
16
24
|
{ok, Node} = slave:start_link(Host, NodeName, Args),
|
|
17
25
|
io:format("Erlang node started = [~p]~n", [Node]),
|
|
18
26
|
slaves(Hosts).
|
|
19
27
|
|
|
28
|
+
slaves() ->
|
|
29
|
+
get_live_nodes().
|
|
30
|
+
|
|
20
31
|
erl_system_args()->
|
|
21
32
|
Shared = case init:get_argument(shared) of
|
|
22
33
|
error -> " ";
|
|
@@ -27,8 +38,20 @@ erl_system_args()->
|
|
|
27
38
|
atom_to_list(erlang:get_cookie()),
|
|
28
39
|
Shared, " +Mea r10b "
|
|
29
40
|
]).
|
|
30
|
-
%% Do not forget to start erlang with a command like:
|
|
31
|
-
%% erl -rsh ssh -sname clustmaster
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
refresh_live_nodes() ->
|
|
43
|
+
String = ". /etc/profile && server-list-active -c name",
|
|
44
|
+
Nodes = string:tokens(os:cmd(String), "\n\t"),
|
|
45
|
+
io:format("nodes: ~p~n", [Nodes]),
|
|
46
|
+
lists:map(
|
|
47
|
+
fun(No) ->
|
|
48
|
+
io:format("pinging ~p~n", [list_to_atom(lists:append("pp_cluster@",No))]),
|
|
49
|
+
net_adm:ping(list_to_atom(lists:append("@pp_cluster", No)))
|
|
50
|
+
end,
|
|
51
|
+
Nodes),
|
|
52
|
+
ok.
|
|
53
|
+
% Get the live nodes
|
|
54
|
+
get_live_nodes() ->
|
|
55
|
+
nodes().
|
|
56
|
+
%% Do not forget to start erlang with a command like:
|
|
57
|
+
%% erl -rsh ssh -sname clustmaster
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
-define(SERVER, ?MODULE).
|
|
19
19
|
|
|
20
20
|
% Client function definitions
|
|
21
|
-
-export ([get_load/1, reconfigure_cloud/0, fire_cmd/1
|
|
21
|
+
-export ([get_load/1, reconfigure_cloud/0, fire_cmd/1]).
|
|
22
|
+
-export ([shutdown_cloud/0]).
|
|
22
23
|
|
|
23
24
|
%%====================================================================
|
|
24
25
|
%% API
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
%% Description: Starts the server
|
|
29
30
|
%%--------------------------------------------------------------------
|
|
30
31
|
start_link() ->
|
|
31
|
-
gen_server:start_link({
|
|
32
|
+
gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
|
|
32
33
|
|
|
33
34
|
%%====================================================================
|
|
34
35
|
%% gen_server callbacks
|
|
@@ -98,22 +99,20 @@ code_change(_OldVsn, State, _Extra) ->
|
|
|
98
99
|
|
|
99
100
|
% pm_master:get_load("0", "cpu").
|
|
100
101
|
get_load(Type) ->
|
|
101
|
-
|
|
102
|
-
{Loads, _} = rpc:multicall(Nodes, pm_node, get_load_for_type, [Type]),
|
|
102
|
+
{Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
|
|
103
103
|
{utils:convert_responses_to_int_list(Loads)}.
|
|
104
104
|
|
|
105
105
|
% Send reconfigure tasks to every node
|
|
106
106
|
reconfigure_cloud() ->
|
|
107
|
-
|
|
108
|
-
{_, _} = rpc:multicall(Nodes, pm_node, run_reconfig, []),
|
|
107
|
+
pm_cluster:send_call(run_reconfig, []),
|
|
109
108
|
{ok}.
|
|
110
109
|
|
|
111
110
|
% Fire the given command on all nodes
|
|
112
111
|
fire_cmd(Cmd) ->
|
|
113
|
-
|
|
114
|
-
{_, _} = rpc:multicall(Nodes, pm_node, fire_cmd, [Cmd]),
|
|
112
|
+
pm_cluster:send_call(fire_cmd, [Cmd]),
|
|
115
113
|
{ok}.
|
|
116
114
|
|
|
117
|
-
%
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
% Shutdown
|
|
116
|
+
shutdown_cloud() ->
|
|
117
|
+
pm_cluster:send_call(stop, []),
|
|
118
|
+
{ok}.
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
%% Fires a ping every 10 seconds
|
|
35
35
|
%%--------------------------------------------------------------------
|
|
36
36
|
start_link() ->
|
|
37
|
-
utils:start_timer(10000, fun() -> net_adm:ping(master
|
|
38
|
-
gen_server:start_link({
|
|
37
|
+
utils:start_timer(10000, fun() -> net_adm:ping(master) end),
|
|
38
|
+
gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
|
|
39
39
|
|
|
40
40
|
%%====================================================================
|
|
41
41
|
%% gen_server callbacks
|
|
@@ -117,7 +117,6 @@ run_reconfig() -> {os:cmd(". /etc/profile && server-rerun")}.
|
|
|
117
117
|
% Allows us to fire off any command (allowed by poolparty on the check)
|
|
118
118
|
fire_cmd(Cmd) ->
|
|
119
119
|
String = ". /etc/profile && server-fire-cmd \""++Cmd++"\"",
|
|
120
|
-
io:format("Sending command "++String),
|
|
121
120
|
{os:cmd(String)}.
|
|
122
121
|
|
|
123
122
|
% Stop the pm_node entirely
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
-module (pm_packager).
|
|
2
|
+
-compile(export_all).
|
|
3
|
+
-behaviour(application).
|
|
4
|
+
|
|
5
|
+
%% Application callbacks
|
|
6
|
+
-export([start/2, stop/1]).
|
|
7
|
+
|
|
8
|
+
start() ->
|
|
9
|
+
start("", "").
|
|
10
|
+
%%====================================================================
|
|
11
|
+
%% Application callbacks
|
|
12
|
+
%%====================================================================
|
|
13
|
+
%%--------------------------------------------------------------------
|
|
14
|
+
%% Function: start(Type, StartArgs) -> {ok, Pid} |
|
|
15
|
+
%% {ok, Pid, State} |
|
|
16
|
+
%% {error, Reason}
|
|
17
|
+
%% Description: This function is called whenever an application
|
|
18
|
+
%% is started using application:start/1,2, and should start the processes
|
|
19
|
+
%% of the application. If the application is structured according to the
|
|
20
|
+
%% OTP design principles as a supervision tree, this means starting the
|
|
21
|
+
%% top supervisor of the tree.
|
|
22
|
+
%%--------------------------------------------------------------------
|
|
23
|
+
start(_, _) ->
|
|
24
|
+
recompile_scripts("0.1").
|
|
25
|
+
|
|
26
|
+
%%--------------------------------------------------------------------
|
|
27
|
+
%% Function: stop(State) -> void()
|
|
28
|
+
%% Description: This function is called whenever an application
|
|
29
|
+
%% has stopped. It is intended to be the opposite of Module:start/2 and
|
|
30
|
+
%% should do any necessary cleaning up. The return value is ignored.
|
|
31
|
+
%%--------------------------------------------------------------------
|
|
32
|
+
stop(_State) ->
|
|
33
|
+
ok.
|
|
34
|
+
|
|
35
|
+
%%====================================================================
|
|
36
|
+
%% Internal functions
|
|
37
|
+
%%====================================================================
|
|
38
|
+
|
|
39
|
+
gen_rel(Name, Vers) ->
|
|
40
|
+
RelName = lists:append(["pm_",Name,"_rel-",Vers]),
|
|
41
|
+
F = lists:append(["{release, {\"",Name,"\",\"",Vers,"\"}, ",
|
|
42
|
+
"{erts,\"",erlang:system_info(version),"\"},"
|
|
43
|
+
"[{kernel,\"",get_vsn(kernel),"\"},",
|
|
44
|
+
"{stdlib,\"",get_vsn(stdlib),"\"},",
|
|
45
|
+
"{inets,\"",get_vsn(inets),"\"},",
|
|
46
|
+
"{crypto,\"",get_vsn(crypto),"\"},",
|
|
47
|
+
"{sasl,\"",get_vsn(sasl),"\"},",
|
|
48
|
+
"{",Name,",\"",Vers,"\"}]}."]),
|
|
49
|
+
file:write_file( lists:append(["ebin/", RelName, ".rel"]),F).
|
|
50
|
+
|
|
51
|
+
% Recompiles the boot scripts
|
|
52
|
+
recompile_scripts(Vers) ->
|
|
53
|
+
gen_rel("master", Vers),
|
|
54
|
+
gen_rel("node", Vers),
|
|
55
|
+
systools:make_script("pm_node_rel-"++Vers, [local,{path,["ebin"]}]),
|
|
56
|
+
systools:make_script("pm_master_rel-"++Vers, [local,{path,["ebin"]}]).
|
|
57
|
+
|
|
58
|
+
package_scripts(Vers) ->
|
|
59
|
+
systools:make_tar("ebin/pm_node_rel-"++Vers),
|
|
60
|
+
systools:make_tar("ebin/pm_master_rel-"++Vers).
|
|
61
|
+
|
|
62
|
+
get_vsn(Module) ->
|
|
63
|
+
AppFile = code:lib_dir(Module)++"/ebin/"++atom_to_list(Module)++".app",
|
|
64
|
+
{ok,[{application,_App,Attrs}]} = file:consult(AppFile),
|
|
65
|
+
{value,{vsn,Vsn}} = lists:keysearch(vsn,1,Attrs),
|
|
66
|
+
Vsn.
|
|
67
|
+
|
|
68
|
+
install_messenger(Vers) ->
|
|
69
|
+
Root = code:root_dir(),
|
|
70
|
+
io:format("~p root: "++Root, [Vers]),
|
|
71
|
+
ok.
|
|
72
|
+
|
|
73
|
+
% Tests
|
|
@@ -13,9 +13,9 @@ convert_responses_to_int_list(L) ->
|
|
|
13
13
|
|
|
14
14
|
% Start a timer to fire off Fun after Time number of milliseconds
|
|
15
15
|
start_timer(Time, Fun) ->
|
|
16
|
-
register(
|
|
16
|
+
register(?MODULE, spawn(fun() -> tick_timer(Time, Fun) end)).
|
|
17
17
|
|
|
18
|
-
stop_timer() ->
|
|
18
|
+
stop_timer() -> ?MODULE ! stop.
|
|
19
19
|
|
|
20
20
|
tick_timer(Time, Fun) ->
|
|
21
21
|
receive
|
|
@@ -35,11 +35,4 @@ average_for_list(Num, L) ->
|
|
|
35
35
|
0;
|
|
36
36
|
_ ->
|
|
37
37
|
Num / length(L)
|
|
38
|
-
end.
|
|
39
|
-
|
|
40
|
-
% Recompiles the boot scripts
|
|
41
|
-
recompile_scripts(Vers) ->
|
|
42
|
-
systools:make_script("pm_node_rel-"++Vers, [local]),
|
|
43
|
-
systools:make_script("pm_master_rel-"++Vers, [local]).
|
|
44
|
-
|
|
45
|
-
% Tests
|
|
38
|
+
end.
|
|
@@ -6,28 +6,28 @@ module PoolParty
|
|
|
6
6
|
execute_if("$hostname", "master") do
|
|
7
7
|
has_package(:name => "heartbeat-2", :ensure => "installed") do
|
|
8
8
|
# These can also be passed in via hash
|
|
9
|
+
has_service(:name => "heartbeat", :hasstatus => true)
|
|
10
|
+
|
|
9
11
|
has_remotefile(:name => "/etc/ha.d/ha.cf") do
|
|
10
12
|
mode 444
|
|
11
|
-
notify
|
|
13
|
+
notify service(:name => "heartbeat")
|
|
12
14
|
template File.join(File.dirname(__FILE__), "..", "templates/ha.cf")
|
|
13
15
|
end
|
|
16
|
+
|
|
17
|
+
has_exec(:name => "heartbeat-update-cib", :command => "/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml", :refreshonly => true)
|
|
14
18
|
|
|
15
19
|
has_remotefile(:name => "/etc/ha.d/authkeys") do
|
|
16
20
|
mode 400
|
|
17
|
-
notify
|
|
21
|
+
notify service(:name => "heartbeat")
|
|
18
22
|
template File.join(File.dirname(__FILE__), "..", "templates/authkeys")
|
|
19
23
|
end
|
|
20
24
|
|
|
21
25
|
has_remotefile(:name => "/etc/ha.d/cib.xml") do
|
|
22
26
|
mode 444
|
|
23
|
-
notify
|
|
27
|
+
notify exec(:name => "heartbeat-update-cib")
|
|
24
28
|
template File.join(File.dirname(__FILE__), "..", "templates/cib.xml")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
has_service(:name => "heartbeat", :hasstatus => true)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
has_exec(:name => "heartbeat-update-cib", :command => "/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml", :refreshonly => true)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
31
|
|
|
32
32
|
if @parent.provisioning?
|
|
33
33
|
variable(:name => "ha_nodenames", :value => "#{list_of_running_instances.map{|a| "#{a.send :name}" }.join("\t")}")
|
|
@@ -4,25 +4,29 @@ module PoolParty
|
|
|
4
4
|
|
|
5
5
|
def enable
|
|
6
6
|
has_package(:name => "erlang")
|
|
7
|
+
has_package(:name => "erlang-dev")
|
|
8
|
+
has_package(:name => "erlang-src")
|
|
7
9
|
|
|
8
10
|
has_package(:name => "rubygems") do
|
|
9
11
|
# These should be installed automagically by poolparty, but just in case
|
|
10
12
|
# TODO: Fix the requires method with a helper
|
|
11
13
|
has_gempackage(:name => "logging")
|
|
12
|
-
has_gempackage(:name => "xml-simple") do
|
|
14
|
+
has_gempackage(:name => "xml-simple", :source => "/var/poolparty/xml-simple.gem") do
|
|
13
15
|
has_gempackage(:name => "grempe-amazon-ec2", :source => "http://gems.github.com")
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
has_gempackage(:name => "
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
has_gempackage(:name => "
|
|
20
|
-
|
|
21
|
-
has_gempackage(:name => "
|
|
22
|
-
|
|
18
|
+
has_gempackage(:name => "open4")
|
|
19
|
+
|
|
20
|
+
has_gempackage(:name => "ParseTree", :version => "2.2.0") do
|
|
21
|
+
has_gempackage(:name => "ruby2ruby")
|
|
22
|
+
has_gempackage(:name => "activesupport") do
|
|
23
|
+
has_gempackage(:name => "auser-poolparty", :source => "http://gems.github.com") do
|
|
24
|
+
has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger") do
|
|
25
|
+
has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node")
|
|
26
|
+
end
|
|
23
27
|
end
|
|
24
|
-
has_gempackage(:name => "RubyInline")
|
|
25
28
|
end
|
|
29
|
+
has_gempackage(:name => "RubyInline")
|
|
26
30
|
end
|
|
27
31
|
|
|
28
32
|
end
|
|
@@ -41,7 +45,9 @@ module PoolParty
|
|
|
41
45
|
|
|
42
46
|
# These are all requirements on the master
|
|
43
47
|
execute_if("$hostname", "master") do
|
|
44
|
-
has_cron({:command => ". /etc/profile && which cloud-maintain | /bin/sh", :minute => "*/3"})
|
|
48
|
+
has_cron({:name => "maintain script ", :command => ". /etc/profile && which cloud-maintain | /bin/sh", :minute => "*/3"})
|
|
49
|
+
# TODO: Update this so it only runs when needed
|
|
50
|
+
has_exec(:name => ". /etc/profile && server-start-master")
|
|
45
51
|
end
|
|
46
52
|
# has_host(:name => "puppet", :ip => (self.respond_to?(:master) ? self : parent).master.ip)
|
|
47
53
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
echo 'hello world' > test.del.txt
|
|
@@ -26,6 +26,14 @@ class Object
|
|
|
26
26
|
block.in_context(self).call
|
|
27
27
|
self
|
|
28
28
|
end
|
|
29
|
+
def send_if_method(v, *args)
|
|
30
|
+
if (v.nil? || v.to_s.empty? || v.is_a?(Array) || v.is_a?(Integer))
|
|
31
|
+
v
|
|
32
|
+
else
|
|
33
|
+
vs = v.to_s.to_sym
|
|
34
|
+
respond_to?(vs) ? self.send(vs, *args) : v
|
|
35
|
+
end
|
|
36
|
+
end
|
|
29
37
|
def to_option_string
|
|
30
38
|
case self.class
|
|
31
39
|
when String
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module Messenger
|
|
3
|
+
|
|
4
|
+
# TODO: Fix cookie setting
|
|
5
|
+
def self.erl_command(hostname, extra="")
|
|
6
|
+
command_line_opts = "-pa #{append_dir}/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname #{hostname} -setcookie poolparty"
|
|
7
|
+
|
|
8
|
+
"erl #{command_line_opts} #{extra} 2>&1 &"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.append_dir
|
|
12
|
+
::File.join( ::File.dirname(__FILE__), "..", "..", "erlang/messenger" )
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def messenger_send!(cmd="", testing=false)
|
|
16
|
+
cmd = Messenger.erl_command("client", "-rsh ssh -noshell -run pm_client #{cmd} -s erlang halt")
|
|
17
|
+
testing ? cmd : Kernel.system(cmd)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module PoolParty
|
|
24
|
+
module Cloud
|
|
25
|
+
class Cloud
|
|
26
|
+
include PoolParty::Messenger
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -71,9 +71,9 @@ module PoolParty
|
|
|
71
71
|
setup_runner(@cloud)
|
|
72
72
|
|
|
73
73
|
unless testing
|
|
74
|
-
puts "Logging on to #{@instance.ip}" if verbose
|
|
75
|
-
@cloud.prepare_reconfiguration
|
|
74
|
+
puts "Logging on to #{@instance.ip}" if verbose
|
|
76
75
|
@cloud.rsync_storage_files_to(@instance)
|
|
76
|
+
@cloud.prepare_reconfiguration
|
|
77
77
|
|
|
78
78
|
cmd = "cd #{Base.remote_storage_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh && rm install_#{name}.sh"
|
|
79
79
|
hide_output do
|
|
@@ -92,7 +92,7 @@ module PoolParty
|
|
|
92
92
|
def process_configure!(testing=false)
|
|
93
93
|
error unless valid?
|
|
94
94
|
write_configure_file
|
|
95
|
-
setup_runner(@cloud)
|
|
95
|
+
setup_runner(@cloud)
|
|
96
96
|
|
|
97
97
|
unless testing
|
|
98
98
|
puts "Logging on to #{@instance.ip}" if verbose
|
|
@@ -229,10 +229,10 @@ module PoolParty
|
|
|
229
229
|
case @os
|
|
230
230
|
when :ubuntu
|
|
231
231
|
"
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
232
|
+
touch /etc/apt/sources.list
|
|
233
|
+
echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list
|
|
234
|
+
# aptitude update -y 2>&1
|
|
235
|
+
# aptitude autoclean 2>&1 &
|
|
236
236
|
"
|
|
237
237
|
else
|
|
238
238
|
"# No system upgrade needed"
|
|
@@ -17,8 +17,6 @@ module PoolParty
|
|
|
17
17
|
|
|
18
18
|
def install_tasks
|
|
19
19
|
[
|
|
20
|
-
install_haproxy,
|
|
21
|
-
install_heartbeat,
|
|
22
20
|
create_local_hosts_entry,
|
|
23
21
|
setup_basic_structure,
|
|
24
22
|
setup_configs,
|
|
@@ -40,18 +38,16 @@ module PoolParty
|
|
|
40
38
|
# If the master is not in the hosts file, then add it to the hosts file
|
|
41
39
|
def create_local_hosts_entry
|
|
42
40
|
<<-EOS
|
|
43
|
-
if [ -z \"$(grep -v '#' /etc/hosts | grep '
|
|
41
|
+
if [ -z \"$(grep -v '#' /etc/hosts | grep 'puppet')" ]; then echo '#{@master_ip} puppet master' >> /etc/hosts; fi
|
|
44
42
|
EOS
|
|
45
43
|
end
|
|
46
44
|
|
|
47
45
|
def setup_basic_structure
|
|
48
46
|
<<-EOS
|
|
49
|
-
puppetmasterd --mkusers
|
|
50
|
-
mkdir -p #{Base.remote_storage_path}
|
|
51
|
-
echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp
|
|
52
|
-
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
|
53
47
|
mkdir -p /etc/puppet/manifests/nodes
|
|
54
48
|
mkdir -p /etc/puppet/manifests/classes
|
|
49
|
+
echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp
|
|
50
|
+
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
|
55
51
|
cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
|
|
56
52
|
EOS
|
|
57
53
|
end
|
|
@@ -67,11 +67,13 @@ module PoolParty
|
|
|
67
67
|
|
|
68
68
|
# Set the parent on the resource
|
|
69
69
|
def set_parent(pare, sink_options=true)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
unless pare == self
|
|
71
|
+
@parent = pare
|
|
72
|
+
# Add self as a service on the parent
|
|
73
|
+
pare.add_service(self) if pare.respond_to?(:add_service)
|
|
74
|
+
# Take the options of the parents
|
|
75
|
+
configure(pare.options) if pare.respond_to?(:options) && sink_options
|
|
76
|
+
end
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
def number_of_resources
|
|
@@ -45,7 +45,12 @@ module PoolParty
|
|
|
45
45
|
(parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m)) ? nil : parent.send(m, *args, &block)
|
|
46
46
|
end
|
|
47
47
|
else
|
|
48
|
-
options[m] =
|
|
48
|
+
options[m] =
|
|
49
|
+
if (args.is_a?(Array) && args.size > 1)
|
|
50
|
+
args
|
|
51
|
+
else
|
|
52
|
+
args[0]
|
|
53
|
+
end
|
|
49
54
|
end
|
|
50
55
|
end
|
|
51
56
|
|
|
@@ -6,7 +6,8 @@ module PoolParty
|
|
|
6
6
|
str ? options.merge!(:require => str) : options[:require]
|
|
7
7
|
end
|
|
8
8
|
def requires(str=nil)
|
|
9
|
-
str ? options.append!(:require => str) : options[:require]
|
|
9
|
+
# str ? options.append!(:require => str) : options[:require]
|
|
10
|
+
str ? options.append!(:require => send_if_method(str)) : options[:require]
|
|
10
11
|
end
|
|
11
12
|
def ensures(str="running")
|
|
12
13
|
if %w(absent running).map {|a| self.send a.to_sym}.include?(str)
|
|
@@ -225,9 +225,11 @@ module PoolParty
|
|
|
225
225
|
|
|
226
226
|
# Prepare reconfiguration on the master
|
|
227
227
|
# TODO: Fix the killall
|
|
228
|
+
# TODO: Curious about the puppet/ssl problems...
|
|
229
|
+
# puppetd --test --no-daemonize 2>&1 &
|
|
228
230
|
def prepare_reconfiguration
|
|
229
231
|
unless @prepared
|
|
230
|
-
cmd = "killall ruby && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose
|
|
232
|
+
cmd = "killall ruby 2>&1 && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose 2>&1"
|
|
231
233
|
run_command_on(cmd, master)
|
|
232
234
|
@prepared = true
|
|
233
235
|
end
|
|
@@ -8,16 +8,16 @@ module PoolParty
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def has_git_repos
|
|
11
|
-
|
|
11
|
+
has_package(:name => "git-core")
|
|
12
|
+
exec({:name => "git-#{name}", :requires => package(:name => "git-core")}) do
|
|
12
13
|
command parent.user ? "git clone #{parent.user}@#{parent.source} #{parent.path}" : "git clone #{parent.source} #{parent.to ? parent.to : ""}"
|
|
13
14
|
cwd "#{parent.cwd if parent.cwd}"
|
|
14
15
|
creates "#{::File.join( (parent.cwd ? parent.cwd : cwd), ::File.basename(parent.source, ::File.extname(parent.source)) )}/.git"
|
|
15
|
-
|
|
16
|
+
|
|
16
17
|
exec(:name => "update-#{name}") do
|
|
17
18
|
cwd ::File.dirname(parent.creates)
|
|
18
19
|
command "git pull"
|
|
19
20
|
end
|
|
20
|
-
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
data/lib/poolparty/pool/base.rb
CHANGED
|
@@ -13,7 +13,7 @@ module PoolParty
|
|
|
13
13
|
:environment => "production",
|
|
14
14
|
:user => "root", # This should change here
|
|
15
15
|
:base_keypair_path => "~/.ec2",
|
|
16
|
-
:tmp_path => "tmp",
|
|
16
|
+
:tmp_path => "/tmp/poolparty",
|
|
17
17
|
:remote_storage_path => "/var/poolparty",
|
|
18
18
|
:fileserver_base => "puppet:///files",
|
|
19
19
|
:base_config_directory => "/etc/poolparty",
|
|
@@ -74,13 +74,18 @@ module PoolParty
|
|
|
74
74
|
"/var/poolparty"
|
|
75
75
|
].select do |dir|
|
|
76
76
|
dir if ::File.directory?(dir) && ::File.readable?(dir)
|
|
77
|
-
end.first || ::File.join(
|
|
77
|
+
end.first || ::File.join( "/tmp/poolparty")
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def pool_logger_location
|
|
81
81
|
File.join(Dir.pwd, "logs")
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
+
# Array of allowed_commands that you can run on the remote nodes
|
|
85
|
+
def allowed_commands
|
|
86
|
+
@allowed_commands ||= open(::File.join( ::File.dirname(__FILE__), "..", "config", "allowed_commands.yml")).read.split(/\n/).map {|a| a.chomp }
|
|
87
|
+
end
|
|
88
|
+
|
|
84
89
|
end
|
|
85
90
|
end
|
|
86
91
|
end
|
data/lib/poolparty/pool/cloud.rb
CHANGED
|
@@ -115,9 +115,7 @@ module PoolParty
|
|
|
115
115
|
reset_resources!
|
|
116
116
|
add_poolparty_base_requirements
|
|
117
117
|
|
|
118
|
-
@build_manifest = returning Array.new do |str|
|
|
119
|
-
|
|
120
|
-
str << resources_string_from_resources(resources)
|
|
118
|
+
@build_manifest = returning Array.new do |str|
|
|
121
119
|
|
|
122
120
|
# Refactor this into the resources method
|
|
123
121
|
# TODO
|
|
@@ -126,6 +124,8 @@ module PoolParty
|
|
|
126
124
|
str << @cp.to_string
|
|
127
125
|
str << @cp.include_string
|
|
128
126
|
end
|
|
127
|
+
|
|
128
|
+
str << resources_string_from_resources(resources)
|
|
129
129
|
|
|
130
130
|
str << "# Custom functions"
|
|
131
131
|
str << Resources::CustomResource.custom_functions_to_string
|