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
@@ -1,4 +1,3 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/plugin_model"
|
2
1
|
require File.dirname(__FILE__) + "/resource"
|
3
2
|
|
4
3
|
module PoolParty
|
@@ -16,30 +15,43 @@ module PoolParty
|
|
16
15
|
# TODO: Deprecate
|
17
16
|
def with_cloud(cl, opts={}, &block)
|
18
17
|
raise CloudNotFoundException.new("Cloud not found") unless cl
|
19
|
-
cl.
|
18
|
+
cl.dsl_options.merge!(opts) if opts
|
20
19
|
cl.run_in_context &block if block
|
21
20
|
end
|
22
21
|
|
23
22
|
class Cloud < PoolParty::PoolPartyBaseClass
|
24
23
|
attr_reader :templates, :cloud_name, :remote_base
|
24
|
+
attr_accessor :started_instance, :running_action
|
25
|
+
|
26
|
+
# Default set of options. Most take the Default options from the default class
|
27
|
+
default_options(
|
28
|
+
{
|
29
|
+
:expand_when => Default.expand_when,
|
30
|
+
:contract_when => Default.contract_when,
|
31
|
+
:minimum_instances => 2,
|
32
|
+
:maximum_instances => 5,
|
33
|
+
:ec2_dir => ENV["EC2_HOME"],
|
34
|
+
:minimum_runtime => Default.minimum_runtime,
|
35
|
+
# :dependency_resolver => ChefResolver,
|
36
|
+
:remoter_base => Default.remoter_base,
|
37
|
+
:keypair => nil,
|
38
|
+
:keypair_path => nil,
|
39
|
+
:keypair_name => nil
|
40
|
+
}.merge(Remote::Ec2.default_options)
|
41
|
+
)
|
25
42
|
|
26
43
|
include CloudResourcer
|
27
|
-
include PoolParty::PluginModel
|
28
44
|
include PoolParty::Resources
|
29
45
|
include PoolParty::Callbacks
|
30
46
|
include PoolParty::DependencyResolverCloudExtensions
|
31
47
|
include PrettyPrinter
|
32
48
|
|
33
49
|
# Net methods
|
34
|
-
include
|
50
|
+
include PoolParty::Remote
|
35
51
|
include PoolParty::CloudDsl
|
36
52
|
include PoolParty::Verification
|
37
53
|
# include PoolParty::Monitors
|
38
54
|
|
39
|
-
def verbose
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
55
|
def self.immutable_methods
|
44
56
|
[:name]
|
45
57
|
end
|
@@ -51,27 +63,28 @@ module PoolParty
|
|
51
63
|
|
52
64
|
alias :name :cloud_name
|
53
65
|
|
54
|
-
# Call the remoter commands on the
|
55
|
-
# This gives the cloud access to the remote_base's methods
|
66
|
+
# Call the remoter commands on the remoter_base if they don't exist on the cloud itself.
|
67
|
+
# This gives the cloud access to the remote_base's methods.
|
56
68
|
def method_missing(m, *args, &block)
|
57
|
-
remote_base.respond_to?(m)
|
69
|
+
if remote_base.respond_to?(m)
|
70
|
+
remoter_opts = dsl_options.merge(remote_base.dsl_options).choose do |k,v|
|
71
|
+
remote_base.dsl_options.has_key?(k)
|
72
|
+
end
|
73
|
+
if args.size==1 && args.first.respond_to?(:merge)
|
74
|
+
new_args = [remoter_opts.merge(args.first)]
|
75
|
+
else
|
76
|
+
new_args = args.push(remoter_opts)
|
77
|
+
end
|
78
|
+
remote_base.send(m, *(new_args), &block)
|
79
|
+
else
|
80
|
+
super
|
81
|
+
end
|
58
82
|
end
|
59
83
|
|
60
|
-
# Default set of options. Most take the Default options from the default class
|
61
|
-
default_options(
|
62
|
-
:expand_when => Default.expand_when,
|
63
|
-
:contract_when => Default.contract_when,
|
64
|
-
:minimum_instances => 2,
|
65
|
-
:maximum_instances => 5,
|
66
|
-
:access_key => Default.access_key,
|
67
|
-
:secret_access_key => Default.secret_access_key,
|
68
|
-
:ec2_dir => ENV["EC2_HOME"],
|
69
|
-
:minimum_runtime => Default.minimum_runtime,
|
70
|
-
:user => Default.user
|
71
|
-
)
|
72
|
-
|
73
84
|
additional_callbacks [
|
74
|
-
"after_launch_instance"
|
85
|
+
"after_launch_instance",
|
86
|
+
"before_provision",
|
87
|
+
"after_provision"
|
75
88
|
]
|
76
89
|
|
77
90
|
# Freeze the cloud_name so we can't modify it at all, set the plugin_directory
|
@@ -80,7 +93,9 @@ module PoolParty
|
|
80
93
|
@cloud_name = name
|
81
94
|
@cloud_name.freeze
|
82
95
|
|
83
|
-
|
96
|
+
setup_callbacks
|
97
|
+
|
98
|
+
plugin_directory "#{pool_specfile ? ::File.dirname(pool_specfile) : Dir.pwd}/plugins"
|
84
99
|
before_create
|
85
100
|
super
|
86
101
|
after_create
|
@@ -91,10 +106,8 @@ module PoolParty
|
|
91
106
|
@cloud_name ||= @cloud_name ? @cloud_name : (args.empty? ? :default_cloud : args.first)
|
92
107
|
end
|
93
108
|
|
94
|
-
def before_create
|
95
|
-
|
96
|
-
(parent ? parent : self).add_poolparty_base_requirements
|
97
|
-
context_stack.pop
|
109
|
+
def before_create
|
110
|
+
add_poolparty_base_requirements
|
98
111
|
end
|
99
112
|
|
100
113
|
# Callback
|
@@ -102,7 +115,7 @@ module PoolParty
|
|
102
115
|
# here the base requirements are added as well as an empty chef recipe is called
|
103
116
|
# Also, the after_create hook on the plugins used by the cloud are called here
|
104
117
|
def after_create
|
105
|
-
::FileUtils.mkdir_p("#{
|
118
|
+
::FileUtils.mkdir_p("#{tmp_path}/dr_configure")
|
106
119
|
|
107
120
|
run_in_context do
|
108
121
|
add_optional_enabled_services
|
@@ -112,30 +125,86 @@ module PoolParty
|
|
112
125
|
|
113
126
|
plugin_store.each {|a| a.call_after_create_callbacks }
|
114
127
|
setup_defaults
|
115
|
-
|
116
|
-
|
128
|
+
end
|
129
|
+
|
130
|
+
# CALLBACKS
|
131
|
+
# To hook into the chain of processes that PoolParty uses
|
132
|
+
# when launching, bootstrapping, configuring tasks, call
|
133
|
+
# these methods in your clouds.rb.
|
134
|
+
# Example:
|
135
|
+
#
|
136
|
+
# after :bootstrap do
|
137
|
+
# stuff
|
138
|
+
# end
|
139
|
+
#
|
140
|
+
# These store the blocks into the after/before_blocks on self
|
141
|
+
# and are called as appropriate at the runtime
|
142
|
+
def after time, &block
|
143
|
+
(after_blocks[time.to_sym] ||= []) << block
|
144
|
+
end
|
145
|
+
def before time, &block
|
146
|
+
(before_blocks[time.to_sym] ||= []) << block
|
117
147
|
end
|
118
148
|
|
119
149
|
# setup defaults for the cloud
|
120
150
|
def setup_defaults
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
151
|
+
set_vars_from_options(:keypair_name => key.basename, :keypair_path => key.full_filepath) rescue nil
|
152
|
+
|
153
|
+
dsl_options[:rules] = {:expand => "#{dsl_options[:expand_when]}",
|
154
|
+
:contract => dsl_options[:contract_when]}
|
155
|
+
|
156
|
+
dependency_resolver 'chef'
|
157
|
+
using Default.remoter_base unless @remote_base
|
127
158
|
end
|
128
159
|
|
129
160
|
def after_launch_instance(inst=nil)
|
130
161
|
remote_base.send :after_launch_instance, inst
|
131
162
|
end
|
132
163
|
|
164
|
+
# Keypairs
|
165
|
+
# Use the keypair path
|
166
|
+
def keypair(*args)
|
167
|
+
if args && !args.empty?
|
168
|
+
args.each do |arg|
|
169
|
+
unless arg.nil? || _keypair_filepaths.include?(arg)
|
170
|
+
k = arg.is_a?(Key) ? arg : Key.new(arg)
|
171
|
+
_keypairs.unshift k
|
172
|
+
end
|
173
|
+
end
|
174
|
+
self.keypair
|
175
|
+
else
|
176
|
+
unless @keypair
|
177
|
+
@keypair = _keypairs.select {|key| key.exists? }.first
|
178
|
+
self.keypair_path = @keypair.full_filepath
|
179
|
+
self.keypair_name = @keypair.basename
|
180
|
+
self.keypair = @keypair
|
181
|
+
end
|
182
|
+
@keypair
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
alias :set_keypairs :keypair
|
187
|
+
alias :key :keypair
|
188
|
+
|
189
|
+
def _keypairs
|
190
|
+
@keypairs ||= [Key.new]
|
191
|
+
end
|
192
|
+
|
193
|
+
# Collect the filepaths of the already loaded keypairs
|
194
|
+
def _keypair_filepaths
|
195
|
+
_keypairs.map {|a| a.filepath }
|
196
|
+
end
|
197
|
+
|
198
|
+
#TODO: deprecate: use key.full_filepath
|
199
|
+
def full_keypair_path
|
200
|
+
@full_keypair_path ||= keypair.full_filepath
|
201
|
+
end
|
202
|
+
|
133
203
|
# provide list of public ips to get into the cloud
|
134
204
|
def ips
|
135
205
|
nodes(:status => "running").map {|ri| ri.ip }
|
136
206
|
end
|
137
207
|
|
138
|
-
# TODO: make this be a random ip, since we should not rely on it being the same each time
|
139
208
|
def ip
|
140
209
|
ips.first
|
141
210
|
end
|
@@ -171,15 +240,15 @@ module PoolParty
|
|
171
240
|
end
|
172
241
|
end
|
173
242
|
|
174
|
-
#FIXME MOVE TO
|
243
|
+
#FIXME MOVE TO DEPENDENCY RESOLVER
|
175
244
|
# Configuration files
|
176
245
|
def build_manifest
|
177
246
|
vputs "Building manifest"
|
178
247
|
@build_manifest ||= build_from_existing_file
|
179
|
-
unless @build_manifest
|
248
|
+
unless @build_manifest
|
180
249
|
props = to_properties_hash
|
181
250
|
|
182
|
-
@build_manifest =
|
251
|
+
@build_manifest = dependency_resolver.send(:compile, props, self)
|
183
252
|
end
|
184
253
|
dputs "Finished creating manifest"
|
185
254
|
@build_manifest
|
@@ -197,7 +266,7 @@ module PoolParty
|
|
197
266
|
::FileTest.file?("#{Default.base_config_directory}/poolparty.pp") ? open("#{Default.base_config_directory}/poolparty.pp").read : nil
|
198
267
|
end
|
199
268
|
|
200
|
-
def write_properties_hash(filename=::File.join(
|
269
|
+
def write_properties_hash(filename=::File.join(tmp_path, Default.properties_hash_filename) )
|
201
270
|
file_path = ::File.dirname(filename)
|
202
271
|
file_name = "#{::File.basename(filename, ::File.extname(filename))}_#{name}#{::File.extname(filename)}"
|
203
272
|
output = to_properties_hash.to_json
|
@@ -205,32 +274,126 @@ module PoolParty
|
|
205
274
|
true
|
206
275
|
end
|
207
276
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
def
|
215
|
-
|
216
|
-
poolparty_base_ruby
|
217
|
-
poolparty_base_packages
|
277
|
+
def to_hash
|
278
|
+
hsh = to_properties_hash
|
279
|
+
hsh[:options].merge!({:remote_base => remote_base.to_hash})
|
280
|
+
hsh
|
281
|
+
end
|
282
|
+
|
283
|
+
def to_h
|
284
|
+
to_hash
|
218
285
|
end
|
219
286
|
|
220
|
-
# TODO:
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
287
|
+
# TODO: test
|
288
|
+
# ruby -rrubygems -e 'require "poolparty";puts Cloud.load_from_json(open("/etc/poolparty/clouds.json").read).minimum_instances'
|
289
|
+
def self.load_from_json(str, o={})
|
290
|
+
if ::File.file?(str)
|
291
|
+
str = open(str).read
|
292
|
+
end
|
293
|
+
parsed = JSON.parse(str).symbolize_keys!
|
294
|
+
opts = parsed.options
|
295
|
+
opts["keypair"] = opts["keypair_path"] = opts["keypair_name"]
|
296
|
+
|
297
|
+
cld = Cloud.new opts.cloud_name.to_sym
|
298
|
+
cld.dsl_options.merge! opts
|
299
|
+
cld.using opts.remoter_base.to_sym, opts.remote_base
|
300
|
+
cld.dependency_resolver opts[:dependency_resolver]
|
301
|
+
|
302
|
+
#TODO: will never run
|
303
|
+
unless true || o[:full_stack]
|
304
|
+
context_stack.push cld
|
305
|
+
cld.ordered_resources = parsed.resources.map do |r|
|
306
|
+
case typ = r.delete(:pp_type)
|
307
|
+
when "plugin"
|
308
|
+
# This may become a problem on the server where the plugins
|
309
|
+
# cannot be found. TODO: Fix?!? How? Uh... fake plugin maybe?
|
310
|
+
cld.send(r[:name].gsub(/_class/, '').to_sym) do
|
311
|
+
set_vars_from_options(r)
|
312
|
+
end
|
313
|
+
else
|
314
|
+
cld.send("has_#{typ}".to_sym, r)
|
315
|
+
end
|
316
|
+
context_stack.pop
|
317
|
+
end
|
318
|
+
else
|
319
|
+
cld.ordered_resources = parsed.resources
|
225
320
|
end
|
226
|
-
|
321
|
+
cld
|
227
322
|
end
|
228
323
|
|
324
|
+
def remote_base(n=nil)
|
325
|
+
if n.nil?
|
326
|
+
@remote_base
|
327
|
+
else
|
328
|
+
@remote_base = n
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def tmp_path
|
333
|
+
Default.tmp_path / pool.name / name
|
334
|
+
end
|
335
|
+
|
229
336
|
# Reset the entire cloud
|
230
337
|
def reset!
|
231
338
|
reset_remoter_base!
|
232
339
|
@build_manifest = @describe_instances = @remote_instances_list = nil
|
233
|
-
end
|
340
|
+
end
|
341
|
+
|
342
|
+
# Call before and after configure callbacks
|
343
|
+
# on the cloud.
|
344
|
+
# These are called from the dynamically defined callback method
|
345
|
+
# call_before/after_configure/bootstrap_callbacks
|
346
|
+
# from within callbacks.rb
|
347
|
+
# If there is a callback block defined for the specific runtime
|
348
|
+
# method being called, then the appropriate callback blocks
|
349
|
+
# will be accessed and called from within the before/after_ callback
|
350
|
+
def before_bootstrap
|
351
|
+
before_blocks[:bootstrap].each {|b| b.call(self) } if before_blocks.has_key?(:bootstrap)
|
352
|
+
end
|
353
|
+
def after_bootstrap
|
354
|
+
after_blocks[:bootstrap].each {|b| b.call(self) } if after_blocks.has_key?(:bootstrap)
|
355
|
+
end
|
356
|
+
def before_provision
|
357
|
+
before_blocks[:provision].each {|b| b.call(self) } if before_blocks.has_key?(:provision)
|
358
|
+
end
|
359
|
+
def after_provision
|
360
|
+
after_blocks[:provision].each {|b| b.call(self) } if after_blocks.has_key?(:provision)
|
361
|
+
end
|
362
|
+
def before_configure
|
363
|
+
before_blocks[:configure].each {|b| b.call(self) } if before_blocks.has_key?(:configure)
|
364
|
+
end
|
365
|
+
def after_configure
|
366
|
+
after_blocks[:configure].each {|b| b.call(self) } if after_blocks.has_key?(:configure)
|
367
|
+
end
|
368
|
+
|
369
|
+
private
|
370
|
+
|
371
|
+
# Storage for the after and before callback blocks
|
372
|
+
# when calling the callbacks in the cloud. They are stored as hashes with
|
373
|
+
# and are filled with arrays of blocks during load-time
|
374
|
+
def after_blocks
|
375
|
+
@after_blocks ||= {}
|
376
|
+
end
|
377
|
+
def before_blocks
|
378
|
+
@before_blocks ||= {}
|
379
|
+
end
|
380
|
+
|
381
|
+
def pool
|
382
|
+
parent && parent.is_a?(Pool) ? parent : self
|
383
|
+
end
|
384
|
+
|
385
|
+
# Add all the poolparty requirements here
|
386
|
+
# NOTE: These are written as plugins in the lib/poolparty/plugins directory
|
387
|
+
# for examples.
|
388
|
+
# Also note that there is no block associated. This is because we have written
|
389
|
+
# all that is necessary in a method called enable
|
390
|
+
# which is called when there is no block
|
391
|
+
def add_poolparty_base_requirements
|
392
|
+
# poolparty_base_heartbeat
|
393
|
+
ruby
|
394
|
+
pool_party_base_packages
|
395
|
+
end
|
396
|
+
|
234
397
|
end
|
235
398
|
end
|
236
399
|
end
|
@@ -3,18 +3,19 @@
|
|
3
3
|
This handles user interaction, loading the parameters, etc.
|
4
4
|
=end
|
5
5
|
require "open-uri"
|
6
|
-
require "
|
6
|
+
require "fileutils"
|
7
7
|
module PoolParty
|
8
8
|
class Default
|
9
9
|
include Dslify
|
10
10
|
|
11
11
|
# def self.options
|
12
12
|
default_options(
|
13
|
+
:verbose => false,
|
13
14
|
:testing => false,
|
14
|
-
:debugging => false,
|
15
15
|
:minimum_instances => 2,
|
16
16
|
:maximum_instances => 5,
|
17
17
|
:user => "root", # This should change here
|
18
|
+
:keypair_name => nil,
|
18
19
|
:base_keypair_path => "#{ENV["HOME"]}/.ec2",
|
19
20
|
:base_ssh_path => "#{ENV["HOME"]}/.ssh",
|
20
21
|
:tmp_path => "/tmp/poolparty",
|
@@ -29,6 +30,7 @@ module PoolParty
|
|
29
30
|
:default_specfile_name => "clouds.rb",
|
30
31
|
:properties_hash_filename => "clouds.json",
|
31
32
|
:vendor_path => "#{::File.dirname(__FILE__)}/../../../vendor",
|
33
|
+
:poolparty_src_path => "#{::File.dirname(__FILE__)}/../../..",
|
32
34
|
:port => "80",
|
33
35
|
:forwarding_port => "8080",
|
34
36
|
:monitor_port => 8081,
|
@@ -36,22 +38,22 @@ module PoolParty
|
|
36
38
|
:butterfly_port => 8642,
|
37
39
|
:minimum_runtime => 3000, #50.minutes in seconds
|
38
40
|
:contract_when => "load < 0.25",
|
39
|
-
:expand_when => "load > 0.9"
|
41
|
+
:expand_when => "load > 0.9",
|
42
|
+
:ec2_dir => ENV["EC2_HOME"], #TODO: move to ec2 class
|
43
|
+
:image_id => nil,
|
44
|
+
:access_key => nil,
|
45
|
+
:secret_access_key => nil,
|
46
|
+
:remoter_base => :ec2,
|
47
|
+
:availabilty_zone => 'us-east-1a'
|
40
48
|
)
|
41
49
|
|
42
|
-
def options
|
43
|
-
default_options
|
44
|
-
end
|
45
50
|
|
46
51
|
# Class methods
|
47
52
|
class << self
|
48
53
|
def method_missing(m,*a,&block)
|
49
|
-
|
50
|
-
end
|
51
|
-
def options
|
52
|
-
default_options
|
54
|
+
dsl_options.include?(m) ? dsl_options[m] : super
|
53
55
|
end
|
54
|
-
# Get the access_key
|
56
|
+
# # Get the access_key
|
55
57
|
def access_key
|
56
58
|
@access_key ||= load_access_keys_from_environment_var || load_keys_from_file[:access_key]
|
57
59
|
end
|
@@ -72,11 +74,14 @@ module PoolParty
|
|
72
74
|
end
|
73
75
|
# Store the keys in a yaml format to give the master access
|
74
76
|
# So that the master has access to the files
|
75
|
-
def store_keys_in_file
|
77
|
+
def store_keys_in_file(f=nil)
|
76
78
|
unless access_key.nil? || secret_access_key.nil?
|
77
|
-
write_to_file(
|
79
|
+
write_to_file( (f ? f : key_file_locations.first), keys_in_yaml)
|
78
80
|
end
|
79
81
|
end
|
82
|
+
def keys_in_yaml
|
83
|
+
YAML::dump({:access_key => access_key, :secret_access_key => secret_access_key})
|
84
|
+
end
|
80
85
|
def store_keys_in_file_for(obj=nil)
|
81
86
|
if obj
|
82
87
|
@access_key = obj.access_key
|
@@ -98,7 +103,9 @@ module PoolParty
|
|
98
103
|
[
|
99
104
|
".ppkeys",
|
100
105
|
"#{Default.base_config_directory}/.ppkeys",
|
101
|
-
"#{Default.storage_directory}/ppkeys",
|
106
|
+
"#{Default.storage_directory}/ppkeys",
|
107
|
+
"#{ENV["HOME"]}/.ssh/ppkeys",
|
108
|
+
"#{ENV["HOME"]}/.ssh/.ppkeys",
|
102
109
|
"~/.ppkeys",
|
103
110
|
"ppkeys"
|
104
111
|
]
|
@@ -117,7 +124,7 @@ module PoolParty
|
|
117
124
|
"/var/poolparty"
|
118
125
|
].select do |dir|
|
119
126
|
dir if viable_directory?(dir)
|
120
|
-
end.first || ::File.join( "/tmp/poolparty")
|
127
|
+
end.first || ::File.join( "/tmp/poolparty/#{name}")
|
121
128
|
end
|
122
129
|
def logger_location
|
123
130
|
[
|
@@ -3,6 +3,8 @@
|
|
3
3
|
=end
|
4
4
|
module PoolParty
|
5
5
|
class Key
|
6
|
+
include SearchablePaths
|
7
|
+
has_searchable_paths(:dirs => ["/", "keys"], :prepend_paths => ["#{ENV["HOME"]}/.ssh"])
|
6
8
|
|
7
9
|
attr_accessor :filepath
|
8
10
|
|
@@ -24,10 +26,25 @@ module PoolParty
|
|
24
26
|
# Returns the full_filepath of the key. If a full filepath is passed, we just return the expanded filepath
|
25
27
|
# for the keypair, otherwise query where it is against known locations
|
26
28
|
def full_filepath
|
27
|
-
@full_filepath ||= ::File.file?(::File.expand_path(filepath)) ? ::File.expand_path(filepath) : search_in_known_locations
|
29
|
+
@full_filepath ||= ::File.file?(::File.expand_path(filepath)) ? ::File.expand_path(filepath) : search_in_known_locations(filepath)
|
28
30
|
end
|
29
31
|
alias :to_s :full_filepath
|
30
32
|
|
33
|
+
#TODO: gracefully handle the case when a passpharase is needed
|
34
|
+
# Generate a public key from the private key
|
35
|
+
def public_key
|
36
|
+
if !@public_key_string || @public_key_string.empty?
|
37
|
+
@public_key_string = `ssh-keygen -y -f #{full_filepath}`
|
38
|
+
raise 'Unable to generate public_key_string' if @public_key_string.empty?
|
39
|
+
else
|
40
|
+
@public_key_string
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def public_key=(str)
|
45
|
+
@public_key_string = str
|
46
|
+
end
|
47
|
+
|
31
48
|
# Basename of the keypair
|
32
49
|
def basename
|
33
50
|
@basename ||= ::File.basename(full_filepath, ::File.extname(full_filepath)) rescue filepath
|
@@ -38,39 +55,13 @@ module PoolParty
|
|
38
55
|
@filename ||= ::File.basename(full_filepath) rescue filepath
|
39
56
|
end
|
40
57
|
|
41
|
-
# Search for the key in default locations with the entire filepath
|
42
|
-
# if the file exists. If it doesn't exist in the default locations,
|
43
|
-
# then it returns nil and assumes we it doesn't exist
|
44
|
-
def search_in_known_locations
|
45
|
-
self.class.keypair_paths.each do |path|
|
46
|
-
full_path = ::File.join( ::File.expand_path(path), ::File.basename(filepath))
|
47
|
-
return full_path if ::File.exists?(full_path)
|
48
|
-
end
|
49
|
-
# raise Exception.new("We cannot continue without a keypair. Please define a keypair in your clouds.rb")
|
50
|
-
# TODO: Add raise for keypair
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
|
54
|
-
# Default locations to search for the key
|
55
|
-
def self.keypair_paths
|
56
|
-
[
|
57
|
-
"#{ENV["HOME"]}/.ssh",
|
58
|
-
"#{Default.poolparty_home_path}/keys",
|
59
|
-
PoolParty::Default.base_keypair_path,
|
60
|
-
PoolParty::Default.base_config_directory,
|
61
|
-
PoolParty::Default.base_ssh_path,
|
62
|
-
PoolParty::Default.remote_storage_path,
|
63
|
-
Dir.pwd
|
64
|
-
]
|
65
|
-
end
|
66
|
-
|
67
58
|
# Support to add the enumerable each to keys
|
68
59
|
def each
|
69
60
|
yield full_filepath
|
70
61
|
end
|
71
62
|
|
72
63
|
# Turn the keypair into the a useful json string
|
73
|
-
def
|
64
|
+
def to_hash
|
74
65
|
"{\"basename\":\"#{basename}\",\"full_filepath\": \"/etc/poolparty/#{filename}\"}"
|
75
66
|
end
|
76
67
|
|
@@ -10,7 +10,7 @@ require "#{::File.dirname(__FILE__)}/../schema"
|
|
10
10
|
|
11
11
|
module PoolParty
|
12
12
|
class Neighborhoods
|
13
|
-
include ::PoolParty::Pinger
|
13
|
+
include ::PoolParty::Pinger
|
14
14
|
attr_reader :schema
|
15
15
|
|
16
16
|
# Create a neighborhood from a string, array or hash given.
|
@@ -20,7 +20,7 @@ module PoolParty
|
|
20
20
|
when Array
|
21
21
|
{:instances => data.map {|entry| disect(entry) }}
|
22
22
|
when String
|
23
|
-
|
23
|
+
JSON.parse(data)#.map "#{inst["instance_id"]}\t#{inst["ip"]}"}}
|
24
24
|
when Hash
|
25
25
|
data
|
26
26
|
end
|
@@ -30,7 +30,7 @@ module PoolParty
|
|
30
30
|
|
31
31
|
# Get the known instances from the neighborhood.json file on the server
|
32
32
|
def instances
|
33
|
-
@instances ||= @schema.to_hash[:instances] rescue @schema.instances.collect {|line| disect(line) }
|
33
|
+
@instances ||= @schema.to_hash[:instances] #rescue @schema.instances.collect {|line| disect(line) }
|
34
34
|
end
|
35
35
|
|
36
36
|
# Returns empty if the neighborhood has no instances
|
@@ -92,9 +92,20 @@ module PoolParty
|
|
92
92
|
new( open("/etc/poolparty/neighborhood.json").read )
|
93
93
|
elsif ping_port("127.0.0.1", Default.butterfly_port, 1)# butterfly responding?
|
94
94
|
require "open-uri"
|
95
|
-
|
95
|
+
begin
|
96
|
+
timeout(2) do
|
97
|
+
new( open("http://127.0.0.1:8642/neighborhood").read )
|
98
|
+
end
|
99
|
+
rescue TimeoutError => e
|
100
|
+
require "#{::File.dirname(__FILE__)}/../../poolparty"
|
101
|
+
cld = ::PoolParty::Cloud::Cloud.load_from_json(open("/etc/poolparty/clouds.json").read)
|
102
|
+
nodes = cld.nodes({:status => "running"}, false)
|
103
|
+
data = nodes.map {|hsh| hsh.reject {|k,v| v.nil? }}.map {|a| a.merge(:launching_time => a[:launching_time].to_s) }
|
104
|
+
# ::File.open("/etc/poolparty/neighborhood.json", "w") {|f| f << "{\"instances\":#{data.to_json}}" }
|
105
|
+
new(data)
|
106
|
+
end
|
96
107
|
else
|
97
|
-
new("[]")
|
108
|
+
new("{\"instances\":[]}")
|
98
109
|
end
|
99
110
|
end
|
100
111
|
|