poolparty 0.2.69 → 0.2.84
Sign up to get free protection for your applications and to get access to all the features.
- data/Capfile +1 -0
- data/History.txt +6 -0
- data/Manifest.txt +140 -143
- data/PostInstall.txt +1 -1
- data/README.txt +2 -0
- data/bin/cloud-configure +5 -2
- data/bin/cloud-handle-load +3 -3
- data/bin/cloud-maintain +3 -3
- data/bin/cloud-provision +6 -5
- data/bin/cloud-rsync +28 -0
- data/bin/cloud-setup-dev +25 -0
- data/bin/cloud-spec +40 -0
- data/bin/cloud-start +5 -3
- data/bin/server-clean-cert-for +15 -0
- data/bin/server-rerun +0 -1
- data/bin/server-start-client +1 -1
- data/bin/server-start-master +1 -1
- data/bin/server-start-node +1 -1
- data/bin/server-update-hosts +4 -3
- data/bin/server-write-new-nodes +26 -0
- data/generators/poolspec/USAGE +2 -2
- data/generators/poolspec/poolspec_generator.rb +1 -1
- data/lib/erlang/messenger/Makefile +15 -0
- data/lib/erlang/messenger/ebin/client_app.beam +0 -0
- data/lib/erlang/messenger/ebin/client_server.beam +0 -0
- data/lib/erlang/messenger/ebin/erl_crash.dump +10326 -0
- 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_client_old.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_client_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_event_handler.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/pm_spawner.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_strings.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/Makefile +28 -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.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 +46 -0
- data/lib/erlang/messenger/src/pm_master.erl +5 -0
- data/lib/erlang/messenger/src/pm_node.erl +2 -3
- data/lib/erlang/messenger/src/pm_spawner.erl +213 -0
- data/lib/poolparty/base_packages/heartbeat.rb +57 -43
- data/lib/poolparty/base_packages/poolparty.rb +18 -15
- data/lib/poolparty/capistrano.rb +18 -0
- data/lib/poolparty/core/class.rb +24 -0
- data/lib/poolparty/core/kernel.rb +7 -0
- data/lib/poolparty/core/module.rb +2 -2
- data/lib/poolparty/core/string.rb +1 -1
- data/lib/poolparty/dependency_resolutions/puppet.rb +10 -2
- data/lib/poolparty/exceptions/ProvisionerException.rb +5 -0
- data/lib/poolparty/extra/deployments.rb +31 -0
- data/lib/poolparty/helpers/binary.rb +14 -2
- data/lib/poolparty/helpers/optioner.rb +61 -22
- data/lib/poolparty/helpers/ruberl.rb +33 -0
- data/lib/poolparty/modules/cloud_dsl.rb +2 -1
- data/lib/poolparty/modules/cloud_resourcer.rb +30 -6
- data/lib/poolparty/modules/configurable.rb +2 -0
- data/lib/poolparty/modules/file_writer.rb +4 -4
- data/lib/poolparty/modules/resourcing_dsl.rb +5 -5
- data/lib/poolparty/monitors/base_monitor.rb +1 -1
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +2 -2
- data/lib/poolparty/net/messenger.rb +1 -1
- data/lib/poolparty/net/remote.rb +2 -2
- data/lib/poolparty/net/remote_bases/ec2.rb +51 -11
- data/lib/poolparty/net/remote_instance.rb +7 -3
- data/lib/poolparty/net/remoter.rb +72 -24
- data/lib/poolparty/net/remoter_base.rb +10 -0
- data/lib/poolparty/plugins/deploydirectory.rb +10 -5
- data/lib/poolparty/plugins/git.rb +51 -0
- data/lib/poolparty/{pool → poolparty}/base.rb +4 -2
- data/lib/poolparty/{pool → poolparty}/cloud.rb +32 -10
- data/lib/poolparty/{pool → poolparty}/plugin_model.rb +4 -4
- data/lib/poolparty/{pool → poolparty}/pool.rb +2 -2
- data/lib/poolparty/{pool → poolparty}/resource.rb +33 -15
- data/lib/poolparty/{pool → poolparty}/resources/class_package.rb +3 -3
- data/lib/poolparty/{pool → poolparty}/resources/directory.rb +6 -3
- data/lib/poolparty/{pool → poolparty}/resources/exec.rb +2 -5
- data/lib/poolparty/{pool → poolparty}/resources/file.rb +3 -3
- data/lib/poolparty/{pool → poolparty}/resources/package.rb +1 -1
- data/lib/poolparty/{pool → poolparty}/resources/remote_file.rb +1 -1
- data/lib/poolparty/poolparty/resources/remote_user.rb +17 -0
- data/lib/poolparty/{pool → poolparty}/resources/sshkey.rb +5 -1
- data/lib/poolparty/{pool → poolparty}/script.rb +1 -1
- data/lib/poolparty/provisioners/capistrano/capistrano.rb +127 -0
- data/lib/poolparty/provisioners/capistrano/capistrano_configurer.rb +58 -0
- data/lib/poolparty/provisioners/capistrano/recipies/base.rb +104 -0
- data/lib/poolparty/provisioners/capistrano/recipies/master.rb +121 -0
- data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +12 -0
- data/lib/poolparty/provisioners/provisioner_base.rb +204 -0
- data/lib/poolparty/spec/core/string.rb +16 -0
- data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +26 -0
- data/lib/poolparty/spec/matchers/have_cron.rb +28 -0
- data/lib/poolparty/spec/matchers/have_deploydirectory.rb +15 -0
- data/lib/poolparty/spec/matchers/have_directory.rb +31 -0
- data/lib/poolparty/spec/matchers/have_exec.rb +28 -0
- data/lib/poolparty/spec/matchers/have_file.rb +28 -0
- data/lib/poolparty/spec/matchers/have_gempackage.rb +28 -0
- data/lib/poolparty/spec/matchers/have_git.rb +28 -0
- data/lib/poolparty/spec/matchers/have_host.rb +28 -0
- data/lib/poolparty/spec/matchers/have_mount.rb +28 -0
- data/lib/poolparty/spec/matchers/have_package.rb +28 -0
- data/lib/poolparty/spec/matchers/have_remotefile.rb +28 -0
- data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +28 -0
- data/lib/poolparty/spec/matchers/have_service.rb +28 -0
- data/lib/poolparty/spec/matchers/have_sshkey.rb +28 -0
- data/lib/poolparty/spec/matchers/have_symlink.rb +28 -0
- data/lib/poolparty/spec/matchers/have_variable.rb +32 -0
- data/lib/poolparty/spec/spec/dynamic_matchers.rb +63 -0
- data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +7 -0
- data/lib/poolparty/spec/templates/have_base.rb +28 -0
- data/lib/poolparty/templates/authkeys +1 -1
- data/lib/poolparty/templates/gem +12 -10
- data/lib/poolparty/templates/ha.cf +9 -11
- data/lib/poolparty/templates/haresources +1 -1
- data/lib/poolparty/templates/logd.cf +42 -0
- data/lib/poolparty/templates/puppet.conf +18 -8
- data/lib/poolparty/templates/puppetcleaner +9 -3
- data/lib/poolparty/templates/puppetrerun +16 -3
- data/lib/poolparty/templates/puppetrunner +1 -1
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +12 -8
- data/lib/poolpartyspec.rb +34 -0
- data/poolparty.gemspec +151 -149
- data/spec/poolparty/aska/aska_spec.rb +0 -5
- data/spec/poolparty/bin/console_spec.rb +3 -0
- data/spec/poolparty/extra/deployments_spec.rb +64 -0
- data/spec/poolparty/helpers/binary_spec.rb +1 -1
- data/spec/poolparty/helpers/optioner_spec.rb +17 -4
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +19 -2
- data/spec/poolparty/modules/configurable_spec.rb +2 -2
- data/spec/poolparty/net/remote_bases/ec2_spec.rb +5 -2
- data/spec/poolparty/net/remote_instance_spec.rb +5 -0
- data/spec/poolparty/net/remote_spec.rb +24 -31
- data/spec/poolparty/net/remoter_base_spec.rb +11 -6
- data/spec/poolparty/net/remoter_spec.rb +55 -27
- data/spec/poolparty/plugins/deploydirectory_spec.rb +1 -0
- data/spec/poolparty/plugins/git_spec.rb +45 -0
- data/spec/poolparty/{pool → poolparty}/cloud_spec.rb +41 -0
- data/spec/poolparty/{pool → poolparty}/plugin_spec.rb +1 -1
- data/spec/poolparty/{pool → poolparty}/pool_spec.rb +1 -1
- data/spec/poolparty/{pool → poolparty}/resource_spec.rb +15 -2
- data/spec/poolparty/poolparty/resources/user_spec.rb +38 -0
- data/spec/poolparty/poolparty/test_plugins/virtual_host_template.erb +0 -0
- data/spec/poolparty/poolparty_spec.rb +1 -1
- data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +27 -0
- data/spec/poolparty/provisioners/provisioner_base_spec.rb +120 -0
- data/spec/poolparty/spec/core/string_spec.rb +57 -0
- data/spec/poolparty/spec_helper.rb +48 -6
- data/tasks/deployment.rake +3 -5
- data/tasks/spec.rake +2 -3
- data/website/index.html +2 -2
- metadata +150 -148
- data/lib/erlang/messenger/lib/eunit/.svn/all-wcprops +0 -53
- data/lib/erlang/messenger/lib/eunit/.svn/entries +0 -140
- data/lib/erlang/messenger/lib/eunit/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/.svn/prop-base/NOTES.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/AUTHORS.svn-base +0 -2
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/CHANGELOG.svn-base +0 -14
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/COPYING.svn-base +0 -504
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/NOTES.svn-base +0 -276
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/README.svn-base +0 -3
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/sys.config.svn-base +0 -9
- data/lib/erlang/messenger/lib/eunit/.svn/text-base/vsn.mk.svn-base +0 -1
- data/lib/erlang/messenger/lib/eunit/doc/.svn/all-wcprops +0 -59
- data/lib/erlang/messenger/lib/eunit/doc/.svn/entries +0 -142
- data/lib/erlang/messenger/lib/eunit/doc/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/erlang.png.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/eunit.html.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/index.html.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/modules-frame.html.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/overview-summary.html.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/packages-frame.html.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/edoc-info.svn-base +0 -3
- 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 +0 -172
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/index.html.svn-base +0 -17
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/modules-frame.html.svn-base +0 -12
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview-summary.html.svn-base +0 -984
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview.edoc.svn-base +0 -980
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/packages-frame.html.svn-base +0 -11
- data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/stylesheet.css.svn-base +0 -55
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/all-wcprops +0 -5
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/dir-prop-base +0 -8
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/entries +0 -28
- data/lib/erlang/messenger/lib/eunit/ebin/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/examples/.svn/all-wcprops +0 -23
- data/lib/erlang/messenger/lib/eunit/examples/.svn/entries +0 -66
- data/lib/erlang/messenger/lib/eunit/examples/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/eunit_examples.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/fib.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/eunit_examples.erl.svn-base +0 -339
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/fib.erl.svn-base +0 -19
- data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/tests.txt.svn-base +0 -1
- data/lib/erlang/messenger/lib/eunit/include/.svn/all-wcprops +0 -11
- data/lib/erlang/messenger/lib/eunit/include/.svn/entries +0 -41
- data/lib/erlang/messenger/lib/eunit/include/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/include/.svn/prop-base/eunit.hrl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/include/.svn/text-base/eunit.hrl.svn-base +0 -313
- data/lib/erlang/messenger/lib/eunit/src/.svn/all-wcprops +0 -113
- data/lib/erlang/messenger/lib/eunit/src/.svn/entries +0 -259
- data/lib/erlang/messenger/lib/eunit/src/.svn/format +0 -1
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/autoload.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/code_monitor.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_autoexport.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_data.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_internal.hrl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_lib.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_proc.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_serial.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_server.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_striptests.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_test.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tests.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tty.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/file_monitor.erl.svn-base +0 -5
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/autoload.erl.svn-base +0 -388
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/code_monitor.erl.svn-base +0 -243
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.app.src.svn-base +0 -21
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.appup.src.svn-base +0 -1
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.erl.svn-base +0 -196
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_autoexport.erl.svn-base +0 -102
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_data.erl.svn-base +0 -798
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_internal.hrl.svn-base +0 -48
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_lib.erl.svn-base +0 -682
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_proc.erl.svn-base +0 -552
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_serial.erl.svn-base +0 -157
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_server.erl.svn-base +0 -340
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_striptests.erl.svn-base +0 -64
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_test.erl.svn-base +0 -334
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tests.erl.svn-base +0 -45
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tty.erl.svn-base +0 -272
- data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/file_monitor.erl.svn-base +0 -409
- data/lib/erlang/messenger/src/pm_client_old.erl +0 -52
- data/lib/poolparty/helpers/provisioner_base.rb +0 -346
- data/lib/poolparty/helpers/provisioners/master.rb +0 -205
- data/lib/poolparty/helpers/provisioners/slave.rb +0 -64
- data/spec/poolparty/helpers/provisioner_base_spec.rb +0 -134
- data/spec/poolparty/helpers/provisioners/master_spec.rb +0 -54
- data/spec/poolparty/helpers/provisioners/slave_spec.rb +0 -28
- /data/lib/poolparty/{pool → poolparty}/custom_resource.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/loggable.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/plugin.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/conditional.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/cron.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/custom_service.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/gem_package.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/host.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/mount.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/service.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/symlink.rb +0 -0
- /data/lib/poolparty/{pool → poolparty}/resources/variable.rb +0 -0
- /data/log/{pool.logs → pool.log} +0 -0
- /data/spec/poolparty/{pool/test_plugins/virtual_host_template.erb → net/log/pool.log} +0 -0
- /data/spec/poolparty/{pool → poolparty}/base_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_basic.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_plugins.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/configurers/ruby_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/custom_resource_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/example_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/plugin_model_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/class_package_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/conditional_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/cron_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/directory_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/exec_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/file_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/gem_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/host_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/package_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/remote_file_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/service_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/sshkey_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/symlink_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/resources/variable_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/script_spec.rb +0 -0
- /data/spec/poolparty/{pool → poolparty}/test_plugins/sshkey_test +0 -0
- /data/spec/poolparty/{pool → poolparty}/test_plugins/webserver.rb +0 -0
@@ -2,14 +2,17 @@
|
|
2
2
|
This module is included by the remote module and defines the remoting methods
|
3
3
|
that the clouds can use to rsync or run remote commands
|
4
4
|
=end
|
5
|
-
require File.dirname(__FILE__) + "/../helpers/provisioner_base"
|
6
|
-
|
7
5
|
module PoolParty
|
8
6
|
module Remote
|
9
7
|
module Remoter
|
10
|
-
def rsync_storage_files_to_command(remote_instance)
|
8
|
+
def rsync_storage_files_to_command(remote_instance)
|
9
|
+
#TODO: rsync_to_command("#{Base.storage_directory}/", Base.remote_storage_path, remote_storage_path) if remote_instance
|
11
10
|
"#{rsync_command} #{Base.storage_directory}/ #{remote_instance.ip}:#{Base.remote_storage_path}" if remote_instance
|
12
11
|
end
|
12
|
+
# rsync a file to a node. By default to the master node.
|
13
|
+
def rsync_to_command(source, target=source, remote_instance=master)
|
14
|
+
"#{rsync_command} #{source} #{remote_instance.ip}:#{target}"
|
15
|
+
end
|
13
16
|
def run_command_on_command(cmd="ls -l", remote_instance=nil)
|
14
17
|
vputs "Running #{cmd} on #{remote_instance.name == %x[hostname].chomp ? "self (master)" : "#{remote_instance.name}"}"
|
15
18
|
remote_instance.name == %x[hostname].chomp ? %x[#{cmd}] : "#{ssh_command(remote_instance)} '#{cmd}'"
|
@@ -25,11 +28,12 @@ module PoolParty
|
|
25
28
|
# Includes StrictHostKeyChecking to no
|
26
29
|
# Ssh with the user in Base
|
27
30
|
# And including the keypair_path
|
31
|
+
# "-l '#{Base.user}'",
|
28
32
|
def ssh_array
|
29
|
-
["-o StrictHostKeyChecking=no", "-l
|
33
|
+
["-o StrictHostKeyChecking=no", "-l #{Base.user}", '-i "'+full_keypair_path+'"']
|
30
34
|
end
|
31
35
|
def rsync_command
|
32
|
-
"rsync -azP --exclude cache -e '#{ssh_string}'"
|
36
|
+
"rsync -azP --exclude cache -e '#{ssh_string} -l #{Base.user}'"
|
33
37
|
end
|
34
38
|
def remote_ssh_array
|
35
39
|
["-o StrictHostKeyChecking=no", "-l '#{Base.user}'", '-i "'+remote_keypair_path+'"']
|
@@ -40,6 +44,13 @@ module PoolParty
|
|
40
44
|
def remote_rsync_command
|
41
45
|
"rsync -azP --exclude cache -e '#{remote_ssh_string}'"
|
42
46
|
end
|
47
|
+
|
48
|
+
|
49
|
+
# def scp_command(source, dest=target, remote_instance=master)
|
50
|
+
# #TODO: check if source is Directory and add -r if it is
|
51
|
+
# "scp #{source} #{remote_instance.ip}:#{dest} #{ssh_array.join(' ')}"
|
52
|
+
# end
|
53
|
+
|
43
54
|
# Get the names of the nodes. Mainly used for puppet templating
|
44
55
|
def list_of_node_names(options={})
|
45
56
|
list_of_running_instances.collect {|ri| ri.name }
|
@@ -71,10 +82,22 @@ module PoolParty
|
|
71
82
|
def minimum_number_of_instances_are_running?
|
72
83
|
list_of_running_instances.size >= minimum_instances.to_i
|
73
84
|
end
|
85
|
+
# Are the minimum number of instances NOT running?
|
86
|
+
def minimum_number_of_instances_are_not_running?
|
87
|
+
!(minimum_number_of_instances_are_running?)
|
88
|
+
end
|
74
89
|
# Can we shutdown an instance?
|
75
90
|
def can_shutdown_an_instance?
|
76
91
|
list_of_running_instances.size > minimum_instances.to_i
|
77
92
|
end
|
93
|
+
# Are too few instances running?
|
94
|
+
def are_too_few_instances_running?
|
95
|
+
list_of_running_instances.size < minimum_instances.to_i
|
96
|
+
end
|
97
|
+
# Are there more instances than allowed?
|
98
|
+
def are_too_many_instances_running?
|
99
|
+
list_of_running_instances.size > maximum_instances.to_i
|
100
|
+
end
|
78
101
|
# Request to launch a number of instances
|
79
102
|
def request_launch_new_instances(num=1)
|
80
103
|
out = []
|
@@ -82,11 +105,15 @@ module PoolParty
|
|
82
105
|
out
|
83
106
|
end
|
84
107
|
def request_launch_master_instance
|
85
|
-
inst = launch_new_instance!
|
108
|
+
@inst = launch_new_instance!
|
86
109
|
wait "5.seconds"
|
87
|
-
when_no_pending_instances
|
110
|
+
when_no_pending_instances do
|
111
|
+
vputs "Master has launched"
|
112
|
+
reset!
|
113
|
+
after_launch_master(@inst)
|
114
|
+
end
|
88
115
|
end
|
89
|
-
def after_launch_master(
|
116
|
+
def after_launch_master(inst=nil)
|
90
117
|
vputs "After launch master in remoter"
|
91
118
|
end
|
92
119
|
# Let's terminate an instance that is not the master instance
|
@@ -161,13 +188,14 @@ module PoolParty
|
|
161
188
|
last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
|
162
189
|
last_instances.each do |inst|
|
163
190
|
vputs "Provision slave: #{inst}"
|
164
|
-
hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
|
165
|
-
PoolParty::Provisioner.provision_slave(inst, self, false) unless inst.master? rescue vputs "Error"
|
166
|
-
hide_output {
|
191
|
+
# hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
|
192
|
+
# PoolParty::Provisioner.provision_slave(inst, self, false) unless inst.master? rescue vputs "Error"
|
193
|
+
verbose ? provisioner_for(inst).install(testing) : hide_output { provisioner_for(inst).install(testing) }
|
194
|
+
# hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
|
167
195
|
# cmd = ". /etc/profile && cloud-provision -i #{inst.name.gsub(/node/, '')} &"
|
168
196
|
# vputs "Provision slave with command #{cmd}"
|
169
197
|
end
|
170
|
-
PoolParty::Provisioner.reconfigure_master(self)
|
198
|
+
# PoolParty::Provisioner.reconfigure_master(self)
|
171
199
|
end
|
172
200
|
end
|
173
201
|
# Launch the master and let the master handle the starting of the cloud
|
@@ -177,7 +205,7 @@ module PoolParty
|
|
177
205
|
# Then wait for the master to launch
|
178
206
|
def launch_and_configure_master!(testing=false)
|
179
207
|
vputs "Requesting to launch new instance"
|
180
|
-
|
208
|
+
log.debug "Launching master"
|
181
209
|
request_launch_master_instance if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running? && !testing
|
182
210
|
reset!
|
183
211
|
unless testing
|
@@ -188,23 +216,36 @@ module PoolParty
|
|
188
216
|
vputs ""
|
189
217
|
vputs "Provisioning master..."
|
190
218
|
# cleanup_storage_directory
|
191
|
-
|
192
|
-
verbose ?
|
219
|
+
@provisioner = PoolParty::Provisioner::Capistrano.new(master, self, :ubuntu)
|
220
|
+
verbose ? @provisioner.install(testing) : hide_output { @provisioner.install(testing) }
|
193
221
|
|
194
222
|
after_launched
|
195
223
|
end
|
196
224
|
end
|
197
225
|
end
|
226
|
+
def list_of_nodes_exceeding_minimum_runtime
|
227
|
+
list_of_running_instances.reject{|i| i.elapsed_runtime < minimum_runtime}
|
228
|
+
end
|
229
|
+
def are_any_nodes_exceeding_minimum_runtime?
|
230
|
+
!list_of_nodes_exceeding_minimum_runtime.blank?
|
231
|
+
end
|
198
232
|
def is_master_running?
|
199
233
|
!list_of_running_instances.select {|a| a.name == "master"}.first.nil?
|
200
234
|
end
|
201
235
|
# Stub method for the time being to handle expansion of the cloud
|
202
236
|
def should_expand_cloud?(force=false)
|
203
|
-
|
237
|
+
(are_too_few_instances_running? || are_expansion_rules_valid? ) || force || false
|
238
|
+
end
|
239
|
+
def are_expansion_rules_valid?
|
240
|
+
valid_rules?(:expand_when)
|
204
241
|
end
|
205
242
|
# Stub method for the time being to handle the contraction of the cloud
|
206
243
|
def should_contract_cloud?(force=false)
|
207
|
-
|
244
|
+
return true if force
|
245
|
+
((are_any_nodes_exceeding_minimum_runtime? and are_too_many_instances_running?) || are_contraction_rules_valid?) || false
|
246
|
+
end
|
247
|
+
def are_contraction_rules_valid?
|
248
|
+
valid_rules?(:contract_when)
|
208
249
|
end
|
209
250
|
# Expand the cloud
|
210
251
|
# If we can start a new instance and the load requires us to expand
|
@@ -229,12 +270,10 @@ module PoolParty
|
|
229
270
|
# If we can shutdown an instnace and the load allows us to contract
|
230
271
|
# the cloud, then we should request_termination_of_non_master_instance
|
231
272
|
def contract_cloud_if_necessary(force=false)
|
232
|
-
if can_shutdown_an_instance?
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
request_termination_of_non_master_instance
|
237
|
-
end
|
273
|
+
if can_shutdown_an_instance? && should_contract_cloud?(force)
|
274
|
+
vputs "Shrinking the cloud by 1"
|
275
|
+
before_shutdown
|
276
|
+
request_termination_of_non_master_instance
|
238
277
|
end
|
239
278
|
end
|
240
279
|
|
@@ -250,6 +289,13 @@ module PoolParty
|
|
250
289
|
def before_shutdown
|
251
290
|
end
|
252
291
|
|
292
|
+
# Rsync a file or directory to a node. Rsync to master by default
|
293
|
+
def rsync_to(source, target=source, num=0)
|
294
|
+
str = "#{rsync_to_command(source, target, get_instance_by_number( num ))}"
|
295
|
+
vputs "Running: #{str}"
|
296
|
+
verbose ? Kernel.system(str) : hide_output {Kernel.system str}
|
297
|
+
end
|
298
|
+
|
253
299
|
# Rsync command to the instance
|
254
300
|
def rsync_storage_files_to(instance=nil)
|
255
301
|
hide_output {Kernel.system "#{rsync_storage_files_to_command(instance)}" if instance}
|
@@ -262,7 +308,9 @@ module PoolParty
|
|
262
308
|
|
263
309
|
# Ssh into the instance given
|
264
310
|
def ssh_into(instance=nil)
|
265
|
-
|
311
|
+
cmd = "#{ssh_command(instance)}"
|
312
|
+
vputs "Running #{cmd}"
|
313
|
+
Kernel.system cmd if instance
|
266
314
|
end
|
267
315
|
# Find the instance by the number given
|
268
316
|
# and then ssh into the instance
|
@@ -88,6 +88,9 @@ module PoolParty
|
|
88
88
|
name = (i.zero? ? "master" : "node#{i}")
|
89
89
|
list.select {|i| i.name == name }.first
|
90
90
|
end
|
91
|
+
# A callback before the configuration task takes place
|
92
|
+
def before_configuration_tasks
|
93
|
+
end
|
91
94
|
def remote_instances_list
|
92
95
|
@containing_cloud = self
|
93
96
|
# puts "> #{@containing_cloud} #{@describe_instances.nil?}"
|
@@ -137,6 +140,13 @@ module PoolParty
|
|
137
140
|
# Callback after loaded
|
138
141
|
def loaded_remoter_base
|
139
142
|
end
|
143
|
+
|
144
|
+
# Custom minimum runnable options
|
145
|
+
# Extend the minimum runnable options that are necessary
|
146
|
+
# for poolparty to run on the remote base
|
147
|
+
def custom_minimum_runnable_options
|
148
|
+
[]
|
149
|
+
end
|
140
150
|
|
141
151
|
# Custom installation tasks
|
142
152
|
# Allow the remoter bases to attach their own tasks on the
|
@@ -18,17 +18,18 @@ module PoolParty
|
|
18
18
|
|
19
19
|
def package_directory
|
20
20
|
path = ::File.join( Base.tmp_path, "#{::File.basename(from_dir)}.tar.gz" )
|
21
|
-
archive_name = "#{name.dir_safe}.tar.gz"
|
21
|
+
archive_name = "#{::File.basename(name).dir_safe}.tar.gz"
|
22
22
|
cmd = "cd #{::File.expand_path(from_dir)} && tar -czf #{archive_name} . && mv #{archive_name} #{Base.tmp_path}"
|
23
|
-
|
23
|
+
Kernel.system(cmd) unless testing
|
24
24
|
end
|
25
25
|
|
26
26
|
def unpack_directory
|
27
27
|
execute_on_master do
|
28
28
|
has_exec({:name => "deploy-directory-#{name}", :requires => get_directory("#{cwd}"), :cwd => cwd}) do
|
29
29
|
# && rm #{Base.tmp_path}/#{parent.name.dir_safe}.tar.gz
|
30
|
-
|
31
|
-
|
30
|
+
archive_name = "#{::File.basename(name).dir_safe}.tar.gz"
|
31
|
+
command "cd #{cwd}; tar -zxf #{Base.remote_storage_path}/#{archive_name}; rm #{Base.remote_storage_path}/#{archive_name}; chown #{owner} #{::File.basename(name).dir_safe}"
|
32
|
+
onlyif "test -f #{Base.remote_storage_path}/#{archive_name}"
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
@@ -45,7 +46,11 @@ module PoolParty
|
|
45
46
|
|
46
47
|
def to(dir)
|
47
48
|
cwd dir
|
48
|
-
|
49
|
+
name dir
|
50
|
+
has_directory(:name => "#{dir}",
|
51
|
+
:requires => get_directory("#{::File.dirname(dir)}"),
|
52
|
+
:owner => owner,
|
53
|
+
:mode => mode)
|
49
54
|
end
|
50
55
|
|
51
56
|
# Since git is not a native type, we have to say which core resource
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module PoolParty
|
2
|
+
class GitResource
|
3
|
+
|
4
|
+
virtual_resource(:git) do
|
5
|
+
|
6
|
+
def loaded(opts={}, parent=self)
|
7
|
+
has_git_repos
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_git_repos
|
11
|
+
has_package(:name => "git-core")
|
12
|
+
has_exec({:name => key, :requires => [get_directory("#{working_dir}"), get_package("git-core")] }) do
|
13
|
+
command requires_user ? "git clone #{requires_user}@#{source} #{working_dir}" : "cd #{working_dir} && git clone #{source}"
|
14
|
+
cwd "#{working_dir if working_dir}"
|
15
|
+
creates creates_dir
|
16
|
+
end
|
17
|
+
has_exec(:name => "update-#{name}") do
|
18
|
+
cwd ::File.dirname( creates_dir )
|
19
|
+
command "git pull"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def at(dir)
|
24
|
+
working_dir dir
|
25
|
+
has_directory(:name => "#{dir}", :requires => get_directory("#{::File.dirname(dir)}"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def to(dir)
|
29
|
+
at(dir)
|
30
|
+
end
|
31
|
+
|
32
|
+
def creates_dir
|
33
|
+
"#{::File.join( working_dir, ::File.basename(source, ::File.extname(source)) )}/.git"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Since git is not a native type, we have to say which core resource
|
37
|
+
# it is using to be able to require it
|
38
|
+
def class_type_name
|
39
|
+
"exec"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Because we are requiring an exec, instead of a built-in package of the git, we have to overload
|
43
|
+
# the to_s method and prepend it with the same name as above
|
44
|
+
def key
|
45
|
+
"git-#{name}"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -20,15 +20,17 @@ module PoolParty
|
|
20
20
|
:template_directory => "templates",
|
21
21
|
:template_path => "/var/lib/puppet/templates",
|
22
22
|
:module_path => "/etc/puppet/modules/poolparty",
|
23
|
-
:default_specfile_name => "pool
|
24
|
-
:default_project_specfile_name => "spec/pool
|
23
|
+
:default_specfile_name => "clouds.pool",
|
24
|
+
:default_project_specfile_name => "spec/clouds.pool",
|
25
25
|
:port => "80",
|
26
26
|
:forwarding_port => "8080",
|
27
27
|
:proxy_mode => "http",
|
28
28
|
:messenger_client_port => 7050,
|
29
|
+
:minimum_runtime => 3000, #50.minutes in seconds
|
29
30
|
# EC2 Options
|
30
31
|
:ami => "ami-1cd73375",
|
31
32
|
:size => 'm1.small', # must be 'm1.small', 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
|
33
|
+
:availabilty_zone => "us-east-1a",
|
32
34
|
:security_group => ["default"],
|
33
35
|
# Options that should not be touched pretty much ever
|
34
36
|
:manifest_path => "/etc/puppet/manifests"
|
@@ -24,6 +24,7 @@ module PoolParty
|
|
24
24
|
include PrettyPrinter
|
25
25
|
include Configurable
|
26
26
|
include CloudResourcer
|
27
|
+
include Provisioner
|
27
28
|
# extend CloudResourcer
|
28
29
|
# Net methods
|
29
30
|
include Remote
|
@@ -38,6 +39,8 @@ module PoolParty
|
|
38
39
|
:secret_access_key => Base.secret_access_key,
|
39
40
|
:ec2_dir => ENV["EC2_HOME"],
|
40
41
|
:keypair => (ENV["KEYPAIR_NAME"].nil? || ENV["KEYPAIR_NAME"].empty?) ? nil : ENV["KEYPAIR_NAME"],
|
42
|
+
:minimum_runtime => Base.minimum_runtime,
|
43
|
+
:user => Base.user,
|
41
44
|
:ami => 'ami-44bd592d'
|
42
45
|
})
|
43
46
|
|
@@ -45,15 +48,18 @@ module PoolParty
|
|
45
48
|
@cloud_name = name
|
46
49
|
@cloud_name.freeze
|
47
50
|
|
48
|
-
plugin_directory
|
51
|
+
plugin_directory
|
49
52
|
|
50
53
|
p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
|
51
|
-
|
54
|
+
store_block(&block)
|
55
|
+
run_setup(p, &block)
|
52
56
|
|
53
57
|
# set_parent(parent) if parent && !@parent
|
54
58
|
# self.run_in_context parent, &block if block
|
55
59
|
setup_defaults
|
56
|
-
|
60
|
+
# realize_plugins!
|
61
|
+
# reset! # reset the clouds
|
62
|
+
# reset_remoter_base!
|
57
63
|
end
|
58
64
|
|
59
65
|
def setup_defaults
|
@@ -76,7 +82,7 @@ module PoolParty
|
|
76
82
|
def generate_keypair(*args)
|
77
83
|
options[:keypair] = "#{parent && parent.is_a?(PoolParty::Pool::Pool) ? parent.name : "poolparty"}_#{name}" unless has_keypair?
|
78
84
|
end
|
79
|
-
|
85
|
+
|
80
86
|
# Prepare to send the new configuration to the instances
|
81
87
|
# First, let's make sure that our base directory is made
|
82
88
|
# Then copy the templates that have no other reference in
|
@@ -94,6 +100,8 @@ module PoolParty
|
|
94
100
|
Script.save!(self)
|
95
101
|
# not my favorite...
|
96
102
|
copy_ssh_key
|
103
|
+
write_unique_cookie
|
104
|
+
before_configuration_tasks
|
97
105
|
end
|
98
106
|
|
99
107
|
# Copy the ssh keys to the storage directory in preparation for
|
@@ -108,6 +116,20 @@ module PoolParty
|
|
108
116
|
Base.store_keys_in_file_for(self)
|
109
117
|
end
|
110
118
|
|
119
|
+
# Let's write the cookie into the tmp path
|
120
|
+
def write_unique_cookie
|
121
|
+
write_to_file_in_storage_directory("cookie") do
|
122
|
+
generate_unique_cookie_string
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Generate a unique cookie string so that our erlang modules can
|
127
|
+
# talk to each other safely. This is based off the keypair
|
128
|
+
# and the name of the cloud
|
129
|
+
def generate_unique_cookie_string
|
130
|
+
Digest::SHA256.hexdigest("#{full_keypair_name}#{name}")
|
131
|
+
end
|
132
|
+
|
111
133
|
# Build the new poolparty manifest
|
112
134
|
# Wrapping all of these requirements into the one
|
113
135
|
# poolparty class.
|
@@ -125,7 +147,7 @@ module PoolParty
|
|
125
147
|
end
|
126
148
|
|
127
149
|
def copy_misc_templates
|
128
|
-
["namespaceauth.conf"].each do |f|
|
150
|
+
["namespaceauth.conf", "puppet.conf", "gem"].each do |f|
|
129
151
|
copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), "..", "templates", f))
|
130
152
|
end
|
131
153
|
end
|
@@ -197,10 +219,10 @@ module PoolParty
|
|
197
219
|
# they need a few options to run, these are the required options
|
198
220
|
# to be saved on the remote "master" machine
|
199
221
|
def minimum_runnable_options
|
200
|
-
[
|
201
|
-
:keypair, :minimum_instances, :maximum_instances,
|
222
|
+
([
|
223
|
+
:keypair, :minimum_instances, :maximum_instances,
|
202
224
|
:expand_when, :contract_when, :set_master_ip_to
|
203
|
-
]
|
225
|
+
]<< custom_minimum_runnable_options).flatten
|
204
226
|
end
|
205
227
|
|
206
228
|
# Add all the poolparty requirements here
|
@@ -209,12 +231,12 @@ module PoolParty
|
|
209
231
|
# Also note that there is no block associated. This is because we have written
|
210
232
|
# all that is necessary in a method called enable
|
211
233
|
# which is called when there is no block
|
212
|
-
def add_poolparty_base_requirements
|
234
|
+
def add_poolparty_base_requirements
|
213
235
|
heartbeat
|
214
236
|
haproxy
|
215
237
|
ruby
|
216
238
|
poolparty_base_packages
|
217
|
-
realize_plugins!
|
239
|
+
realize_plugins!(true) # Force realizing of the plugins
|
218
240
|
end
|
219
241
|
|
220
242
|
def other_clouds
|
@@ -4,7 +4,7 @@ module PoolParty
|
|
4
4
|
module PluginModel
|
5
5
|
|
6
6
|
def plugin(name=:plugin, cloud=nil, &block)
|
7
|
-
plugins.has_key?(name) ? plugins[name] : (plugins[name] = PluginModel.new(name,
|
7
|
+
plugins.has_key?(name) ? plugins[name] : (plugins[name] = PluginModel.new(name, &block))
|
8
8
|
end
|
9
9
|
alias_method :register_plugin, :plugin
|
10
10
|
|
@@ -18,15 +18,15 @@ module PoolParty
|
|
18
18
|
include Configurable
|
19
19
|
include PrettyPrinter
|
20
20
|
|
21
|
-
def initialize(name
|
21
|
+
def initialize(name,&block)
|
22
22
|
@name = name
|
23
23
|
# @parent = cld
|
24
24
|
class_string_name = "#{name}"
|
25
25
|
|
26
26
|
# Create the class to evaluate the plugin on the implemented call
|
27
|
-
klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
|
27
|
+
@klass = klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
|
28
28
|
mod = class_string_name.module_constant(&block)
|
29
|
-
|
29
|
+
|
30
30
|
klass.send :include, mod
|
31
31
|
|
32
32
|
# Store the name of the class for pretty printing later
|
@@ -35,11 +35,10 @@ module PoolParty
|
|
35
35
|
|
36
36
|
def initialize(name,&block)
|
37
37
|
setup_defaults
|
38
|
-
|
39
38
|
@pool_name = name
|
40
39
|
@pool_name.freeze
|
41
40
|
# run_in_context &block if block
|
42
|
-
run_setup(self, &block)
|
41
|
+
run_setup(self, &block)
|
43
42
|
end
|
44
43
|
|
45
44
|
def name
|
@@ -48,6 +47,7 @@ module PoolParty
|
|
48
47
|
|
49
48
|
def setup_defaults
|
50
49
|
plugin_directory "#{::File.dirname(pool_specfile ? pool_specfile : Dir.pwd)}/plugins"
|
50
|
+
PoolParty::Extra::Deployments.include_deployments "#{Dir.pwd}/deployments"
|
51
51
|
end
|
52
52
|
|
53
53
|
# This is where the entire process starts
|
@@ -18,8 +18,9 @@ module PoolParty
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def add_resource(type, opts={}, parent=self, &block)
|
21
|
-
if in_a_resource_store?(type, opts[:name])
|
22
|
-
@res =
|
21
|
+
if opts[:name] && in_a_resource_store?(type, opts[:name])
|
22
|
+
@res = get_from_local_resource_store(type, opts[:name], parent)
|
23
|
+
@res ||= get_from_global_resource_store(type, opts[:name])
|
23
24
|
# if should_duplicate_resource?(type, @res, parent, opts)
|
24
25
|
# unless @res.parent == parent
|
25
26
|
# @pa = parent
|
@@ -85,13 +86,16 @@ module PoolParty
|
|
85
86
|
|
86
87
|
include CloudResourcer
|
87
88
|
include Configurable
|
89
|
+
# For the time being, we'll make puppet the only available dependency resolution
|
90
|
+
# base, but in the future, we can rip this out and make it an option
|
91
|
+
include PoolParty::DependencyResolutions::Puppet
|
88
92
|
|
89
93
|
extend PoolParty::Resources
|
90
94
|
include PoolParty::Resources
|
91
95
|
|
92
96
|
def self.inherited(subclass)
|
93
97
|
subclass = subclass.to_s.split("::")[-1] if subclass.to_s.index("::")
|
94
|
-
lowercase_class_name = subclass.to_s.underscore
|
98
|
+
lowercase_class_name = subclass.to_s.underscore.downcase || subclass.downcase
|
95
99
|
|
96
100
|
# Add add resource method to the Resources module
|
97
101
|
unless PoolParty::Resources.respond_to?(lowercase_class_name.to_sym)
|
@@ -99,8 +103,14 @@ module PoolParty
|
|
99
103
|
def #{lowercase_class_name}(opts={}, parent=self, &blk)
|
100
104
|
add_resource(:#{lowercase_class_name}, opts, parent, &blk)
|
101
105
|
end
|
102
|
-
def get_#{lowercase_class_name}(
|
103
|
-
|
106
|
+
def get_#{lowercase_class_name}(n, opts={}, parent=self, &block)
|
107
|
+
res = in_a_resource_store?(:#{lowercase_class_name}, n) ?
|
108
|
+
get_resource(:#{lowercase_class_name}, n) :
|
109
|
+
nil
|
110
|
+
# PoolParty::Resources::Resource.resource_string_name(#{lowercase_class_name}, n)
|
111
|
+
# add_resource(:#{lowercase_class_name}, opts, parent, &blk)
|
112
|
+
# res ||= PoolParty::Resources::Resource.resource_string_name(#{lowercase_class_name}, n)
|
113
|
+
res
|
104
114
|
end
|
105
115
|
EOE
|
106
116
|
PoolParty::Resources.module_eval method
|
@@ -185,7 +195,7 @@ module PoolParty
|
|
185
195
|
end
|
186
196
|
# This way we can subclass resources without worry
|
187
197
|
def class_type_name
|
188
|
-
self.class.to_s.top_level_class.underscore
|
198
|
+
self.class.to_s.top_level_class.underscore.downcase
|
189
199
|
end
|
190
200
|
def self.custom_function(str)
|
191
201
|
custom_functions << str
|
@@ -215,7 +225,7 @@ module PoolParty
|
|
215
225
|
:subscribe, :owner, :group, :path, :mode, :source, :notify, :subscribe, :check, :creates, :cwd, :command, :ensure,
|
216
226
|
:require, :schedule, :range, :alias, :hour, :minute, :user, :month, :monthday, :name, :onlyif, :unless, :refreshonly,
|
217
227
|
:refresh, :content, :template, :ip, :repeat, :provider, :key, :device, :fstype, :remounts, :options, :atboot, :before,
|
218
|
-
:binary, :status, :start, :stop, :restart, :pattern, :recurse
|
228
|
+
:binary, :status, :start, :stop, :restart, :pattern, :recurse, :home
|
219
229
|
]
|
220
230
|
end
|
221
231
|
def key
|
@@ -239,21 +249,20 @@ module PoolParty
|
|
239
249
|
def get_modified_options
|
240
250
|
unless @modified_options
|
241
251
|
if options
|
242
|
-
opts = options.inject({}) do |sum,h|
|
252
|
+
opts = options.inject({}) do |sum,h|
|
243
253
|
sum.merge!({h[0].to_sym => ((h[1].nil?) ? self.send(h[0].to_sym) : h[1]) })
|
244
254
|
end
|
245
255
|
else
|
246
256
|
opts = {}
|
247
257
|
end
|
248
258
|
@full_allowed_options ||= allowed_options.reject {|ele| disallowed_options.include?(ele) }
|
249
|
-
@modified_options = opts.reject
|
259
|
+
@modified_options = opts.reject do |k,v|
|
260
|
+
!@full_allowed_options.include?(k) ||
|
261
|
+
@parent && @parent.respond_to?(:options) && @parent != self && @parent.options.has_key?(k) && @parent.options[k] == options[k]
|
262
|
+
end
|
250
263
|
end
|
251
264
|
@modified_options
|
252
265
|
end
|
253
|
-
|
254
|
-
# For the time being, we'll make puppet the only available dependency resolution
|
255
|
-
# base, but in the future, we can rip this out and make it an option
|
256
|
-
include PoolParty::DependencyResolutions::Puppet
|
257
266
|
end
|
258
267
|
|
259
268
|
# Adds two methods to the module
|
@@ -269,13 +278,22 @@ module PoolParty
|
|
269
278
|
def self.add_has_and_does_not_have_methods_for(type=:file)
|
270
279
|
module_eval <<-EOE
|
271
280
|
def has_#{type}(opts={}, parent=self, &block)
|
272
|
-
#{type}(
|
281
|
+
#{type}(handle_option_values(opts).merge(:ensures => "present"), parent, &block)
|
273
282
|
end
|
274
283
|
def does_not_have_#{type}(opts={}, parent=self, &block)
|
275
|
-
#{type}(
|
284
|
+
#{type}(handle_option_values(opts).merge(:ensures => "absent"), parent, &block)
|
276
285
|
end
|
277
286
|
EOE
|
278
287
|
end
|
279
288
|
|
289
|
+
def handle_option_values(o)
|
290
|
+
case o.class.to_s
|
291
|
+
when "String"
|
292
|
+
{:name => o}
|
293
|
+
else
|
294
|
+
o
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
280
298
|
end
|
281
299
|
end
|
@@ -22,7 +22,7 @@ module PoolParty
|
|
22
22
|
|
23
23
|
# Wrap all the resources into a class package from
|
24
24
|
def classpackage_with_self(parent=self, &block)
|
25
|
-
name = (parent.options.name || Classpackage.name(parent).to_s).sanitize
|
25
|
+
name = (parent && parent.options.name || Classpackage.name(parent).to_s).sanitize
|
26
26
|
if in_global_classpackages?(name)
|
27
27
|
returning get_from_global_classpackage_store(name) do |cls|
|
28
28
|
cls.run_in_context(parent, &block) if block
|
@@ -45,7 +45,7 @@ module PoolParty
|
|
45
45
|
store_into_global_classpackage_store(@@cp)
|
46
46
|
end
|
47
47
|
return @@cp
|
48
|
-
@@parent_resources = nil
|
48
|
+
@@parent_resources = @@cp = nil
|
49
49
|
end
|
50
50
|
|
51
51
|
class Classpackage < Resource
|
@@ -95,7 +95,7 @@ module PoolParty
|
|
95
95
|
false
|
96
96
|
end
|
97
97
|
|
98
|
-
def self.name(parent=
|
98
|
+
def self.name(parent=self)
|
99
99
|
"custom_#{parent ? parent.object_id.to_s : "parent"}"
|
100
100
|
end
|
101
101
|
|
@@ -4,15 +4,18 @@ module PoolParty
|
|
4
4
|
class Directory < Resource
|
5
5
|
|
6
6
|
default_options({
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:owner => "#{Base.user}"
|
7
|
+
:mode => 644
|
8
|
+
# :owner => "#{Base.user}"
|
10
9
|
})
|
11
10
|
|
12
11
|
def class_type_name
|
13
12
|
"file"
|
14
13
|
end
|
15
14
|
|
15
|
+
def ensure
|
16
|
+
"directory"
|
17
|
+
end
|
18
|
+
|
16
19
|
def present
|
17
20
|
'directory'
|
18
21
|
end
|