poolparty 0.2.18 → 0.2.69
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 +142 -47
- data/PostInstall.txt +5 -5
- data/README.txt +25 -4
- data/Rakefile +46 -2
- data/bin/cloud +12 -21
- data/bin/cloud-add-keypair +18 -13
- data/bin/cloud-configure +11 -18
- data/bin/cloud-contract +7 -17
- data/bin/cloud-ensure-provisioning +39 -0
- data/bin/cloud-expand +9 -17
- data/bin/cloud-handle-load +27 -0
- data/bin/cloud-list +3 -9
- data/bin/cloud-maintain +12 -18
- data/bin/cloud-osxcopy +3 -9
- data/bin/cloud-provision +20 -21
- data/bin/cloud-refresh +4 -13
- data/bin/cloud-run +3 -4
- data/bin/cloud-ssh +3 -2
- data/bin/cloud-start +18 -21
- data/bin/cloud-stats +17 -0
- data/bin/cloud-terminate +4 -7
- data/bin/messenger-get-current-nodes +14 -0
- data/bin/pool +12 -12
- data/bin/pool-describe +0 -1
- data/bin/{pool-spec → pool-generate} +1 -0
- data/bin/pool-init +28 -0
- data/bin/pool-list +14 -12
- data/bin/pool-start +11 -17
- data/bin/server-build-messenger +13 -6
- data/bin/server-fire-cmd +1 -1
- data/bin/server-get-load +5 -16
- data/bin/server-list-active +3 -10
- data/bin/server-rerun +4 -4
- data/bin/server-send-command +18 -0
- data/bin/server-show-stats +17 -0
- data/bin/server-start-client +29 -0
- data/bin/server-start-master +13 -14
- data/bin/server-start-node +14 -15
- data/bin/server-stop-client +3 -0
- data/bin/server-stop-master +3 -0
- data/bin/server-stop-node +3 -0
- data/bin/server-update-hosts +48 -0
- data/config/hoe.rb +4 -3
- data/examples/plugin_without_plugin_directory.rb +1 -2
- data/generators/poolspec/USAGE +2 -2
- data/generators/poolspec/poolspec_generator.rb +2 -1
- data/generators/poolspec/templates/pool_spec_template.erb +3 -2
- data/lib/erlang/messenger/Rakefile +12 -0
- data/lib/erlang/messenger/ebin/client.app +19 -0
- data/lib/erlang/messenger/ebin/master.app +1 -1
- data/lib/erlang/messenger/ebin/node.app +1 -1
- data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +1 -0
- 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 +27 -0
- 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 +238 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +82 -85
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +80 -85
- data/lib/erlang/messenger/src/client_app.erl +39 -0
- data/lib/erlang/messenger/src/client_server.erl +60 -0
- data/lib/erlang/messenger/src/pm_client.erl +48 -18
- data/lib/erlang/messenger/src/pm_client_old.erl +52 -0
- data/lib/erlang/messenger/src/pm_client_supervisor.erl +38 -0
- data/lib/erlang/messenger/src/pm_cluster.erl +20 -16
- data/lib/erlang/messenger/src/pm_event_manager.erl +27 -0
- data/lib/erlang/messenger/src/pm_master.erl +126 -34
- data/lib/erlang/messenger/src/pm_master_event_handler.erl +72 -0
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +9 -10
- data/lib/erlang/messenger/src/pm_node.erl +107 -30
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +13 -15
- data/lib/erlang/messenger/src/pm_packager.erl +5 -2
- data/lib/erlang/messenger/src/pm_strings.erl +11 -0
- data/lib/erlang/messenger/src/utils.erl +43 -8
- data/lib/erlang/messenger/useful_snippets +17 -0
- data/lib/poolparty/aska/aska.rb +150 -0
- data/lib/poolparty/base_packages/haproxy.rb +19 -26
- data/lib/poolparty/base_packages/heartbeat.rb +48 -47
- data/lib/poolparty/base_packages/poolparty.rb +88 -36
- data/lib/poolparty/base_packages/runit.rb +21 -0
- data/lib/poolparty/config/postlaunchmessage.txt +5 -0
- data/lib/poolparty/core/array.rb +4 -1
- data/lib/poolparty/core/class.rb +2 -0
- data/lib/poolparty/core/exception.rb +2 -1
- data/lib/poolparty/core/hash.rb +2 -2
- data/lib/poolparty/core/kernel.rb +3 -3
- data/lib/poolparty/core/metaid.rb +15 -0
- data/lib/poolparty/core/object.rb +42 -2
- data/lib/poolparty/core/string.rb +21 -6
- data/lib/poolparty/core/symbol.rb +9 -0
- data/lib/poolparty/dependency_resolutions/puppet.rb +20 -7
- data/lib/poolparty/exceptions/CloudNotFoundException.rb +7 -0
- data/lib/poolparty/exceptions/LoadRulesException.rb +7 -0
- data/lib/poolparty/exceptions/MasterException.rb +10 -0
- data/lib/poolparty/helpers/binary.rb +37 -4
- data/lib/poolparty/helpers/console.rb +25 -8
- data/lib/poolparty/helpers/nice_printer.rb +36 -0
- data/lib/poolparty/helpers/optioner.rb +51 -16
- data/lib/poolparty/helpers/provisioner_base.rb +117 -28
- data/lib/poolparty/helpers/provisioners/master.rb +102 -35
- data/lib/poolparty/helpers/provisioners/slave.rb +25 -9
- data/lib/poolparty/modules/cloud_dsl.rb +13 -0
- data/lib/poolparty/modules/cloud_resourcer.rb +51 -8
- data/lib/poolparty/modules/configurable.rb +1 -1
- data/lib/poolparty/modules/definable_resource.rb +2 -2
- data/lib/poolparty/modules/file_writer.rb +37 -6
- data/lib/poolparty/modules/method_missing_sugar.rb +8 -3
- data/lib/poolparty/modules/pretty_printer.rb +1 -0
- data/lib/poolparty/modules/resourcing_dsl.rb +4 -2
- data/lib/poolparty/modules/thread_pool.rb +106 -0
- data/lib/poolparty/monitors/base_monitor.rb +65 -6
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +1 -1
- data/lib/poolparty/monitors/monitors/memory_monitor.rb +28 -1
- data/lib/poolparty/monitors/monitors/web_monitor.rb +18 -0
- data/lib/poolparty/net/messenger.rb +72 -0
- data/lib/poolparty/net/remote.rb +5 -2
- data/lib/poolparty/net/remote_bases/ec2/ec2_response_object.rb +66 -0
- data/lib/poolparty/net/remote_bases/ec2.rb +133 -131
- data/lib/poolparty/net/remote_instance.rb +28 -6
- data/lib/poolparty/net/remoter.rb +117 -64
- data/lib/poolparty/net/remoter_base.rb +49 -11
- data/lib/poolparty/plugins/deploydirectory.rb +66 -0
- data/lib/poolparty/plugins/line.rb +5 -4
- data/lib/poolparty/plugins/rsyncmirror.rb +26 -0
- data/lib/poolparty/plugins/runit.rb +96 -0
- data/lib/poolparty/plugins/svn.rb +1 -1
- data/lib/poolparty/pool/base.rb +47 -18
- data/lib/poolparty/pool/cloud.rb +121 -65
- data/lib/poolparty/pool/custom_resource.rb +4 -20
- data/lib/poolparty/pool/loggable.rb +3 -8
- data/lib/poolparty/pool/plugin.rb +14 -19
- data/lib/poolparty/pool/plugin_model.rb +8 -8
- data/lib/poolparty/pool/pool.rb +28 -11
- data/lib/poolparty/pool/resource.rb +109 -40
- data/lib/poolparty/pool/resources/class_package.rb +74 -33
- data/lib/poolparty/pool/resources/conditional.rb +32 -10
- data/lib/poolparty/pool/resources/custom_service.rb +30 -0
- data/lib/poolparty/pool/resources/exec.rb +6 -5
- data/lib/poolparty/pool/resources/gem_package.rb +52 -0
- data/lib/poolparty/pool/resources/mount.rb +22 -0
- data/lib/poolparty/pool/resources/package.rb +13 -3
- data/lib/poolparty/pool/resources/sshkey.rb +1 -1
- data/lib/poolparty/pool/resources/variable.rb +4 -0
- data/lib/poolparty/pool/script.rb +8 -6
- data/lib/poolparty/templates/haproxy.conf +1 -1
- data/lib/poolparty/templates/messenger/client/log-run.erb +2 -0
- data/lib/poolparty/templates/messenger/client/run.erb +4 -0
- data/lib/poolparty/templates/messenger/master/log-run.erb +2 -0
- data/lib/poolparty/templates/messenger/master/run.erb +4 -0
- data/lib/poolparty/templates/messenger/node/log-run.erb +2 -0
- data/lib/poolparty/templates/messenger/node/run.erb +4 -0
- data/lib/poolparty/templates/poolparty.monitor +1 -1
- data/lib/poolparty/templates/puppet.conf +0 -0
- data/lib/poolparty/templates/puppetcleaner +6 -0
- data/lib/poolparty/templates/puppetrerun +9 -0
- data/lib/poolparty/templates/puppetrunner +8 -0
- data/lib/poolparty/templates/yaws.conf +19 -0
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +35 -6
- data/lib/poolpartycl.rb +4 -0
- data/log/pool.logs +0 -0
- data/poolparty.gemspec +574 -61
- data/spec/poolparty/aska/aska_spec.rb +122 -0
- data/spec/poolparty/bin/console_spec.rb +18 -0
- data/spec/poolparty/core/hash_spec.rb +4 -4
- data/spec/poolparty/core/object_spec.rb +29 -0
- data/spec/poolparty/core/string_spec.rb +6 -0
- data/spec/poolparty/core/time_spec.rb +0 -3
- data/spec/poolparty/helpers/binary_spec.rb +2 -2
- data/spec/poolparty/helpers/optioner_spec.rb +1 -4
- data/spec/poolparty/helpers/provisioner_base_spec.rb +14 -1
- data/spec/poolparty/helpers/provisioners/master_spec.rb +3 -3
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +3 -3
- data/spec/poolparty/modules/configurable_spec.rb +4 -1
- data/spec/poolparty/monitors/base_monitor_spec.rb +94 -2
- data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +0 -1
- data/spec/poolparty/monitors/monitors/memory_monitor_spec.rb +47 -0
- data/spec/poolparty/{helpers → net}/messenger_spec.rb +3 -1
- data/spec/poolparty/net/remote_bases/ec2_spec.rb +46 -5
- data/spec/poolparty/net/remote_instance_spec.rb +2 -1
- data/spec/poolparty/net/remote_spec.rb +30 -8
- data/spec/poolparty/net/remoter_base_spec.rb +4 -1
- data/spec/poolparty/net/remoter_spec.rb +11 -108
- data/spec/poolparty/plugins/deploydirectory_spec.rb +51 -0
- data/spec/poolparty/pool/base_spec.rb +43 -33
- data/spec/poolparty/pool/cloud_spec.rb +299 -248
- data/spec/poolparty/pool/custom_resource_spec.rb +10 -5
- data/spec/poolparty/pool/example_spec.rb +0 -84
- data/spec/poolparty/pool/plugin_model_spec.rb +3 -2
- data/spec/poolparty/pool/plugin_spec.rb +89 -62
- data/spec/poolparty/pool/pool_spec.rb +17 -2
- data/spec/poolparty/pool/resource_spec.rb +341 -236
- data/spec/poolparty/pool/resources/class_package_spec.rb +102 -66
- data/spec/poolparty/pool/resources/conditional_spec.rb +65 -26
- data/spec/poolparty/pool/resources/cron_spec.rb +3 -2
- data/spec/poolparty/pool/resources/exec_spec.rb +1 -1
- data/spec/poolparty/pool/resources/gem_spec.rb +18 -14
- data/spec/poolparty/pool/resources/remote_file_spec.rb +1 -1
- data/spec/poolparty/pool/resources/variable_spec.rb +1 -1
- data/spec/poolparty/pool/script_spec.rb +58 -37
- data/spec/poolparty/pool/test_plugins/webserver.rb +1 -0
- data/spec/poolparty/spec_helper.rb +16 -5
- data/tasks/deployment.rake +19 -3
- data/tasks/development.rake +11 -2
- data/tasks/ec2.rake +9 -1
- data/website/index.html +2 -2
- metadata +167 -70
- data/bin/pool-provision +0 -34
- data/erl_crash.dump +0 -8409
- data/examples/with_apache_plugin.rb +0 -22
- data/lib/erlang/messenger/Makefile +0 -15
- 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/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_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- 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/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/erlang/messenger/src/pm_event_handler.erl +0 -21
- data/lib/poolparty/config/allowed_commands.yml +0 -1
- data/lib/poolparty/helpers/messenger.rb +0 -29
- data/lib/poolparty/plugins/git.rb +0 -39
- data/lib/poolparty/pool/resources/gem.rb +0 -28
- data/lib/poolparty/pool/tmp/.ppkeys +0 -3
- data/lib/poolparty/pool/tmp/happydayz +0 -1
- data/lib/poolparty/pool/tmp/install_master.sh +0 -33
- data/lib/poolparty/pool/tmp/pool.spec +0 -11
- data/lib/poolparty/pool/tmp/poolparty.pp +0 -600
- data/lib/poolparty/pool/tmp/tc-instances.list +0 -1
- data/lib/poolparty/templates/fileserver.conf +0 -4
- data/spec/poolparty/plugins/git_spec.rb +0 -33
- data/test_manifest.pp +0 -658
data/lib/poolparty/pool/base.rb
CHANGED
|
@@ -10,22 +10,28 @@ module PoolParty
|
|
|
10
10
|
extend MethodMissingSugar
|
|
11
11
|
|
|
12
12
|
default_options({
|
|
13
|
-
:environment => "production",
|
|
14
13
|
:user => "root", # This should change here
|
|
15
|
-
:base_keypair_path => "
|
|
14
|
+
:base_keypair_path => "#{ENV["HOME"]}/.ec2",
|
|
16
15
|
:tmp_path => "/tmp/poolparty",
|
|
17
|
-
:remote_storage_path => "/var/poolparty",
|
|
18
|
-
:
|
|
16
|
+
:remote_storage_path => "/var/poolparty",
|
|
17
|
+
:remote_gem_path => "/var/poolparty/gems",
|
|
18
|
+
:fileserver_base => "puppet://master/files",
|
|
19
19
|
:base_config_directory => "/etc/poolparty",
|
|
20
20
|
:template_directory => "templates",
|
|
21
21
|
:template_path => "/var/lib/puppet/templates",
|
|
22
22
|
:module_path => "/etc/puppet/modules/poolparty",
|
|
23
23
|
:default_specfile_name => "pool.spec",
|
|
24
|
+
:default_project_specfile_name => "spec/pool.spec",
|
|
24
25
|
:port => "80",
|
|
25
26
|
:forwarding_port => "8080",
|
|
26
|
-
:proxy_mode => "http",
|
|
27
|
+
:proxy_mode => "http",
|
|
28
|
+
:messenger_client_port => 7050,
|
|
27
29
|
# EC2 Options
|
|
28
|
-
:ami => "ami-1cd73375"
|
|
30
|
+
:ami => "ami-1cd73375",
|
|
31
|
+
:size => 'm1.small', # must be 'm1.small', 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
|
|
32
|
+
:security_group => ["default"],
|
|
33
|
+
# Options that should not be touched pretty much ever
|
|
34
|
+
:manifest_path => "/etc/puppet/manifests"
|
|
29
35
|
})
|
|
30
36
|
|
|
31
37
|
# Class methods
|
|
@@ -35,13 +41,16 @@ module PoolParty
|
|
|
35
41
|
end
|
|
36
42
|
# Get the access_key
|
|
37
43
|
def access_key
|
|
38
|
-
ENV["
|
|
44
|
+
@access_key ||= ENV["AWS_ACCESS_KEY"] ? ENV["AWS_ACCESS_KEY"] : load_keys_from_file[:access_key]
|
|
39
45
|
end
|
|
40
46
|
def secret_access_key
|
|
41
|
-
ENV["
|
|
47
|
+
@secret_access_key ||= ENV["AWS_SECRET_ACCESS_KEY"] ? ENV["AWS_SECRET_ACCESS_KEY"] : load_keys_from_file[:secret_access_key]
|
|
48
|
+
end
|
|
49
|
+
def read_keyfile
|
|
50
|
+
open(get_working_key_file_locations).read
|
|
42
51
|
end
|
|
43
52
|
def load_keys_from_file
|
|
44
|
-
@keys ||= get_working_key_file_locations ? YAML::load(
|
|
53
|
+
@keys ||= get_working_key_file_locations ? YAML::load( read_keyfile ) : {}
|
|
45
54
|
end
|
|
46
55
|
# Store the keys in a yaml format to give the master access
|
|
47
56
|
# So that the master has access to the files
|
|
@@ -50,6 +59,13 @@ module PoolParty
|
|
|
50
59
|
write_to_file( key_file_locations.first, YAML::dump({:access_key => access_key, :secret_access_key => secret_access_key}))
|
|
51
60
|
end
|
|
52
61
|
end
|
|
62
|
+
def store_keys_in_file_for(obj=nil)
|
|
63
|
+
if obj
|
|
64
|
+
@access_key = obj.access_key
|
|
65
|
+
@secret_access_key = obj.secret_access_key
|
|
66
|
+
end
|
|
67
|
+
store_keys_in_file
|
|
68
|
+
end
|
|
53
69
|
def reset!
|
|
54
70
|
@keys = nil
|
|
55
71
|
end
|
|
@@ -68,24 +84,37 @@ module PoolParty
|
|
|
68
84
|
"ppkeys"
|
|
69
85
|
]
|
|
70
86
|
end
|
|
71
|
-
|
|
72
87
|
def storage_directory
|
|
73
88
|
[
|
|
74
89
|
"/var/poolparty"
|
|
75
90
|
].select do |dir|
|
|
76
|
-
dir if
|
|
91
|
+
dir if viable_directory?(dir)
|
|
77
92
|
end.first || ::File.join( "/tmp/poolparty")
|
|
78
93
|
end
|
|
79
|
-
|
|
94
|
+
def logger_location
|
|
95
|
+
[
|
|
96
|
+
"/var/log/poolparty"
|
|
97
|
+
].select do |dir|
|
|
98
|
+
dir if viable_directory?(dir)
|
|
99
|
+
end.first || ::File.join(Dir.pwd, "log")
|
|
100
|
+
end
|
|
101
|
+
# Assume the logs will be at the pool.log location within the
|
|
102
|
+
# logger_location set above
|
|
80
103
|
def pool_logger_location
|
|
81
|
-
File.join(
|
|
104
|
+
::File.join(logger_location, "pool.log")
|
|
105
|
+
end
|
|
106
|
+
def custom_monitor_directories
|
|
107
|
+
[
|
|
108
|
+
"/var/poolparty/monitors",
|
|
109
|
+
"/etc/poolparty/monitors",
|
|
110
|
+
"#{Dir.pwd}/monitors"
|
|
111
|
+
].select {|d| d if viable_directory?(d) }
|
|
82
112
|
end
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
def
|
|
86
|
-
|
|
113
|
+
# Only return true if the directory we are reading is both readable
|
|
114
|
+
# and exists
|
|
115
|
+
def viable_directory?(dir)
|
|
116
|
+
::File.directory?(dir) && ::File.readable?(dir)
|
|
87
117
|
end
|
|
88
|
-
|
|
89
118
|
end
|
|
90
119
|
end
|
|
91
120
|
end
|
data/lib/poolparty/pool/cloud.rb
CHANGED
|
@@ -3,8 +3,8 @@ require File.dirname(__FILE__) + "/resource"
|
|
|
3
3
|
|
|
4
4
|
module PoolParty
|
|
5
5
|
module Cloud
|
|
6
|
-
def cloud(name=:
|
|
7
|
-
clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name,
|
|
6
|
+
def cloud(name=:app, parent=self, &block)
|
|
7
|
+
clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name, parent, &block))
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def clouds
|
|
@@ -12,56 +12,69 @@ module PoolParty
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def with_cloud(cl, opts={}, &block)
|
|
15
|
-
|
|
16
|
-
cl.
|
|
15
|
+
raise CloudNotFoundException.new("Cloud not found") unless cl
|
|
16
|
+
cl.options.merge!(opts) if opts
|
|
17
|
+
cl.run_in_context &block if block
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
class Cloud
|
|
20
|
-
attr_reader :
|
|
21
|
+
attr_reader :templates
|
|
21
22
|
include PoolParty::PluginModel
|
|
22
23
|
include PoolParty::Resources
|
|
23
24
|
include PrettyPrinter
|
|
24
25
|
include Configurable
|
|
25
26
|
include CloudResourcer
|
|
26
27
|
# extend CloudResourcer
|
|
27
|
-
# Net methods
|
|
28
|
-
include PoolParty::Remote::RemoterBase
|
|
28
|
+
# Net methods
|
|
29
29
|
include Remote
|
|
30
|
+
include PoolParty::CloudDsl
|
|
30
31
|
|
|
31
32
|
default_options({
|
|
32
33
|
:minimum_instances => 2,
|
|
33
|
-
:maximum_instances =>
|
|
34
|
+
:maximum_instances => 5,
|
|
35
|
+
:contract_when => "cpu < 0.65",
|
|
36
|
+
:expand_when => "cpu > 1.9",
|
|
34
37
|
:access_key => Base.access_key,
|
|
35
38
|
:secret_access_key => Base.secret_access_key,
|
|
36
39
|
:ec2_dir => ENV["EC2_HOME"],
|
|
37
40
|
:keypair => (ENV["KEYPAIR_NAME"].nil? || ENV["KEYPAIR_NAME"].empty?) ? nil : ENV["KEYPAIR_NAME"],
|
|
38
|
-
:ami => 'ami-44bd592d'
|
|
39
|
-
:polling_time => "30.seconds"
|
|
41
|
+
:ami => 'ami-44bd592d'
|
|
40
42
|
})
|
|
41
43
|
|
|
42
|
-
def initialize(name,
|
|
43
|
-
@
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
def initialize(name, pare=self, &block)
|
|
45
|
+
@cloud_name = name
|
|
46
|
+
@cloud_name.freeze
|
|
47
|
+
|
|
48
|
+
plugin_directory "#{::Dir.pwd}/plugins"
|
|
49
|
+
|
|
50
|
+
p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
|
|
51
|
+
run_setup(p, &block)
|
|
52
|
+
|
|
53
|
+
# set_parent(parent) if parent && !@parent
|
|
54
|
+
# self.run_in_context parent, &block if block
|
|
55
|
+
setup_defaults
|
|
56
|
+
reset_remoter_base!
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def setup_defaults
|
|
47
60
|
# this can be overridden in the spec, but ec2 is the default
|
|
48
61
|
self.using :ec2
|
|
62
|
+
generate_keypair unless has_keypair?
|
|
49
63
|
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
# pool_name and the cloud_name
|
|
54
|
-
def keypair(*args)
|
|
55
|
-
has_keypair? ? options[:keypair] : generate_keypair(*args)
|
|
64
|
+
|
|
65
|
+
def name
|
|
66
|
+
@cloud_name
|
|
56
67
|
end
|
|
68
|
+
|
|
69
|
+
# Keypairs
|
|
57
70
|
# Let's just make sure that the keypair exists on the options
|
|
58
71
|
def has_keypair?
|
|
59
|
-
options.has_key?(:keypair) && options[:keypair]
|
|
72
|
+
options.has_key?(:keypair) && options[:keypair] && !options[:keypair].empty?
|
|
60
73
|
end
|
|
61
74
|
# Generate a keypair based on the parent's name (if there is a parent)
|
|
62
75
|
# and the cloud's name
|
|
63
76
|
def generate_keypair(*args)
|
|
64
|
-
options[:keypair] =
|
|
77
|
+
options[:keypair] = "#{parent && parent.is_a?(PoolParty::Pool::Pool) ? parent.name : "poolparty"}_#{name}" unless has_keypair?
|
|
65
78
|
end
|
|
66
79
|
|
|
67
80
|
# Prepare to send the new configuration to the instances
|
|
@@ -72,19 +85,29 @@ module PoolParty
|
|
|
72
85
|
# Then, send the saved containing cloud instances to give the
|
|
73
86
|
# remote master access to the cloud options that are required
|
|
74
87
|
# for the master to run checks
|
|
75
|
-
def
|
|
88
|
+
def prepare_for_configuration
|
|
76
89
|
# clear_base_directory
|
|
77
90
|
make_base_directory
|
|
78
91
|
copy_misc_templates
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
copy_custom_monitors
|
|
93
|
+
store_keys_in_file
|
|
94
|
+
Script.save!(self)
|
|
95
|
+
# not my favorite...
|
|
96
|
+
copy_ssh_key
|
|
82
97
|
end
|
|
83
98
|
|
|
99
|
+
# Copy the ssh keys to the storage directory in preparation for
|
|
100
|
+
# configuration
|
|
84
101
|
def copy_ssh_key
|
|
85
102
|
copy_file_to_storage_directory(full_keypair_path)
|
|
86
103
|
end
|
|
87
104
|
|
|
105
|
+
# Store our keys for cloud access in a file
|
|
106
|
+
# that is specific to this cloud
|
|
107
|
+
def store_keys_in_file
|
|
108
|
+
Base.store_keys_in_file_for(self)
|
|
109
|
+
end
|
|
110
|
+
|
|
88
111
|
# Build the new poolparty manifest
|
|
89
112
|
# Wrapping all of these requirements into the one
|
|
90
113
|
# poolparty class.
|
|
@@ -92,61 +115,92 @@ module PoolParty
|
|
|
92
115
|
# TODO: Consider the benefits of moving all the manifest
|
|
93
116
|
# classes to separate files and keeping the containing
|
|
94
117
|
# references in the include
|
|
95
|
-
def build_and_store_new_config_file
|
|
96
|
-
|
|
118
|
+
def build_and_store_new_config_file(force=false)
|
|
119
|
+
vputs "Building new manifest configuration file (forced: #{force})"
|
|
120
|
+
manifest = force ? rebuild_manifest : build_manifest
|
|
97
121
|
config_file = ::File.join(Base.storage_directory, "poolparty.pp")
|
|
98
|
-
::File.open(config_file, "w
|
|
99
|
-
file <<
|
|
100
|
-
file << @manifest
|
|
101
|
-
file << "}"
|
|
122
|
+
::File.open(config_file, "w") do |file|
|
|
123
|
+
file << manifest
|
|
102
124
|
end
|
|
103
125
|
end
|
|
104
126
|
|
|
105
127
|
def copy_misc_templates
|
|
106
|
-
["
|
|
128
|
+
["namespaceauth.conf"].each do |f|
|
|
107
129
|
copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), "..", "templates", f))
|
|
108
130
|
end
|
|
109
131
|
end
|
|
132
|
+
|
|
133
|
+
# If there is a directory named monitors in the same directory
|
|
134
|
+
# as the pool specification file is in,
|
|
135
|
+
# then create a monitors directory in the storage directory
|
|
136
|
+
# and mirror the two. When PoolParty "boots" up, it scans
|
|
137
|
+
# the monitors directory for any custom monitors
|
|
138
|
+
# that are in known locations, these are included
|
|
139
|
+
def copy_custom_monitors
|
|
140
|
+
unless Base.custom_monitor_directories.empty?
|
|
141
|
+
make_directory_in_storage_directory("monitors")
|
|
142
|
+
Dir["#{Base.custom_monitor_directories}/*.rb"].each do |f|
|
|
143
|
+
copy_file_to_storage_directory(f, "monitors")
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
110
147
|
|
|
111
148
|
# Configuration files
|
|
112
149
|
def build_manifest
|
|
150
|
+
vputs "Building manifest"
|
|
113
151
|
@build_manifest ||= build_from_existing_file
|
|
114
152
|
unless @build_manifest
|
|
115
|
-
|
|
153
|
+
|
|
116
154
|
add_poolparty_base_requirements
|
|
117
155
|
|
|
118
|
-
@build_manifest =
|
|
119
|
-
|
|
120
|
-
str << resources_string_from_resources(resources)
|
|
121
|
-
|
|
122
|
-
# Refactor this into the resources method
|
|
123
|
-
# TODO
|
|
124
|
-
services.each do |service|
|
|
125
|
-
@cp = classpackage_with_self(service)
|
|
126
|
-
str << @cp.to_string
|
|
127
|
-
str << @cp.include_string
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
str << "# Custom functions"
|
|
131
|
-
str << Resources::CustomResource.custom_functions_to_string
|
|
132
|
-
end.join("\n")
|
|
156
|
+
@build_manifest = "class poolparty {\n #{build_short_manifest}\n}"
|
|
133
157
|
end
|
|
134
158
|
@build_manifest
|
|
135
159
|
end
|
|
136
160
|
|
|
161
|
+
def rebuild_manifest
|
|
162
|
+
@build_manifest = nil
|
|
163
|
+
build_manifest
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def build_short_manifest
|
|
167
|
+
returning Array.new do |str|
|
|
168
|
+
|
|
169
|
+
# Refactor this into the resources method
|
|
170
|
+
# TODO
|
|
171
|
+
services.each do |service|
|
|
172
|
+
service.options.merge!(:name => service.name)
|
|
173
|
+
classpackage_with_self(service)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
options.merge!(:name => "user")
|
|
177
|
+
classpackage_with_self
|
|
178
|
+
# resources.each do |type, res|
|
|
179
|
+
# str << "# #{type.to_s.pluralize}"
|
|
180
|
+
# str << res.to_string
|
|
181
|
+
# end
|
|
182
|
+
|
|
183
|
+
global_classpackages.each do |cls|
|
|
184
|
+
str << cls.to_string
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
str << "# Custom functions"
|
|
188
|
+
str << Resources::CustomResource.custom_functions_to_string
|
|
189
|
+
end.join("\n")
|
|
190
|
+
end
|
|
191
|
+
|
|
137
192
|
def build_from_existing_file
|
|
138
|
-
|
|
139
|
-
open("/etc/puppet/manifests/classes/poolparty.pp").read
|
|
140
|
-
else
|
|
141
|
-
nil
|
|
142
|
-
end
|
|
193
|
+
::FileTest.file?("#{Base.manifest_path}/classes/poolparty.pp") ? open("#{Base.manifest_path}/classes/poolparty.pp").read : nil
|
|
143
194
|
end
|
|
144
195
|
|
|
145
196
|
# To allow the remote instances to do their job,
|
|
146
197
|
# they need a few options to run, these are the required options
|
|
147
198
|
# to be saved on the remote "master" machine
|
|
148
199
|
def minimum_runnable_options
|
|
149
|
-
[
|
|
200
|
+
[
|
|
201
|
+
:keypair, :minimum_instances, :maximum_instances, :ami, :security_group,
|
|
202
|
+
:expand_when, :contract_when, :set_master_ip_to
|
|
203
|
+
]
|
|
150
204
|
end
|
|
151
205
|
|
|
152
206
|
# Add all the poolparty requirements here
|
|
@@ -159,19 +213,21 @@ module PoolParty
|
|
|
159
213
|
heartbeat
|
|
160
214
|
haproxy
|
|
161
215
|
ruby
|
|
162
|
-
|
|
216
|
+
poolparty_base_packages
|
|
217
|
+
realize_plugins!
|
|
163
218
|
end
|
|
164
219
|
|
|
165
|
-
def
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
220
|
+
def other_clouds
|
|
221
|
+
returning Array.new do |arr|
|
|
222
|
+
clouds.each do |name, cl|
|
|
223
|
+
arr << cl if name != self.name
|
|
224
|
+
end
|
|
225
|
+
end
|
|
171
226
|
end
|
|
172
227
|
|
|
173
|
-
def
|
|
174
|
-
|
|
228
|
+
def reset!
|
|
229
|
+
reset_remoter_base!
|
|
230
|
+
@build_manifest = @describe_instances = nil
|
|
175
231
|
end
|
|
176
232
|
|
|
177
233
|
# Add to the services pool for the manifest listing
|
|
@@ -4,42 +4,26 @@ module PoolParty
|
|
|
4
4
|
def available_custom_resources
|
|
5
5
|
$available_custom_resources ||= []
|
|
6
6
|
end
|
|
7
|
-
module DefinableFact
|
|
8
|
-
def define_fact(name, string="")
|
|
9
|
-
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
7
|
|
|
13
8
|
module Resources
|
|
14
9
|
|
|
15
|
-
def
|
|
16
|
-
|
|
17
|
-
resource(:call_function) << o
|
|
18
|
-
end
|
|
10
|
+
def call_custom_function(str, opts={}, parent=self, &block)
|
|
11
|
+
add_resource(:call_function, opts.merge({:str => str, :name => str.keyerize}), parent, &block)
|
|
19
12
|
end
|
|
20
13
|
|
|
21
14
|
# Resources for function call
|
|
22
15
|
class CallFunction < Resource
|
|
23
|
-
def initialize(str="", opts={}, parent=self, &block)
|
|
24
|
-
@str = str
|
|
25
|
-
# super(opts, parent, &block)
|
|
26
|
-
end
|
|
27
16
|
def to_string(pre="")
|
|
28
17
|
returning Array.new do |arr|
|
|
29
|
-
arr << "#{pre}#{
|
|
18
|
+
arr << "#{pre}#{str}"
|
|
30
19
|
end.join("\n")
|
|
31
20
|
end
|
|
32
21
|
end
|
|
33
22
|
|
|
34
23
|
class CustomResource < Resource
|
|
35
|
-
def initialize(name=:custom_method, opts={}, parent=self, &block)
|
|
36
|
-
@name = name
|
|
37
|
-
super(opts, parent, &block)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
24
|
def self.inherited(subclass)
|
|
41
25
|
PoolParty::Resources.available_custom_resources << subclass
|
|
42
|
-
super
|
|
26
|
+
super
|
|
43
27
|
end
|
|
44
28
|
|
|
45
29
|
def to_string(pre="")
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
A logging class to allow us to log to locations
|
|
3
3
|
=end
|
|
4
4
|
class Loggable
|
|
5
|
-
def initialize
|
|
6
|
-
Logging.init :debug, :info, :warn, :error, :fatal
|
|
7
|
-
|
|
5
|
+
def initialize
|
|
8
6
|
self.class.loggers << file_logger
|
|
9
|
-
file_logger.level = :
|
|
10
|
-
|
|
11
|
-
self.class.loggers << stdout_logger
|
|
12
|
-
stdout_logger.level = :info
|
|
7
|
+
file_logger.level = :info
|
|
13
8
|
end
|
|
14
9
|
def file_logger
|
|
15
|
-
@file_logger ||= Logging.logger(
|
|
10
|
+
@file_logger ||= Logging.logger( Base.pool_logger_location, logging_opts )
|
|
16
11
|
end
|
|
17
12
|
def stdout_logger
|
|
18
13
|
@stdout_logger ||= Logging.logger(STDOUT, logging_opts.merge({:pattern => "%m\n"}))
|
|
@@ -1,39 +1,34 @@
|
|
|
1
1
|
module PoolParty
|
|
2
2
|
|
|
3
3
|
module Plugin
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
class Plugin
|
|
6
6
|
include Configurable
|
|
7
7
|
include CloudResourcer
|
|
8
8
|
include Resources
|
|
9
9
|
|
|
10
|
-
attr_accessor :parent
|
|
11
10
|
class_inheritable_accessor :name
|
|
12
11
|
|
|
13
12
|
default_options({})
|
|
14
13
|
|
|
15
|
-
def initialize(
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
def initialize(p=self, opts={}, &block)
|
|
15
|
+
store_block &block
|
|
16
|
+
run_setup(p)
|
|
17
|
+
realize! unless block
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def realize!(force=false)
|
|
21
|
+
force ? force_realize! : (@realized ? nil : force_realize!)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def force_realize!
|
|
25
|
+
run_setup(parent, false, &stored_block)
|
|
26
|
+
enable unless stored_block
|
|
18
27
|
end
|
|
19
28
|
|
|
20
29
|
# Overwrite this method
|
|
21
30
|
def enable
|
|
22
31
|
end
|
|
23
|
-
|
|
24
|
-
# def method_missing(m, *args, &block)
|
|
25
|
-
# if block_given?
|
|
26
|
-
# (args[0].class == self.class) ? args[0].instance_eval(&block) : super
|
|
27
|
-
# elsif parent && parent.respond_to?(m)
|
|
28
|
-
# parent.send m, *args, &block
|
|
29
|
-
# else
|
|
30
|
-
# get_from_options(m, *args)
|
|
31
|
-
# end
|
|
32
|
-
# end
|
|
33
|
-
#
|
|
34
|
-
# def get_from_options(m, *args)
|
|
35
|
-
# args.empty? ? options[m] : options[m] = args[0]
|
|
36
|
-
# end
|
|
37
32
|
|
|
38
33
|
end
|
|
39
34
|
|
|
@@ -14,30 +14,30 @@ module PoolParty
|
|
|
14
14
|
|
|
15
15
|
class PluginModel
|
|
16
16
|
attr_accessor :name, :klass
|
|
17
|
-
attr_reader :parent
|
|
18
17
|
include MethodMissingSugar
|
|
19
18
|
include Configurable
|
|
20
19
|
include PrettyPrinter
|
|
21
20
|
|
|
22
21
|
def initialize(name,cld,&block)
|
|
23
22
|
@name = name
|
|
24
|
-
@parent = cld
|
|
23
|
+
# @parent = cld
|
|
25
24
|
class_string_name = "#{name}"
|
|
26
25
|
|
|
27
26
|
# Create the class to evaluate the plugin on the implemented call
|
|
28
27
|
klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
|
|
29
|
-
|
|
30
|
-
klass.send :include, PoolParty::Resources
|
|
28
|
+
mod = class_string_name.module_constant(&block)
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
klass.module_eval &block if block
|
|
30
|
+
klass.send :include, mod
|
|
34
31
|
|
|
35
32
|
# Store the name of the class for pretty printing later
|
|
36
33
|
klass.name = name
|
|
37
34
|
# Add the plugin definition to the cloud as an instance method
|
|
38
|
-
Cloud::Cloud.
|
|
35
|
+
PoolParty::Cloud::Cloud.class_eval <<-EOE
|
|
39
36
|
def #{name}(parent=self, &block)
|
|
40
|
-
|
|
37
|
+
@pa = parent
|
|
38
|
+
@#{class_string_name.downcase} ||= returning #{class_string_name.class_constant}.new(parent, &block) do |pl|
|
|
39
|
+
@pa.plugin_store << pl
|
|
40
|
+
end
|
|
41
41
|
end
|
|
42
42
|
EOE
|
|
43
43
|
end
|
data/lib/poolparty/pool/pool.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module PoolParty
|
|
2
2
|
module Pool
|
|
3
3
|
|
|
4
|
-
def pool(name=:
|
|
4
|
+
def pool(name=:app, &block)
|
|
5
5
|
pools.has_key?(name) ? pools[name] : (pools[name] = Pool.new(name, &block))
|
|
6
6
|
end
|
|
7
7
|
|
|
@@ -9,18 +9,18 @@ module PoolParty
|
|
|
9
9
|
$pools ||= {}
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
def with_pool(
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
def with_pool(pl, opts={}, &block)
|
|
13
|
+
raise CloudNotFoundException.new("Pool not found") unless pl
|
|
14
|
+
pl.options.merge!(opts) if pl.options
|
|
15
|
+
pl.run_in_context &block if block
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def reset!
|
|
18
|
-
$pools = $clouds = $plugins = nil
|
|
19
|
+
$pools = $clouds = $plugins = @describe_instances = nil
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
class Pool
|
|
22
|
-
|
|
23
|
-
include PoolParty::Cloud
|
|
23
|
+
# include PoolParty::Cloud
|
|
24
24
|
include MethodMissingSugar
|
|
25
25
|
# include PluginModel
|
|
26
26
|
include Configurable
|
|
@@ -34,17 +34,34 @@ module PoolParty
|
|
|
34
34
|
})
|
|
35
35
|
|
|
36
36
|
def initialize(name,&block)
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
setup_defaults
|
|
38
|
+
|
|
39
|
+
@pool_name = name
|
|
40
|
+
@pool_name.freeze
|
|
41
|
+
# run_in_context &block if block
|
|
42
|
+
run_setup(self, &block)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def name
|
|
46
|
+
@pool_name
|
|
39
47
|
end
|
|
40
48
|
|
|
41
|
-
def
|
|
42
|
-
|
|
49
|
+
def setup_defaults
|
|
50
|
+
plugin_directory "#{::File.dirname(pool_specfile ? pool_specfile : Dir.pwd)}/plugins"
|
|
43
51
|
end
|
|
44
52
|
|
|
45
53
|
# This is where the entire process starts
|
|
46
54
|
def inflate
|
|
47
55
|
end
|
|
56
|
+
|
|
57
|
+
def pool_clouds
|
|
58
|
+
returning Array.new do |arr|
|
|
59
|
+
clouds.each do |name, cl|
|
|
60
|
+
arr << cl if cl.parent.name == self.name
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
48
65
|
end
|
|
49
66
|
|
|
50
67
|
# Helpers
|