fairchild-poolparty 1.1.5 → 1.2.12
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/README.txt +13 -9
- data/Rakefile +0 -1
- data/VERSION.yml +2 -2
- data/bin/cloud +43 -46
- data/bin/cloud-bootstrap +33 -23
- data/bin/cloud-configure +33 -34
- data/bin/cloud-console +31 -9
- data/bin/cloud-contract +27 -11
- data/bin/cloud-expand +32 -19
- data/bin/cloud-list +43 -15
- data/bin/cloud-osxcopy +22 -12
- data/bin/cloud-provision +39 -24
- data/bin/cloud-run +37 -0
- data/bin/cloud-setup-dev +31 -20
- data/bin/cloud-show +40 -21
- data/bin/cloud-ssh +24 -15
- data/bin/cloud-start +33 -19
- data/bin/cloud-terminate +34 -15
- data/bin/cloud-verify +41 -0
- data/bin/install-poolparty +22 -0
- data/bin/server-cloud-elections +17 -23
- data/bin/server-list-active +23 -22
- data/bin/server-manage-election +14 -23
- data/bin/server-show-stats +1 -1
- data/config/jeweler.rb +6 -6
- data/examples/basic.rb +13 -14
- data/examples/fairchild.rb +25 -20
- data/examples/maize.rb +37 -0
- data/examples/metavirt_cloud.rb +33 -0
- data/examples/simple.rb +13 -0
- data/examples/vmrun_cloud.rb +17 -0
- data/lib/poolparty/{aska/aska.rb → aska.rb} +3 -0
- data/lib/poolparty/core/array.rb +13 -1
- data/lib/poolparty/core/exception.rb +1 -1
- data/lib/poolparty/core/hash.rb +63 -2
- data/lib/poolparty/core/integer.rb +11 -0
- data/lib/poolparty/core/object.rb +41 -19
- data/lib/poolparty/core/proc.rb +0 -7
- data/lib/poolparty/core/string.rb +35 -2
- data/lib/poolparty/core/symbol.rb +10 -0
- data/lib/poolparty/core/time.rb +6 -0
- data/lib/poolparty/dependency_resolver/chef_resolver.rb +40 -41
- data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
- data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +6 -6
- data/lib/poolparty/dependency_resolver/puppet.rb +0 -1
- data/lib/poolparty/dependency_resolver/puppet_resolver.rb +14 -48
- data/lib/poolparty/exceptions/MasterException.rb +2 -2
- data/lib/poolparty/extra/duration.rb +96 -0
- data/lib/poolparty/helpers/binary.rb +1 -1
- data/lib/poolparty/helpers/console.rb +0 -5
- data/lib/poolparty/helpers/optioner.rb +18 -13
- data/lib/poolparty/installers/base_installer.rb +113 -0
- data/lib/poolparty/installers/ec2.rb +141 -0
- data/lib/poolparty/installers/vmrun.rb +144 -0
- data/lib/poolparty/lite.rb +5 -2
- data/lib/poolparty/modules/callbacks.rb +15 -2
- data/lib/poolparty/modules/cloud_dsl.rb +10 -8
- data/lib/poolparty/modules/cloud_resourcer.rb +39 -59
- data/lib/poolparty/modules/daemonizable.rb +4 -5
- data/lib/poolparty/modules/definable_resource.rb +6 -7
- data/lib/poolparty/modules/file_writer.rb +2 -2
- data/lib/poolparty/modules/output.rb +2 -2
- data/lib/poolparty/modules/pinger.rb +9 -2
- data/lib/poolparty/modules/pretty_printer.rb +1 -1
- data/lib/poolparty/modules/resourcing_dsl.rb +1 -29
- data/lib/poolparty/modules/searchable_paths.rb +100 -0
- data/lib/poolparty/modules/user_helpers.rb +1 -1
- data/lib/poolparty/monitors/base_monitor.rb +65 -0
- data/lib/poolparty/monitors/monitor_daemon.rb +168 -0
- data/lib/poolparty/monitors/monitor_rack.rb +29 -15
- data/lib/poolparty/monitors/monitors/{time_monitor.rb → clock_monitor.rb} +7 -2
- data/lib/poolparty/monitors/monitors/cloud_monitor.rb +36 -0
- data/lib/poolparty/monitors/monitors/elections_monitor.rb +76 -0
- data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +15 -12
- data/lib/poolparty/monitors/monitors/stats_monitor.rb +68 -49
- data/lib/poolparty/net/init.rb +12 -7
- data/lib/poolparty/net/remote_instance.rb +48 -64
- data/lib/poolparty/net/remoter/cloud_control.rb +0 -177
- data/lib/poolparty/net/remoter/connections.rb +19 -14
- data/lib/poolparty/net/remoter/interactive.rb +30 -24
- data/lib/poolparty/net/remoter_base.rb +140 -48
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +119 -71
- data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +42 -31
- data/lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb +75 -10
- data/lib/poolparty/net/remoter_bases/libvirt/libvirt.rb +73 -0
- data/lib/poolparty/net/remoter_bases/libvirt/libvirt_instance.rb +64 -0
- data/lib/poolparty/net/remoter_bases/metavirt/metavirt.rb +110 -0
- data/lib/poolparty/net/remoter_bases/metavirt/metavirt_instance.rb +37 -0
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +1 -1
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +1 -1
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -117
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +59 -43
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +37 -21
- data/lib/poolparty/plugins/apache2/apache.rb +266 -0
- data/lib/poolparty/plugins/apache2/passenger_site.rb +86 -0
- data/lib/poolparty/plugins/apache2/php5.rb +40 -0
- data/lib/poolparty/plugins/apache2/virtual_host.rb +53 -0
- data/lib/poolparty/plugins/authorized_key.rb +29 -0
- data/lib/poolparty/plugins/bind.rb +5 -6
- data/lib/poolparty/plugins/{chef.rb → chef/chef.rb} +32 -44
- data/lib/poolparty/plugins/chef/chef_deploy.rb +55 -0
- data/lib/poolparty/plugins/chef/chef_deploy_definition.rb +32 -0
- data/lib/poolparty/plugins/chef/chef_library.rb +7 -0
- data/lib/poolparty/plugins/chef/chef_recipe.rb +7 -0
- data/lib/poolparty/plugins/chef/include_chef_recipe.rb +14 -0
- data/lib/poolparty/plugins/deploy_directory.rb +41 -26
- data/lib/poolparty/plugins/gem_package.rb +42 -14
- data/lib/poolparty/plugins/git.rb +62 -33
- data/lib/poolparty/{base_packages → plugins}/haproxy.rb +21 -20
- data/lib/poolparty/plugins/heartbeat.rb +16 -0
- data/lib/poolparty/plugins/host.rb +39 -0
- data/lib/poolparty/plugins/line_in_file.rb +24 -2
- data/lib/poolparty/plugins/plugin_template.rb +13 -0
- data/lib/poolparty/{base_packages/poolparty.rb → plugins/poolparty_base_packages.rb} +4 -6
- data/lib/poolparty/plugins/rails_deploy.rb +128 -0
- data/lib/poolparty/{base_packages → plugins}/ruby.rb +3 -3
- data/lib/poolparty/plugins/runit.rb +17 -92
- data/lib/poolparty/plugins/sshkey.rb +50 -0
- data/lib/poolparty/plugins/svn.rb +10 -8
- data/lib/poolparty/poolparty/cloud.rb +224 -61
- data/lib/poolparty/poolparty/default.rb +22 -15
- data/lib/poolparty/poolparty/key.rb +19 -28
- data/lib/poolparty/poolparty/neighborhoods.rb +16 -5
- data/lib/poolparty/poolparty/plugin.rb +49 -13
- data/lib/poolparty/poolparty/pool.rb +32 -9
- data/lib/poolparty/poolparty/poolparty_base_class.rb +65 -45
- data/lib/poolparty/poolparty/resource.rb +24 -49
- data/lib/poolparty/poolparty/service.rb +11 -9
- data/lib/poolparty/provision/boot_strapper.rb +48 -37
- data/lib/poolparty/provision/configurations/chef.rb +6 -5
- data/lib/poolparty/provision/dr_configure.rb +25 -19
- data/lib/poolparty/resources/cron.rb +37 -4
- data/lib/poolparty/resources/directory.rb +30 -0
- data/lib/poolparty/resources/exec.rb +31 -1
- data/lib/poolparty/resources/file.rb +54 -12
- data/lib/poolparty/resources/group.rb +21 -0
- data/lib/poolparty/resources/mount.rb +24 -4
- data/lib/poolparty/resources/package.rb +30 -6
- data/lib/poolparty/resources/remote_file.rb +33 -1
- data/lib/poolparty/resources/service.rb +22 -1
- data/lib/poolparty/resources/symlink.rb +37 -2
- data/lib/poolparty/resources/user.rb +25 -0
- data/lib/poolparty/resources/variable.rb +26 -1
- data/lib/poolparty/resources.rb +42 -0
- data/lib/poolparty/schema.rb +6 -8
- data/lib/poolparty/templates/apache2/apache2.conf +14 -0
- data/lib/poolparty/templates/apache2/base.conf.erb +168 -0
- data/lib/poolparty/templates/apache2/browser_fixes.conf.erb +26 -0
- data/lib/poolparty/templates/apache2/debian.conf.erb +675 -0
- data/lib/poolparty/templates/apache2/default-site.conf.erb +41 -0
- data/lib/poolparty/templates/apache2/directory_indexes.conf.erb +101 -0
- data/lib/poolparty/templates/apache2/logging-syslog.conf.erb +42 -0
- data/lib/poolparty/templates/apache2/mime-extras.conf.erb +211 -0
- data/lib/poolparty/templates/apache2/mime-minimal.conf.erb +15 -0
- data/lib/poolparty/templates/apache2/mpm-worker.conf.erb +20 -0
- data/lib/poolparty/templates/apache2/mpm-worker.erb +20 -0
- data/lib/poolparty/templates/apache2/passenger.conf.erb +20 -0
- data/lib/poolparty/templates/apache2/php.ini.erb +1253 -0
- data/lib/poolparty/templates/apache2/server-status.erb +19 -0
- data/lib/poolparty/templates/{gemrc → gemrc_template} +0 -0
- data/lib/poolparty/templates/haproxy.conf +2 -2
- data/lib/poolparty/templates/monitor.ru +13 -0
- data/lib/poolparty/templates/php.ini.erb +1253 -0
- data/lib/poolparty/verification/verifier_base.rb +10 -0
- data/lib/poolparty/verification/verifiers/http_match.rb +43 -0
- data/lib/poolparty/verification/verifiers/http_status.rb +59 -0
- data/lib/poolparty/verification/verifiers/ping.rb +18 -1
- data/lib/poolparty/verification/verify.rb +6 -0
- data/lib/poolparty.rb +14 -15
- data/lib/poolpartycl.rb +1 -1
- data/spec/bin/bin_spec_helper.rb +1 -0
- data/spec/bin/fixtures/bin_cloud_for_test.rb +0 -6
- data/spec/bin/server-list-active_spec.rb +4 -6
- data/spec/poolparty/core/object_spec.rb +1 -62
- data/spec/poolparty/core/ordered_hash_spec.rb +7 -7
- data/spec/poolparty/core/string_spec.rb +1 -1
- data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +0 -8
- data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +35 -32
- data/spec/poolparty/extra/deployments_spec.rb +68 -68
- data/spec/poolparty/fixtures/clouds.json +1 -1
- data/spec/poolparty/fixtures/fake_key.pub +1 -0
- data/spec/poolparty/helpers/optioner_spec.rb +4 -11
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +1 -1
- data/spec/poolparty/modules/searchable_paths_spec.rb +83 -0
- data/spec/poolparty/net/remote_instance_spec.rb +1 -2
- data/spec/poolparty/net/remoter_base_spec.rb +7 -11
- data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +9 -11
- data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +6 -56
- data/spec/poolparty/net/remoter_bases/ec2_spec.rb +10 -7
- data/spec/poolparty/net/remoter_spec.rb +2 -3
- data/spec/poolparty/plugins/authorized_key_spec.rb +23 -0
- data/spec/poolparty/plugins/deploydirectory_spec.rb +64 -51
- data/spec/poolparty/plugins/git_spec.rb +8 -10
- data/spec/poolparty/poolparty/cloud_spec.rb +61 -64
- data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +2 -4
- data/spec/poolparty/poolparty/configurers/files/ruby_plugins.rb +1 -1
- data/spec/poolparty/poolparty/configurers/ruby_spec.rb +1 -6
- data/spec/poolparty/poolparty/default_spec.rb +23 -22
- data/spec/poolparty/poolparty/example_spec.rb +47 -26
- data/spec/poolparty/{base_packages → poolparty}/haproxy_spec.rb +1 -1
- data/spec/poolparty/{base_packages → poolparty}/heartbeat_spec.rb +1 -1
- data/spec/poolparty/poolparty/key_spec.rb +2 -2
- data/spec/poolparty/poolparty/neighborhoods_spec.rb +1 -1
- data/spec/poolparty/poolparty/plugin_model_spec.rb +13 -17
- data/spec/poolparty/poolparty/plugin_spec.rb +7 -7
- data/spec/poolparty/poolparty/pool_spec.rb +4 -10
- data/spec/poolparty/poolparty/resource_spec.rb +25 -29
- data/spec/poolparty/poolparty/script_spec.rb +1 -4
- data/spec/poolparty/poolparty/test_plugins/webserver.rb +27 -25
- data/spec/poolparty/resources/file_spec.rb +5 -4
- data/spec/poolparty/resources/sshkey_spec.rb +39 -40
- data/spec/poolparty/spec_helper.rb +9 -39
- data/tasks/poolparty.rake +29 -1
- data/tasks/spec.rake +39 -1
- data/test/fixtures/fake_clouds.rb +11 -0
- data/test/fixtures/metavirt_cloud.json +1 -0
- data/test/fixtures/test_key +1 -0
- data/test/poolparty/core/array_test.rb +11 -0
- data/test/poolparty/core/hash_test.rb +5 -7
- data/test/poolparty/core/object_test.rb +29 -0
- data/test/poolparty/dependency_resolver/chef_resolver_test.rb +82 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +5 -26
- data/test/poolparty/modules/callbacks_test.rb +1 -1
- data/test/poolparty/modules/cloud_dsl_test.rb +10 -8
- data/test/poolparty/monitors/test_base_monitor.rb +17 -0
- data/test/poolparty/monitors/test_monitor_rack.rb +26 -0
- data/test/poolparty/net/remoter_base_test.rb +17 -0
- data/test/poolparty/net/remoter_bases/libvirt/libvirt_test.rb +70 -0
- data/test/poolparty/net/remoter_bases/metavirt/metavirt_test.rb +81 -0
- data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +58 -27
- data/test/poolparty/plugins/chef_deploy_test.rb +37 -0
- data/test/poolparty/plugins/chef_plugin_test.rb +23 -0
- data/test/poolparty/plugins/rails_deploy_test.rb +50 -0
- data/test/poolparty/poolparty/cloud_test.rb +65 -0
- data/test/poolparty/poolparty/isolated_cloud_test.rb +25 -0
- data/test/poolparty/poolparty/neighborhood_test.rb +1 -1
- data/test/poolparty/poolparty/plugin_test.rb +19 -0
- data/test/poolparty/poolparty/pool_test.rb +22 -0
- data/test/poolparty/poolparty/poolparty_base_class_test.rb +53 -15
- data/test/poolparty/poolparty/schema_test.rb +13 -0
- data/test/poolparty/poolparty/template_test.rb +6 -6
- data/test/poolparty/verification/verify_test.rb +7 -3
- data/test/test_helper.rb +15 -4
- data/test/test_methods.rb +11 -0
- data/vendor/chef/apache2/attributes/apache.rb +1 -1
- data/vendor/gems/dslify/LICENSE +20 -0
- data/vendor/gems/dslify/README.rdoc +33 -0
- data/vendor/gems/dslify/Rakefile +56 -0
- data/vendor/gems/dslify/VERSION.yml +4 -0
- data/vendor/gems/dslify/dslify.gemspec +29 -0
- data/vendor/gems/dslify/lib/dslify.rb +81 -0
- data/vendor/gems/dslify/test/dslify_test.rb +283 -0
- data/vendor/gems/dslify/test/test_helper.rb +7 -0
- data/vendor/gems/git-style-binaries/README.markdown +280 -0
- data/vendor/gems/git-style-binaries/Rakefile +64 -0
- data/vendor/gems/git-style-binaries/VERSION.yml +4 -0
- data/vendor/gems/git-style-binaries/doc/EXAMPLES +1 -0
- data/vendor/gems/git-style-binaries/doc/gsb-screencast.png +0 -0
- data/vendor/gems/git-style-binaries/doc/poolparty-binaries.screenplay +412 -0
- data/vendor/gems/git-style-binaries/git-style-binaries.gemspec +78 -0
- data/vendor/gems/git-style-binaries/lib/ext/colorize.rb +198 -0
- data/vendor/gems/git-style-binaries/lib/ext/core.rb +16 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/autorunner.rb +21 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/command.rb +204 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/commands/help.rb +32 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/name_resolver.rb +78 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/pager.rb +37 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary/parser.rb +223 -0
- data/vendor/gems/git-style-binaries/lib/git-style-binary.rb +88 -0
- data/vendor/gems/git-style-binaries/test/fixtures/flickr +4 -0
- data/vendor/gems/git-style-binaries/test/fixtures/flickr-download +17 -0
- data/vendor/gems/git-style-binaries/test/fixtures/wordpress +42 -0
- data/vendor/gems/git-style-binaries/test/fixtures/wordpress-categories +18 -0
- data/vendor/gems/git-style-binaries/test/fixtures/wordpress-list +18 -0
- data/vendor/gems/git-style-binaries/test/fixtures/wordpress-post +26 -0
- data/vendor/gems/git-style-binaries/test/git-style-binary/command_test.rb +17 -0
- data/vendor/gems/git-style-binaries/test/git_style_binary_test.rb +21 -0
- data/vendor/gems/git-style-binaries/test/running_binaries_test.rb +224 -0
- data/vendor/gems/git-style-binaries/test/shoulda_macros/matching_stdio.rb +13 -0
- data/vendor/gems/git-style-binaries/test/test_helper.rb +28 -0
- data/vendor/gems/parenting/History.txt +4 -0
- data/vendor/gems/parenting/Manifest.txt +14 -0
- data/vendor/gems/parenting/PostInstall.txt +2 -0
- data/vendor/gems/parenting/README.rdoc +47 -0
- data/vendor/gems/parenting/Rakefile +28 -0
- data/vendor/gems/parenting/lib/parenting/parenting.rb +70 -0
- data/vendor/gems/parenting/lib/parenting.rb +10 -0
- data/vendor/gems/parenting/parenting.gemspec +39 -0
- data/vendor/gems/parenting/script/console +10 -0
- data/vendor/gems/parenting/script/destroy +14 -0
- data/vendor/gems/parenting/script/generate +14 -0
- data/vendor/gems/parenting/test/file_to_eval.rb +9 -0
- data/vendor/gems/parenting/test/test_helper.rb +5 -0
- data/vendor/gems/parenting/test/test_parenting.rb +117 -0
- data/vendor/gems/suitcase/LICENSE +20 -0
- data/vendor/gems/suitcase/README.rdoc +31 -0
- data/vendor/gems/suitcase/Rakefile +57 -0
- data/vendor/gems/suitcase/VERSION.yml +4 -0
- data/vendor/gems/suitcase/lib/suitcase/unzipper.rb +15 -0
- data/vendor/gems/suitcase/lib/suitcase/zipper.rb +167 -0
- data/vendor/gems/suitcase/lib/suitcase.rb +5 -0
- data/vendor/gems/suitcase/suitcase.gemspec +32 -0
- data/vendor/gems/suitcase/test/suitcase_test.rb +108 -0
- data/vendor/gems/suitcase/test/test_dir/box.rb +1 -0
- data/vendor/gems/suitcase/test/test_dir/gems/famoseagle-carrot-0.6.0.gem +0 -0
- data/vendor/gems/suitcase/test/test_dir/test.txt +1 -0
- data/vendor/gems/suitcase/test/test_helper.rb +12 -0
- data/vendor/gems/trollop/FAQ.txt +35 -0
- data/vendor/gems/trollop/History.txt +97 -0
- data/vendor/gems/trollop/Manifest.txt +7 -0
- data/vendor/gems/trollop/README.txt +40 -0
- data/vendor/gems/trollop/Rakefile +36 -0
- data/vendor/gems/trollop/lib/trollop.rb +735 -0
- data/vendor/gems/trollop/release-script.txt +13 -0
- data/vendor/gems/trollop/test/test_trollop.rb +1042 -0
- data/vendor/gems/trollop/www/index.html +167 -0
- metadata +205 -150
- data/bin/cloud-describe +0 -28
- data/bin/cloud-handle-load +0 -27
- data/bin/cloud-rsync +0 -28
- data/bin/cloud-spec +0 -41
- data/bin/messenger-get-current-nodes +0 -14
- data/bin/server-become-master +0 -24
- data/bin/server-build-messenger +0 -28
- data/bin/server-clean-cert-for +0 -15
- data/bin/server-provision +0 -32
- data/bin/server-start-agent +0 -15
- data/bin/server-start-client +0 -29
- data/bin/server-start-master +0 -26
- data/bin/server-start-node +0 -32
- data/bin/server-stop-client +0 -3
- data/bin/server-stop-master +0 -3
- data/bin/server-stop-node +0 -3
- data/bin/server-update-hosts +0 -49
- data/examples/poolparty.rb +0 -12
- data/lib/poolparty/base_packages/heartbeat.rb +0 -58
- data/lib/poolparty/base_packages/runit.rb +0 -21
- data/lib/poolparty/capistrano/cloud_tasks.rb +0 -10
- data/lib/poolparty/capistrano.rb +0 -54
- data/lib/poolparty/config/postlaunchmessage.txt +0 -5
- data/lib/poolparty/core/metaid.rb +0 -15
- data/lib/poolparty/core/module.rb +0 -40
- data/lib/poolparty/extra/deployments.rb +0 -31
- data/lib/poolparty/helpers/display.rb +0 -30
- data/lib/poolparty/net/messenger.rb +0 -57
- data/lib/poolparty/net/remote_bases.rb +0 -21
- data/lib/poolparty/plugins/chef_deploy.rb +0 -58
- data/lib/poolparty/plugins/dynomite.rb +0 -14
- data/lib/poolparty/plugins/nanite.rb +0 -41
- data/lib/poolparty/plugins/rsyncmirror.rb +0 -28
- data/lib/poolparty/plugins/tokyo_tyrant.rb +0 -23
- data/lib/poolparty/poolparty/plugin_model.rb +0 -45
- data/lib/poolparty/resources/host.rb +0 -16
- data/lib/poolparty/resources/sshkey.rb +0 -27
- data/lib/poolparty/services/conditional.rb +0 -46
- data/lib/poolparty/spec/core/string.rb +0 -18
- data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
- data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
- data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
- data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
- data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
- data/lib/poolparty/spec/matchers/have_file.rb +0 -28
- data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
- data/lib/poolparty/spec/matchers/have_git.rb +0 -28
- data/lib/poolparty/spec/matchers/have_host.rb +0 -28
- data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
- data/lib/poolparty/spec/matchers/have_package.rb +0 -28
- data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
- data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
- data/lib/poolparty/spec/matchers/have_service.rb +0 -28
- data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
- data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
- data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
- data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
- data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
- data/lib/poolparty/spec/templates/have_base.rb +0 -28
- data/lib/poolparty/spec.rb +0 -31
- data/spec/poolparty/core/module_spec.rb +0 -15
- data/spec/poolparty/helpers/display_spec.rb +0 -13
- data/spec/poolparty/id_rsa +0 -27
- data/spec/poolparty/net/messenger_spec.rb +0 -16
- data/spec/poolparty/resources/host_spec.rb +0 -35
- data/spec/poolparty/services/conditional_spec.rb +0 -52
- data/spec/poolparty/spec/core/string_spec.rb +0 -57
@@ -16,26 +16,18 @@ module Monitors
|
|
16
16
|
|
17
17
|
begin
|
18
18
|
@cloud = JSON.parse( open('/etc/poolparty/clouds.json' ).read )
|
19
|
+
# @cloud = ::PoolParty::Cloud::Cloud.load_from_json(open('/etc/poolparty/clouds.json' ).read)
|
19
20
|
rescue
|
20
|
-
@cloud = ::PoolParty::Default.
|
21
|
+
@cloud = ::PoolParty::Default.dsl_options.merge({"options" =>
|
21
22
|
{"rules" => {"expand" => PoolParty::Default.expand_when,
|
22
23
|
"contract" => PoolParty::Default.contract_when
|
23
24
|
}
|
24
25
|
}
|
25
|
-
})
|
26
|
+
})
|
26
27
|
end
|
27
|
-
|
28
|
-
# {"expand_when" => "load > 0.9", "contract_when" => "load < 0.4"}
|
29
|
-
# We set these as rules on ourselves so we can use aska to parse the rules.
|
30
|
-
# Later, we can call vote_rules on ourself and we'll get back Aska::Rule(s)
|
31
|
-
# which we'll call valid_rule? for each Rule and return the result
|
32
|
-
@cloud["options"]["rules"].each do |name, rul|
|
33
|
-
r = Aska::Rule.new(rul)
|
34
|
-
rule(name) << r
|
35
|
-
end
|
36
|
-
# log << "#{::Time.now.strftime("%Y-%m-%d-%H-%M")}, #{stats.to_json}\n"
|
28
|
+
make_aska_rules(@cloud["options"]["rules"])
|
37
29
|
end
|
38
|
-
|
30
|
+
|
39
31
|
def get(data=nil)
|
40
32
|
begin
|
41
33
|
if !request.params || request.params.empty?
|
@@ -46,15 +38,20 @@ module Monitors
|
|
46
38
|
stats.to_json
|
47
39
|
end
|
48
40
|
rescue Exception => e
|
49
|
-
"Error: #{e}"
|
41
|
+
"Error: #{e}".to_json
|
50
42
|
end
|
51
43
|
end
|
52
44
|
|
45
|
+
#alias to allow access thru http route GET /stats/nominations
|
46
|
+
def get_nominations(_nodes=[])
|
47
|
+
nominations
|
48
|
+
end
|
49
|
+
|
53
50
|
def put(data)
|
54
51
|
if d = JSON.parse(request.params)
|
55
52
|
hsh = d.reject {|ip, _node| ip == my_ip }
|
56
53
|
stats.merge!(hsh)
|
57
|
-
handle_election
|
54
|
+
# handle_election
|
58
55
|
else
|
59
56
|
"boom"
|
60
57
|
end
|
@@ -63,16 +60,6 @@ module Monitors
|
|
63
60
|
|
64
61
|
protected
|
65
62
|
|
66
|
-
def log(log_file_path="/var/log/poolparty/stats_monitor.log")
|
67
|
-
if @logfile
|
68
|
-
@logfile
|
69
|
-
else
|
70
|
-
::File.file? log_file_path
|
71
|
-
::FileUtils.mkdir_p ::File.dirname(log_file_path) unless ::File.directory?(::File.dirname(log_file_path))
|
72
|
-
@logfile ||= ::File.open(log_file_path, 'a+')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
63
|
# Handle the elections
|
77
64
|
def handle_election
|
78
65
|
# Ballots look like:
|
@@ -86,26 +73,26 @@ module Monitors
|
|
86
73
|
# TODO: Move?
|
87
74
|
# Expand the cloud if 50+% of the votes are for expansion
|
88
75
|
# Contract the cloud if 51+% of the votes are for contraction
|
76
|
+
# Check to make sure an elected action is not already in progress
|
89
77
|
if (candidates[:expand] - candidates[:contract])/stats.keys.size > 0.5
|
90
|
-
%x[
|
78
|
+
%x[server-cloud-elections expand] unless elected_action == "expand"
|
91
79
|
@elected_action = "expand"
|
92
80
|
elsif (candidates[:contract] - candidates[:expand])/stats.keys.size > 0.5
|
93
|
-
%x[
|
81
|
+
%x[server-cloud-elections contract] unless elected_action == "contract"
|
94
82
|
@elected_action = "contract"
|
95
83
|
end
|
96
84
|
|
97
85
|
reload_data!
|
98
86
|
stats[my_ip]["elected_action"] = @elected_action if @elected_action
|
99
|
-
log
|
87
|
+
log "#{Time.now.strftime("%Y-%m-%d-%H-%M")}, #{stats.to_json}\n"
|
100
88
|
stats.to_json
|
101
89
|
end
|
102
90
|
|
103
|
-
|
104
|
-
def elected_action
|
91
|
+
def elected_action(_n=nil)
|
105
92
|
@elected_action ||= nil
|
106
93
|
end
|
107
94
|
|
108
|
-
def rules
|
95
|
+
def rules(_n=nil)
|
109
96
|
@rules ||= {}
|
110
97
|
end
|
111
98
|
|
@@ -120,39 +107,51 @@ module Monitors
|
|
120
107
|
stats
|
121
108
|
end
|
122
109
|
|
123
|
-
def stats
|
110
|
+
def stats(_n=nil)
|
124
111
|
@stats ||= {my_ip => {}}
|
125
112
|
end
|
126
113
|
|
127
|
-
def load
|
114
|
+
def load(_n=nil)
|
128
115
|
%x{"uptime"}.split[-3].to_f
|
129
116
|
end
|
130
117
|
|
131
|
-
def instances
|
132
|
-
|
133
|
-
res ||= %x[/usr/bin/server-list-active internal_ip].split("\t")
|
134
|
-
res
|
118
|
+
def instances(_n=nil)
|
119
|
+
my_cloud.nodes(:status => "running")
|
135
120
|
end
|
136
121
|
|
137
|
-
def can_expand?
|
122
|
+
def can_expand?(_n=nil)
|
138
123
|
instances.size < max_instances
|
139
124
|
end
|
140
125
|
|
141
|
-
def can_contract?
|
126
|
+
def can_contract?(_n=nil)
|
142
127
|
instances.size > min_instances
|
143
128
|
end
|
144
129
|
|
145
|
-
def min_instances
|
146
|
-
(
|
130
|
+
def min_instances(_n=nil)
|
131
|
+
(my_cloud.minimum_instances || PoolParty::Default.minimum_instances).to_i
|
147
132
|
end
|
148
133
|
|
149
|
-
def max_instances
|
150
|
-
(
|
134
|
+
def max_instances(_n=nil)
|
135
|
+
(my_cloud.maximum_instances || PoolParty::Default.maximum_instances).to_i
|
151
136
|
end
|
152
137
|
|
153
|
-
def nominations
|
138
|
+
def nominations(_n=nil)
|
139
|
+
# return ['expand'] if instances.size<min_instances
|
154
140
|
load = stats[my_ip]["load"] ||= self.send(:load)
|
155
|
-
|
141
|
+
nominations = if my_cloud.running_action
|
142
|
+
["none"]
|
143
|
+
else
|
144
|
+
collect_nominations
|
145
|
+
end
|
146
|
+
# Hackity hack hack
|
147
|
+
nominations << "expand" if my_cloud.nodes(:status => "running").size < min_instances
|
148
|
+
nominations << "contract" if my_cloud.nodes(:status => "running").size > max_instances
|
149
|
+
stats[my_ip]["nominations"] = nominations #TODO: Deprecate
|
150
|
+
nominations
|
151
|
+
end
|
152
|
+
|
153
|
+
def collect_nominations
|
154
|
+
nominations = rules.collect do |k,cld_rules|
|
156
155
|
t = cld_rules.collect do |r|
|
157
156
|
# If the comparison works
|
158
157
|
if self.send(r.key.to_sym).to_f.send(r.comparison, r.var.to_f)
|
@@ -165,22 +164,42 @@ module Monitors
|
|
165
164
|
else
|
166
165
|
k
|
167
166
|
end
|
168
|
-
end
|
167
|
+
end
|
169
168
|
end.compact
|
170
|
-
end.flatten.compact
|
169
|
+
end.flatten.compact
|
171
170
|
end
|
172
|
-
|
171
|
+
|
172
|
+
def neighborhood
|
173
|
+
@neighborhood ||= clouds[open('/etc/poolparty/cloud_name').read].nodes
|
174
|
+
end
|
175
|
+
|
176
|
+
def get_hello(_n=nil)
|
177
|
+
'hi there'
|
178
|
+
end
|
179
|
+
|
173
180
|
def my_ip
|
174
181
|
@my_ip ||= ohai["ipaddress"]
|
175
182
|
end
|
176
183
|
|
177
|
-
def ohai
|
184
|
+
def ohai(_n=nil)
|
178
185
|
@ohai ||= JSON.parse(%x[ohai])
|
179
186
|
end
|
180
187
|
|
181
188
|
def reload_data!
|
182
189
|
@stats[my_ip] = {}
|
183
190
|
instances.each {|inst| @stats[inst] = {} }
|
191
|
+
end
|
192
|
+
|
193
|
+
# Our cloud.dsl_options.rules looks like
|
194
|
+
# {"expand_when" => "load > 0.9", "contract_when" => "load < 0.4"}
|
195
|
+
# We set these as rules on ourselves so we can use aska to parse the rules.
|
196
|
+
# Later, we can call vote_rules on ourself and we'll get back Aska::Rule(s)
|
197
|
+
# which we'll call valid_rule? for each Rule and return the result
|
198
|
+
def make_aska_rules(rules)
|
199
|
+
rules.each do |name, rul|
|
200
|
+
r = Aska::Rule.new(rul)
|
201
|
+
rule(name) << r
|
202
|
+
end
|
184
203
|
end
|
185
204
|
|
186
205
|
end
|
data/lib/poolparty/net/init.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
class Object
|
2
|
+
#TODO: deprecate. use RemoterBase.available_bases instead
|
3
|
+
def remote_bases
|
4
|
+
PoolParty::Remote.available
|
5
|
+
end
|
4
6
|
end
|
5
7
|
|
6
|
-
#
|
7
|
-
|
8
|
-
|
8
|
+
# Load the core net libraries.
|
9
|
+
# These are neccessary for any of the remoter_bases to function.
|
10
|
+
require ::File.join(::File.dirname(__FILE__),'remoter_base.rb')
|
11
|
+
require ::File.join(::File.dirname(__FILE__),'remote_instance.rb')
|
12
|
+
|
13
|
+
Dir["#{::File.dirname(__FILE__)}/remoter_bases/*/*.rb"].each do |base|
|
14
|
+
name = ::File.basename(base, ::File.extname(base))
|
9
15
|
require base
|
10
|
-
register_remote_base name
|
11
16
|
end
|
@@ -4,106 +4,90 @@ module PoolParty
|
|
4
4
|
class RemoteInstance
|
5
5
|
include Dslify
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
dsl_methods :name, # Name of the remote instance (internal usage)
|
8
|
+
:ip, # Ip of the remote instance
|
9
|
+
:internal_ip, # Internal ip of the remote instance
|
10
|
+
:public_ip,
|
11
|
+
:status, # Status of the remote instance
|
12
|
+
:launch_time,
|
13
|
+
:keypair_name
|
14
|
+
|
15
|
+
def initialize(opts={})
|
16
|
+
opts.choose{|k,v| dsl_options.has_key? k}
|
11
17
|
set_vars_from_options(opts) if opts.is_a?(Hash)
|
12
18
|
on_init
|
13
19
|
end
|
14
20
|
|
15
|
-
|
16
|
-
|
21
|
+
## hash like methods
|
22
|
+
# TODO: move these into a module, or into dslify
|
23
|
+
# include Enumerable
|
24
|
+
def each
|
25
|
+
dsl_options.each{ |k,v| yield k,v }
|
17
26
|
end
|
18
27
|
|
19
|
-
|
20
|
-
|
28
|
+
def [](k)
|
29
|
+
if dsl_options.has_key? k
|
30
|
+
dsl_options[k]
|
31
|
+
else
|
32
|
+
nil
|
33
|
+
end
|
21
34
|
end
|
22
35
|
|
23
|
-
|
24
|
-
|
25
|
-
def master?
|
26
|
-
name == "master"
|
36
|
+
def []=(k,v)
|
37
|
+
dsl_options[k] = v
|
27
38
|
end
|
28
39
|
|
29
|
-
|
30
|
-
|
31
|
-
(ip.nil? || name.nil?) ? false : true
|
40
|
+
def has_key?(key)
|
41
|
+
dsl_options.has_key?(key)
|
32
42
|
end
|
33
43
|
|
34
|
-
|
35
|
-
|
36
|
-
running?
|
37
|
-
# !responding.nil? #TODO MF this needs to actually ping the node or something similar. stubbed to running? for now
|
44
|
+
def keys
|
45
|
+
dsl_options.keys
|
38
46
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
# it will always be the same
|
43
|
-
def load
|
44
|
-
current_load ||= 0.0 #NOTE MF: returning 0.0 seems like a bad idea here. should return nil if we dont have a real value
|
47
|
+
|
48
|
+
def values
|
49
|
+
dsl_options.values
|
45
50
|
end
|
51
|
+
##end of hash like methods
|
46
52
|
|
47
|
-
# Note, the next 4 methods will be overridden by the cloud specific remoter_base
|
48
53
|
# Is this instance running?
|
49
54
|
def running?
|
50
|
-
|
55
|
+
!(status =~ /running/).nil?
|
51
56
|
end
|
52
57
|
# Is this instance pending?
|
53
58
|
def pending?
|
54
|
-
|
59
|
+
!(status =~ /pending/).nil?
|
55
60
|
end
|
56
61
|
# Is this instance terminating?
|
57
62
|
def terminating?
|
58
|
-
|
63
|
+
!(status =~ /shutting/).nil?
|
59
64
|
end
|
60
65
|
# Has this instance been terminated?
|
61
66
|
def terminated?
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
# Printing. This is how we extract the instances into the listing on the
|
66
|
-
# local side into the local listing file
|
67
|
-
def to_s
|
68
|
-
"#{name}\t#{ip}\t#{instance_id rescue ""}"
|
67
|
+
!(status =~ /terminated/).nil?
|
69
68
|
end
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
arr = s.split("\t")
|
74
|
-
{:name => arr[0], :ip => arr[1]}
|
70
|
+
def elapsed_runtime
|
71
|
+
Time.now.to_i - launching_time.to_time.to_i
|
75
72
|
end
|
76
73
|
|
77
|
-
|
78
|
-
|
74
|
+
# Callback
|
75
|
+
def on_init
|
79
76
|
end
|
80
77
|
|
81
|
-
#
|
82
|
-
def
|
83
|
-
|
78
|
+
# The remote instances is only valid if there is an ip and a name
|
79
|
+
def valid?
|
80
|
+
(ip.nil? || name.nil?) ? false : true
|
84
81
|
end
|
85
82
|
|
86
|
-
#
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
def self.puppet_runner_command
|
92
|
-
". /etc/profile && puppetrunner"
|
93
|
-
end
|
94
|
-
def self.puppet_master_rerun_command
|
95
|
-
". /etc/profile && puppetrerun"
|
96
|
-
end
|
97
|
-
def self.puppet_rerun_commad
|
98
|
-
puppet_runner_command
|
83
|
+
# This is how we get the current load of the instance
|
84
|
+
# The approach of this may change entirely, but the usage of
|
85
|
+
# it will always be the same
|
86
|
+
def load
|
87
|
+
current_load ||= 0.0 #NOTE MF: returning 0.0 seems like a bad idea here. should return nil if we dont have a real value
|
99
88
|
end
|
100
|
-
#
|
101
89
|
|
102
|
-
def hosts_file_listing_for(cl)
|
103
|
-
string = (cl.name == cloud.name) ? "#{name}.#{my_cloud.name}\t#{name}" : "#{name}.#{my_cloud.name}"
|
104
|
-
"#{internal_ip}\t#{string}"
|
105
|
-
end
|
106
90
|
end
|
107
91
|
|
108
|
-
end
|
92
|
+
end
|
109
93
|
end
|
@@ -11,179 +11,6 @@ module PoolParty
|
|
11
11
|
def are_too_many_instances_running?
|
12
12
|
nodes(:status => "running").size > maximum_instances.to_i
|
13
13
|
end
|
14
|
-
|
15
|
-
|
16
|
-
# TODO: Deprecate all below here
|
17
|
-
# # A convenience method for waiting until there are no more
|
18
|
-
# # pending instances and then running the block
|
19
|
-
# def when_no_pending_instances(&block)
|
20
|
-
# reset!
|
21
|
-
# if list_of_pending_instances && list_of_pending_instances.size == 0
|
22
|
-
# vputs "" # Clear the terminal with a newline
|
23
|
-
# block.call if block
|
24
|
-
# else
|
25
|
-
# vprint "."
|
26
|
-
# wait "5.seconds"
|
27
|
-
# when_no_pending_instances(&block)
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# # Stub method for the time being to handle expansion of the cloud
|
32
|
-
# def can_expand_cloud?(force=false)
|
33
|
-
# (are_too_few_instances_running? || are_expansion_rules_valid? ) || force || false
|
34
|
-
# end
|
35
|
-
# def are_expansion_rules_valid?
|
36
|
-
# valid_rules?(:expand_when)
|
37
|
-
# end
|
38
|
-
# # Stub method for the time being to handle the contraction of the cloud
|
39
|
-
# def can_contract_cloud?(force=false)
|
40
|
-
# return true if force
|
41
|
-
# ((are_any_nodes_exceeding_minimum_runtime? and are_too_many_instances_running?) || are_contraction_rules_valid?) || false
|
42
|
-
# end
|
43
|
-
# def are_contraction_rules_valid?
|
44
|
-
# valid_rules?(:contract_when)
|
45
|
-
# end
|
46
|
-
# # Expand the cloud
|
47
|
-
# # If we can start a new instance and the load requires us to expand
|
48
|
-
# # the cloud, then we should request_launch_new_instances
|
49
|
-
# # Wait for the instance to boot up and when it does come back
|
50
|
-
# # online, then provision it as a slave, this way, it is ready for action from the
|
51
|
-
# # get go
|
52
|
-
# def expand_cloud_if_necessary(force=false)
|
53
|
-
# if can_start_a_new_instance? && can_expand_cloud?(force)
|
54
|
-
# vputs "Expanding the cloud based on load"
|
55
|
-
# @num = 1
|
56
|
-
# @num.times do |i|
|
57
|
-
# list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
|
58
|
-
# reset!
|
59
|
-
# vputs "request_launch_new_instances: #{@num}"
|
60
|
-
# provision_slaves_from_n(@num)
|
61
|
-
# after_launched
|
62
|
-
# end
|
63
|
-
# end
|
64
|
-
# end
|
65
|
-
# # Contract the cloud
|
66
|
-
# # If we can shutdown an instnace and the load allows us to contract
|
67
|
-
# # the cloud, then we should request_termination_of_non_master_instance
|
68
|
-
# def contract_cloud_if_necessary(force=false)
|
69
|
-
# if can_shutdown_an_instance? && can_contract_cloud?(force)
|
70
|
-
# vputs "Shrinking the cloud by 1"
|
71
|
-
# before_shutdown
|
72
|
-
# request_termination_of_non_master_instance
|
73
|
-
# end
|
74
|
-
# end
|
75
|
-
#
|
76
|
-
# # List calculation methods
|
77
|
-
# #
|
78
|
-
# # Are the minimum number of instances running?
|
79
|
-
# def minimum_number_of_instances_are_running?
|
80
|
-
# nodes(:status => "running").size >= minimum_instances.to_i
|
81
|
-
# end
|
82
|
-
# # Are the minimum number of instances NOT running?
|
83
|
-
# def minimum_number_of_instances_are_not_running?
|
84
|
-
# !(minimum_number_of_instances_are_running?)
|
85
|
-
# end
|
86
|
-
# # Can we shutdown an instance?
|
87
|
-
# def can_shutdown_an_instance?
|
88
|
-
# nodes(:status => "running").size > minimum_instances.to_i
|
89
|
-
# end
|
90
|
-
|
91
|
-
#
|
92
|
-
# ########
|
93
|
-
# # TODO: deprecate methods below here (only if they are deprecate-able)
|
94
|
-
# ########
|
95
|
-
#
|
96
|
-
# # Request to launch a number of instances
|
97
|
-
# def request_launch_new_instances(num=1)
|
98
|
-
# out = []
|
99
|
-
# num.times {out << launch_new_instance!(options) }
|
100
|
-
# out
|
101
|
-
# end
|
102
|
-
# def request_launch_master_instance
|
103
|
-
# @inst = launch_new_instance!
|
104
|
-
# wait "5.seconds"
|
105
|
-
# when_no_pending_instances do
|
106
|
-
# vputs "Master has launched"
|
107
|
-
# reset!
|
108
|
-
# after_launch_master(@inst)
|
109
|
-
# end
|
110
|
-
# end
|
111
|
-
#
|
112
|
-
#
|
113
|
-
# def after_launch_master(inst=nil)
|
114
|
-
# vputs "After launch master in remoter"
|
115
|
-
# end
|
116
|
-
# # Let's terminate an instance that is not the master instance
|
117
|
-
# def request_termination_of_non_master_instance
|
118
|
-
# inst = nonmaster_nonterminated_instances.last
|
119
|
-
# terminate_instance!(inst.instance_id) if inst
|
120
|
-
# end
|
121
|
-
# # Can we start a new instance?
|
122
|
-
# def can_start_a_new_instance?
|
123
|
-
# maximum_number_of_instances_are_not_running? && list_of_pending_instances.size == 0
|
124
|
-
# end
|
125
|
-
# # Are the maximum number of instances not running?
|
126
|
-
# def maximum_number_of_instances_are_not_running?
|
127
|
-
# nodes(:status => "running").size < maximum_instances.to_i
|
128
|
-
# end
|
129
|
-
# # Are the maximum number of instances running?
|
130
|
-
# def maximum_number_of_instances_are_running?
|
131
|
-
# nodes(:status => "running").size >= maximum_instances.to_i
|
132
|
-
# end
|
133
|
-
# # Launch new instance while waiting for the number of pending instances
|
134
|
-
# # to be zero before actually launching. This ensures that we only
|
135
|
-
# # launch one instance at a time
|
136
|
-
# def request_launch_one_instance_at_a_time
|
137
|
-
# when_no_pending_instances { launch_new_instance! }
|
138
|
-
# end
|
139
|
-
#
|
140
|
-
# # A convenience method for waiting until all the instances have an ip
|
141
|
-
# # assigned to them. This is useful when shifting the ip addresses
|
142
|
-
# # around on the instances
|
143
|
-
# def when_all_assigned_ips(&block)
|
144
|
-
# reset!
|
145
|
-
# if list_of_nonterminated_instances.select {|a| a.ip == 'not.assigned' }.empty?
|
146
|
-
# block.call if block
|
147
|
-
# else
|
148
|
-
# vprint "."
|
149
|
-
# wait "5.seconds"
|
150
|
-
# when_all_assigned_ips(&block)
|
151
|
-
# end
|
152
|
-
# end
|
153
|
-
# def running_instance_ips
|
154
|
-
# remote_instances_list.select {|inst|
|
155
|
-
# inst.running? and inst.ip!='not.assigned'
|
156
|
-
# }.collect{|n| n.ip}
|
157
|
-
# end
|
158
|
-
#
|
159
|
-
# # This will launch the minimum_instances if the minimum number of instances are not running
|
160
|
-
# # If the minimum number of instances are not running and if we can start a new instance
|
161
|
-
# def launch_minimum_number_of_instances
|
162
|
-
# if can_start_a_new_instance? && !minimum_number_of_instances_are_running?
|
163
|
-
# list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
|
164
|
-
# reset!
|
165
|
-
# launch_minimum_number_of_instances
|
166
|
-
# provision_slaves_from_n(minimum_instances.to_i)
|
167
|
-
# after_launched
|
168
|
-
# end
|
169
|
-
# end
|
170
|
-
#
|
171
|
-
# def provision_slaves_from_n(num=1)
|
172
|
-
# vputs "In provision_slaves_from_n: #{num}"
|
173
|
-
# reset!
|
174
|
-
# when_no_pending_instances do
|
175
|
-
# vputs "Waiting for 10 seconds"
|
176
|
-
# wait "10.seconds" # Give some time for ssh to startup
|
177
|
-
# @num_instances = nodes(:status => "running").size
|
178
|
-
# vputs "(@num_instances - (num))..(@num_instances): #{(@num_instances - (num))..(@num_instances)}"
|
179
|
-
# last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
|
180
|
-
# last_instances.each do |inst|
|
181
|
-
# vputs "Provision slave: #{inst}"
|
182
|
-
# verbose ? provisioner_for(inst).install(testing) : hide_output { provisioner_for(inst).install(testing)}
|
183
|
-
# end
|
184
|
-
# # PoolParty::Provisioner.reconfigure_master(self)
|
185
|
-
# end
|
186
|
-
# end
|
187
14
|
|
188
15
|
def list_of_nodes_exceeding_minimum_runtime
|
189
16
|
nodes(:status => "running").reject{|i| i.elapsed_runtime < minimum_runtime}
|
@@ -192,10 +19,6 @@ module PoolParty
|
|
192
19
|
def are_any_nodes_exceeding_minimum_runtime?
|
193
20
|
!list_of_nodes_exceeding_minimum_runtime.blank?
|
194
21
|
end
|
195
|
-
# Is there a node that is running with the name master
|
196
|
-
def is_master_running?
|
197
|
-
!nodes(:status => "running").select {|a| a.name == "master"}.first.nil?
|
198
|
-
end
|
199
22
|
|
200
23
|
end
|
201
24
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require "#{::File.dirname(__FILE__)}/../../modules/pinger"
|
2
1
|
require 'rubygems'
|
3
2
|
require 'net/ssh'
|
4
3
|
|
@@ -10,7 +9,7 @@ module PoolParty
|
|
10
9
|
def target_host(dns_or_ip=nil)
|
11
10
|
dns_or_ip ? @target_host=dns_or_ip : @target_host
|
12
11
|
end
|
13
|
-
|
12
|
+
|
14
13
|
# Simply shell out and call ssh, simple, reliable and fewest dependencies, but slow
|
15
14
|
def simplest_run_remote(host=target_host, command=[], extra_ssh_ops={})
|
16
15
|
command = command.compact.join(' && ') if command.is_a? Array
|
@@ -23,9 +22,10 @@ module PoolParty
|
|
23
22
|
netssh hst, cmds
|
24
23
|
end
|
25
24
|
|
26
|
-
def ssh_into(inst, extra_ssh_ops={}
|
25
|
+
def ssh_into(inst, extra_ssh_ops={})
|
27
26
|
ip = ((inst.respond_to?(:has_key) && inst.has_key?(:ip)) || inst.respond_to?(:ip)) ? inst.ip : inst
|
28
|
-
|
27
|
+
cmd = extra_ssh_ops.delete(:cmd) if extra_ssh_ops.has_key?(:cmd)
|
28
|
+
Kernel.system("ssh #{ssh_options(extra_ssh_ops)} #{ip}%s" % [cmd ? " #{cmd}" : ""])
|
29
29
|
end
|
30
30
|
|
31
31
|
def ssh_options(opts={})
|
@@ -35,19 +35,20 @@ module PoolParty
|
|
35
35
|
}.merge(opts)
|
36
36
|
o.collect{ |k,v| "#{k} #{v}"}.join(' ')
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def rsync( source_path, destination_path, rsync_opts=['-v -a'] )
|
40
40
|
dputs "rsync -e 'ssh #{ssh_options}' #{rsync_opts.join(' ')} #{source_path} root@#{target_host}:#{destination_path}"
|
41
41
|
out = %x{ rsync -e 'ssh #{ssh_options}' #{rsync_opts.join(' ')} #{source_path} root@#{target_host}:#{destination_path} }
|
42
42
|
puts out if debugging?
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
|
+
# Run commands on the local machine, i.e. your laptop, not the server
|
45
46
|
def run_local(commands)
|
46
47
|
commands.each do |cmd|
|
47
48
|
puts `#{cmd}`
|
48
49
|
end
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
def commands
|
52
53
|
@commands ||= Array.new
|
53
54
|
end
|
@@ -61,16 +62,20 @@ module PoolParty
|
|
61
62
|
end
|
62
63
|
|
63
64
|
def netssh(cmds=[], opts={})
|
64
|
-
user = opts.delete(:user) || user
|
65
|
+
user = opts.delete(:user) || 'root' #user rescue 'root'
|
65
66
|
host = opts.delete(:host) || target_host
|
66
|
-
ssh_options_hash = {:keys
|
67
|
+
ssh_options_hash = {:keys => [keypair.full_filepath],
|
67
68
|
:auth_methods => 'publickey',
|
68
|
-
:paranoid
|
69
|
+
:paranoid => false,
|
70
|
+
:timeout => 3.minutes,
|
71
|
+
:user => user
|
69
72
|
}.merge(opts)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
+
# ssh_options_hash[:verbose]=:debug if debugging?
|
74
|
+
puts "connecting to ssh with options = #{ssh_options_hash.inspect}"
|
75
|
+
|
76
|
+
Net::SSH.start(host, user, ssh_options_hash) do |ssh|
|
73
77
|
cmds.each do |command|
|
78
|
+
$stderr.print command if debugging
|
74
79
|
ssh.exec!(command) do |ch, stream, data|
|
75
80
|
if stream == :stdout
|
76
81
|
print data
|
@@ -83,7 +88,7 @@ module PoolParty
|
|
83
88
|
end
|
84
89
|
|
85
90
|
|
86
|
-
|
91
|
+
##########################################################################################
|
87
92
|
# TODO: Delete deprecated commands below here
|
88
93
|
|
89
94
|
def rsync_storage_files_to_command(remote_instance)
|