auser-poolparty 0.2.16 → 0.2.20
Sign up to get free protection for your applications and to get access to all the features.
- 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
|