poolparty 0.2.84 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -0
- data/License.txt +1 -1
- data/PostInstall.txt +1 -1
- data/README.txt +13 -22
- data/Rakefile +26 -35
- data/VERSION.yml +4 -0
- data/bin/cloud +24 -3
- data/bin/cloud-bootstrap +31 -0
- data/bin/cloud-configure +36 -20
- data/bin/{pool-console → cloud-console} +0 -0
- data/bin/cloud-contract +7 -7
- data/bin/cloud-describe +28 -0
- data/bin/cloud-expand +13 -6
- data/bin/cloud-handle-load +3 -3
- data/bin/cloud-list +9 -14
- data/bin/cloud-osxcopy +6 -5
- data/bin/cloud-provision +17 -22
- data/bin/cloud-setup-dev +11 -11
- data/bin/cloud-show +28 -0
- data/bin/cloud-spec +2 -2
- data/bin/cloud-ssh +10 -3
- data/bin/cloud-start +21 -23
- data/bin/cloud-terminate +15 -7
- data/bin/cloud-verify +32 -0
- data/bin/install-poolparty +216 -0
- data/bin/server-butterfly +25 -0
- data/bin/server-cloud-elections +37 -0
- data/bin/server-ensure-provisioning +33 -0
- data/bin/server-get-load +9 -12
- data/bin/server-list-active +25 -12
- data/bin/server-manage-election +67 -0
- data/bin/server-monitor.ru +42 -0
- data/bin/server-query-agent +15 -0
- data/bin/server-rerun +1 -1
- data/bin/server-write-new-nodes +2 -2
- data/config/jeweler.rb +52 -0
- data/config/requirements.rb +1 -9
- data/examples/basic.rb +10 -10
- data/examples/deploy.rb +5 -0
- data/examples/fairchild.rb +28 -0
- data/examples/fairchild_chef.rb +19 -0
- data/examples/maize.rb +37 -0
- data/examples/paparazzi.conf.erb +21 -0
- data/generators/poolspec/poolspec_generator.rb +1 -9
- data/generators/poolspec/templates/pool_spec_template.erb +0 -1
- data/lib/poolparty/{aska/aska.rb → aska.rb} +19 -28
- data/lib/poolparty/base_packages/haproxy.rb +48 -31
- data/lib/poolparty/base_packages/heartbeat.rb +6 -62
- data/lib/poolparty/base_packages/poolparty.rb +5 -105
- data/lib/poolparty/base_packages/ruby.rb +4 -4
- data/lib/poolparty/base_packages/runit.rb +1 -1
- data/lib/poolparty/core/array.rb +21 -3
- data/lib/poolparty/core/hash.rb +45 -10
- data/lib/poolparty/core/kernel.rb +30 -8
- data/lib/poolparty/core/nil.rb +8 -0
- data/lib/poolparty/core/object.rb +34 -25
- data/lib/poolparty/core/ordered_hash.rb +99 -0
- data/lib/poolparty/core/string.rb +112 -15
- data/lib/poolparty/core/symbol.rb +10 -0
- data/lib/poolparty/dependencies.rb +49 -0
- data/lib/poolparty/dependency_resolver/chef_resolver.rb +237 -0
- data/lib/poolparty/dependency_resolver/dependency_resolver.rb +42 -0
- data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +29 -0
- data/lib/poolparty/{dependency_resolutions → dependency_resolver}/puppet.rb +34 -29
- data/lib/poolparty/dependency_resolver/puppet_resolver.rb +188 -0
- data/lib/poolparty/exceptions/MasterException.rb +2 -2
- data/lib/poolparty/exceptions/RemoteException.rb +1 -1
- data/lib/poolparty/exceptions/dependency_resolver_exception.rb +5 -0
- data/lib/poolparty/exceptions/package_exception.rb +7 -0
- data/lib/poolparty/extra/deployments.rb +7 -7
- data/lib/poolparty/helpers/binary.rb +26 -32
- data/lib/poolparty/helpers/console.rb +1 -1
- data/lib/poolparty/helpers/display.rb +1 -5
- data/lib/poolparty/helpers/hash_printer.rb +44 -0
- data/lib/poolparty/helpers/loading.rb +4 -0
- data/lib/poolparty/helpers/optioner.rb +39 -25
- data/lib/poolparty/lite.rb +30 -0
- data/lib/poolparty/modules/callbacks.rb +44 -0
- data/lib/poolparty/modules/cloud_dsl.rb +38 -8
- data/lib/poolparty/modules/cloud_resourcer.rb +67 -97
- data/lib/poolparty/modules/daemonizable.rb +141 -0
- data/lib/poolparty/modules/definable_resource.rb +8 -14
- data/lib/poolparty/modules/file_writer.rb +25 -17
- data/lib/poolparty/modules/pinger.rb +28 -0
- data/lib/poolparty/modules/pretty_printer.rb +1 -1
- data/lib/poolparty/modules/resourcing_dsl.rb +55 -40
- data/lib/poolparty/modules/searchable_paths.rb +91 -0
- data/lib/poolparty/modules/thread_pool.rb +107 -106
- data/lib/poolparty/modules/user_helpers.rb +20 -0
- data/lib/poolparty/monitors/base_monitor.rb +18 -75
- data/lib/poolparty/monitors/monitor_rack.rb +123 -0
- data/lib/poolparty/monitors/monitors/favicon_monitor.rb +12 -0
- data/lib/poolparty/monitors/monitors/load_monitor.rb +9 -0
- data/lib/poolparty/monitors/monitors/memory_monitor.rb +9 -9
- data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +77 -0
- data/lib/poolparty/monitors/monitors/stats_monitor.rb +187 -0
- data/lib/poolparty/monitors/monitors/time_monitor.rb +15 -0
- data/lib/poolparty/net/init.rb +10 -0
- data/lib/poolparty/net/remote_bases.rb +20 -0
- data/lib/poolparty/net/remote_instance.rb +26 -44
- data/lib/poolparty/net/remoter/cloud_control.rb +24 -0
- data/lib/poolparty/net/remoter/connections.rb +172 -0
- data/lib/poolparty/net/remoter/interactive.rb +45 -0
- data/lib/poolparty/net/remoter_base.rb +116 -111
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +245 -0
- data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +53 -0
- data/lib/poolparty/net/{remote_bases → remoter_bases}/ec2/ec2_response_object.rb +2 -4
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +12 -0
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +33 -0
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -0
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +158 -0
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +71 -0
- data/lib/poolparty/plugins/apache2/apache.rb +340 -0
- data/lib/poolparty/plugins/bind.rb +11 -0
- data/lib/poolparty/plugins/chef.rb +173 -0
- data/lib/poolparty/plugins/chef_deploy.rb +58 -0
- data/lib/poolparty/plugins/deploy_directory.rb +49 -0
- data/lib/poolparty/plugins/gem_package.rb +61 -0
- data/lib/poolparty/plugins/git.rb +41 -24
- data/lib/poolparty/plugins/line_in_file.rb +30 -0
- data/lib/poolparty/plugins/nanite.rb +41 -0
- data/lib/poolparty/plugins/rails_deploy.rb +76 -0
- data/lib/poolparty/plugins/svn.rb +56 -39
- data/lib/poolparty/poolparty/cloud.rb +137 -167
- data/lib/poolparty/poolparty/{base.rb → default.rb} +62 -25
- data/lib/poolparty/poolparty/key.rb +78 -0
- data/lib/poolparty/poolparty/loggable.rb +28 -27
- data/lib/poolparty/poolparty/neighborhoods.rb +102 -0
- data/lib/poolparty/poolparty/plugin.rb +53 -18
- data/lib/poolparty/poolparty/plugin_model.rb +20 -23
- data/lib/poolparty/poolparty/pool.rb +34 -26
- data/lib/poolparty/poolparty/poolparty_base_class.rb +190 -0
- data/lib/poolparty/poolparty/resource.rb +92 -178
- data/lib/poolparty/poolparty/script.rb +32 -20
- data/lib/poolparty/poolparty/service.rb +44 -0
- data/lib/poolparty/poolparty/template.rb +27 -0
- data/lib/poolparty/provision/boot_strapper.rb +164 -0
- data/lib/poolparty/provision/configurations/chef.rb +26 -0
- data/lib/poolparty/provision/configurations/puppet.rb +28 -0
- data/lib/poolparty/provision/dr_configure.rb +142 -0
- data/lib/poolparty/resources/cron.rb +51 -0
- data/lib/poolparty/resources/directory.rb +36 -0
- data/lib/poolparty/resources/exec.rb +47 -0
- data/lib/poolparty/resources/file.rb +73 -0
- data/lib/poolparty/resources/host.rb +37 -0
- data/lib/poolparty/resources/mount.rb +45 -0
- data/lib/poolparty/resources/package.rb +41 -0
- data/lib/poolparty/resources/remote_file.rb +52 -0
- data/lib/poolparty/resources/service.rb +41 -0
- data/lib/poolparty/resources/sshkey.rb +49 -0
- data/lib/poolparty/resources/symlink.rb +43 -0
- data/lib/poolparty/{poolparty/resources/remote_user.rb → resources/user.rb} +1 -5
- data/lib/poolparty/resources/variable.rb +34 -0
- data/lib/poolparty/resources.rb +42 -0
- data/lib/poolparty/schema.rb +79 -0
- 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/erlang_cookie_maker +6 -0
- data/lib/poolparty/templates/gemrc_template +11 -0
- data/lib/poolparty/templates/ha.cf +1 -1
- data/lib/poolparty/templates/haproxy.conf +29 -27
- data/lib/poolparty/templates/haresources +2 -2
- data/lib/poolparty/templates/monitor.ru +16 -0
- data/lib/poolparty/templates/php.ini.erb +1253 -0
- data/lib/poolparty/templates/puppet/add_puppet_to_hosts +6 -0
- data/lib/poolparty/templates/puppet/puppet.conf +2 -0
- data/lib/poolparty/templates/puppet/puppetrunner +14 -0
- data/lib/poolparty/templates/puppet/site.pp +4 -0
- data/lib/poolparty/templates/puppetrunner +11 -5
- data/lib/poolparty/verification/verifier_base.rb +17 -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 +34 -0
- data/lib/poolparty/verification/verify.rb +76 -0
- data/lib/poolparty.rb +76 -22
- data/lib/poolpartycl.rb +66 -1
- data/script/destroy +1 -1
- data/script/generate +1 -1
- data/spec/bin/bin_spec_helper.rb +7 -0
- data/spec/bin/fixtures/bin_cloud_for_test.rb +13 -0
- data/spec/bin/server-list-active_spec.rb +24 -0
- data/spec/poolparty/aska/aska_spec.rb +5 -5
- data/spec/poolparty/base_packages/haproxy_spec.rb +2 -8
- data/spec/poolparty/base_packages/heartbeat_spec.rb +3 -26
- data/spec/poolparty/bin/console_spec.rb +11 -29
- data/spec/poolparty/core/array_spec.rb +20 -3
- data/spec/poolparty/core/hash_spec.rb +30 -28
- data/spec/poolparty/core/object_spec.rb +2 -3
- data/spec/poolparty/core/ordered_hash_spec.rb +48 -0
- data/spec/poolparty/core/string_spec.rb +1 -27
- data/spec/poolparty/dependencies_spec.rb +11 -0
- data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +107 -0
- data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +122 -0
- data/spec/poolparty/dependency_resolver/dependency_resolver_spec.rb +16 -0
- data/spec/poolparty/dependency_resolver/puppet_resolver_spec.rb +121 -0
- data/spec/poolparty/extra/deployments_spec.rb +9 -5
- data/spec/poolparty/fixtures/clouds.json +128 -0
- data/spec/poolparty/fixtures/test_template.erb +1 -0
- data/spec/poolparty/helpers/binary_spec.rb +1 -1
- data/spec/poolparty/helpers/hash_printer_spec.rb +34 -0
- data/spec/poolparty/helpers/optioner_spec.rb +1 -1
- data/spec/poolparty/id_rsa +27 -0
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +26 -111
- data/spec/poolparty/modules/definable_resource.rb +1 -1
- data/spec/poolparty/modules/file_writer_spec.rb +10 -4
- data/spec/poolparty/modules/searchable_paths_spec.rb +76 -0
- data/spec/poolparty/monitors/base_monitor_spec.rb +112 -111
- data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +18 -16
- data/spec/poolparty/monitors/monitors/memory_monitor_spec.rb +48 -47
- data/spec/poolparty/net/remote_instance_spec.rb +9 -73
- data/spec/poolparty/net/remote_spec.rb +287 -310
- data/spec/poolparty/net/remoter_base_spec.rb +3 -56
- data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +24 -0
- data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +114 -0
- data/spec/poolparty/net/{remote_bases → remoter_bases}/ec2_spec.rb +51 -53
- data/spec/poolparty/net/remoter_spec.rb +96 -86
- data/spec/poolparty/plugins/chef_spec.rb +7 -0
- data/spec/poolparty/plugins/deploydirectory_spec.rb +51 -52
- data/spec/poolparty/plugins/git_spec.rb +16 -20
- data/spec/poolparty/plugins/line_spec.rb +14 -8
- data/spec/poolparty/poolparty/cloud_spec.rb +85 -183
- data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +3 -4
- data/spec/poolparty/poolparty/configurers/ruby_spec.rb +7 -23
- data/spec/poolparty/poolparty/{base_spec.rb → default_spec.rb} +44 -41
- data/spec/poolparty/poolparty/example_spec.rb +43 -11
- data/spec/poolparty/poolparty/key_spec.rb +42 -0
- data/spec/poolparty/poolparty/neighborhoods_spec.rb +65 -0
- data/spec/poolparty/poolparty/plugin_model_spec.rb +14 -24
- data/spec/poolparty/poolparty/plugin_spec.rb +25 -96
- data/spec/poolparty/poolparty/pool_spec.rb +3 -1
- data/spec/poolparty/poolparty/resource_spec.rb +70 -270
- data/spec/poolparty/poolparty/script_spec.rb +30 -53
- data/spec/poolparty/poolparty/service_spec.rb +5 -0
- data/spec/poolparty/poolparty/template_spec.rb +26 -0
- data/spec/poolparty/poolparty/test_plugins/webserver.rb +8 -25
- data/spec/poolparty/poolparty_base_class_spec.rb +84 -0
- data/spec/poolparty/poolparty_spec.rb +7 -4
- data/spec/poolparty/resources/cron_spec.rb +44 -0
- data/spec/poolparty/resources/directory_spec.rb +40 -0
- data/spec/poolparty/resources/exec_spec.rb +37 -0
- data/spec/poolparty/resources/file_spec.rb +64 -0
- data/spec/poolparty/resources/gem_spec.rb +7 -0
- data/spec/poolparty/resources/host_spec.rb +35 -0
- data/spec/poolparty/resources/package_spec.rb +26 -0
- data/spec/poolparty/resources/service_spec.rb +29 -0
- data/spec/poolparty/resources/sshkey_spec.rb +40 -0
- data/spec/poolparty/resources/symlink_spec.rb +29 -0
- data/spec/poolparty/resources/user_spec.rb +48 -0
- data/spec/poolparty/resources/variable_spec.rb +26 -0
- data/spec/poolparty/schema_spec.rb +53 -0
- data/spec/poolparty/spec_helper.rb +107 -23
- data/spec/poolparty/test_spec_helper.rb +13 -0
- data/tasks/development.rake +85 -69
- data/tasks/poolparty.rake +54 -0
- data/tasks/server.rake +41 -39
- data/tasks/spec.rake +35 -1
- data/test/fixtures/test_template.erb +1 -0
- data/test/poolparty/core/array_test.rb +21 -0
- data/test/poolparty/core/hash_test.rb +34 -0
- data/test/poolparty/core/string_test.rb +29 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +90 -0
- data/test/poolparty/modules/callbacks_test.rb +40 -0
- data/test/poolparty/modules/cloud_dsl_test.rb +60 -0
- data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +54 -0
- data/test/poolparty/net/remoter_test.rb +14 -0
- data/test/poolparty/poolparty/neighborhood_test.rb +23 -0
- data/test/poolparty/poolparty/poolparty_base_class_test.rb +84 -0
- data/test/poolparty/poolparty/template_test.rb +31 -0
- data/test/poolparty/provision/boot_strapper_test.rb +6 -0
- data/test/poolparty/provision/dr_configure_test.rb +6 -0
- data/test/poolparty/verification/verify_test.rb +49 -0
- data/test/test_helper.rb +8 -2
- data/test/test_poolparty.rb +6 -5
- data/vendor/chef/apache2/README.rdoc +59 -0
- data/vendor/chef/apache2/attributes/apache.rb +72 -0
- data/vendor/chef/apache2/definitions/apache_module.rb +36 -0
- data/vendor/chef/apache2/definitions/apache_site.rb +36 -0
- data/vendor/chef/apache2/definitions/web_app.rb +45 -0
- data/vendor/chef/apache2/files/default/apache2_module_conf_generate.pl +41 -0
- data/vendor/chef/apache2/recipes/default.rb +132 -0
- data/vendor/chef/apache2/recipes/mod_alias.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_auth_basic.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_auth_digest.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authn_file.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authnz_ldap.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authz_default.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authz_groupfile.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authz_host.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_authz_user.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_autoindex.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_cgi.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_dav.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_dav_svn.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_deflate.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_dir.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_env.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_expires.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_fcgid.rb +35 -0
- data/vendor/chef/apache2/recipes/mod_headers.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_ldap.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_log_config.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_mime.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_negotiation.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_php5.rb +27 -0
- data/vendor/chef/apache2/recipes/mod_proxy.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_proxy_http.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_python.rb +22 -0
- data/vendor/chef/apache2/recipes/mod_rewrite.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_setenvif.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_ssl.rb +20 -0
- data/vendor/chef/apache2/recipes/mod_status.rb +20 -0
- data/vendor/chef/apache2/templates/default/a2dismod.erb +22 -0
- data/vendor/chef/apache2/templates/default/a2dissite.erb +29 -0
- data/vendor/chef/apache2/templates/default/a2enmod.erb +37 -0
- data/vendor/chef/apache2/templates/default/a2ensite.erb +38 -0
- data/vendor/chef/apache2/templates/default/apache2.conf.erb +630 -0
- data/vendor/chef/apache2/templates/default/default-site.erb +45 -0
- data/vendor/chef/apache2/templates/default/port_apache.erb +2 -0
- data/vendor/chef/apache2/templates/default/ports.conf.erb +6 -0
- data/vendor/chef/apache2/templates/default/web_app.conf.erb +43 -0
- data/vendor/chef/chef-deploy/LICENSE +201 -0
- data/vendor/chef/chef-deploy/README.rdoc +24 -0
- data/vendor/chef/chef-deploy/Rakefile +57 -0
- data/vendor/chef/chef-deploy/TODO +4 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/cached_deploy.rb +230 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/git.rb +132 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/subversion.rb +98 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy.rb +183 -0
- data/vendor/gems/butterfly/History.txt +4 -0
- data/vendor/gems/butterfly/PostInstall.txt +2 -0
- data/vendor/gems/butterfly/README.rdoc +48 -0
- data/vendor/gems/butterfly/Rakefile +62 -0
- data/vendor/gems/butterfly/VERSION.yml +4 -0
- data/vendor/gems/butterfly/bin/flutter +4 -0
- data/vendor/gems/butterfly/butterfly.gemspec +37 -0
- data/vendor/gems/butterfly/examples/config.ru +15 -0
- data/vendor/gems/butterfly/examples/my_app.rb +12 -0
- data/vendor/gems/butterfly/lib/butterfly.rb +14 -0
- data/vendor/gems/butterfly/lib/handler.rb +48 -0
- data/vendor/gems/butterfly/lib/request.rb +29 -0
- data/vendor/gems/butterfly/lib/response.rb +49 -0
- data/vendor/gems/butterfly/script/console +10 -0
- data/vendor/gems/butterfly/script/destroy +14 -0
- data/vendor/gems/butterfly/script/generate +14 -0
- data/vendor/gems/butterfly/test/test_adapter_base.rb +23 -0
- data/vendor/gems/butterfly/test/test_butterfly_request.rb +46 -0
- data/vendor/gems/butterfly/test/test_butterfly_response.rb +43 -0
- data/vendor/gems/butterfly/test/test_butterfly_server.rb +16 -0
- data/vendor/gems/butterfly/test/test_default.rb +12 -0
- data/vendor/gems/butterfly/test/test_helper.rb +6 -0
- data/vendor/gems/dslify/History.txt +4 -0
- data/vendor/gems/dslify/Manifest.txt +25 -0
- data/vendor/gems/dslify/PostInstall.txt +5 -0
- data/vendor/gems/dslify/README.txt +60 -0
- data/vendor/gems/dslify/Rakefile +56 -0
- data/{config → vendor/gems/dslify/config}/hoe.rb +12 -55
- data/vendor/gems/dslify/config/requirements.rb +15 -0
- data/vendor/gems/dslify/dslify.gemspec +40 -0
- data/vendor/gems/dslify/lib/dslify/dslify.rb +76 -0
- data/vendor/gems/dslify/lib/dslify/version.rb +10 -0
- data/vendor/gems/dslify/lib/dslify.rb +7 -0
- data/vendor/gems/dslify/script/console +10 -0
- data/vendor/gems/dslify/script/destroy +14 -0
- data/vendor/gems/dslify/script/generate +14 -0
- data/{script → vendor/gems/dslify/script}/txt2html +4 -4
- data/{setup.rb → vendor/gems/dslify/setup.rb} +3 -3
- data/{tasks → vendor/gems/dslify/tasks}/deployment.rake +4 -18
- data/vendor/gems/dslify/tasks/environment.rake +7 -0
- data/{tasks → vendor/gems/dslify/tasks}/website.rake +0 -0
- data/vendor/gems/dslify/test/test_dslify.rb +138 -0
- data/vendor/gems/dslify/website/index.html +86 -0
- data/vendor/gems/dslify/website/index.txt +83 -0
- data/{website → vendor/gems/dslify/website}/javascripts/rounded_corners_lite.inc.js +0 -0
- data/{website → vendor/gems/dslify/website}/stylesheets/screen.css +18 -27
- data/{website → vendor/gems/dslify/website}/template.html.erb +1 -2
- 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 +61 -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 +119 -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 +102 -0
- data/vendor/gems/suitcase/test/test_dir/box.rb +1 -0
- data/vendor/gems/suitcase/test/test_dir/test.txt +1 -0
- data/vendor/gems/suitcase/test/test_helper.rb +12 -0
- metadata +370 -343
- data/Capfile +0 -1
- data/Manifest.txt +0 -414
- data/bin/cloud-add-keypair +0 -28
- data/bin/cloud-ensure-provisioning +0 -39
- data/bin/cloud-maintain +0 -30
- data/bin/cloud-refresh +0 -17
- data/bin/cloud-run +0 -18
- data/bin/cloud-stats +0 -17
- data/bin/messenger-get-current-nodes +0 -14
- data/bin/pool +0 -31
- data/bin/pool-describe +0 -8
- data/bin/pool-generate +0 -18
- data/bin/pool-init +0 -28
- data/bin/pool-list +0 -30
- data/bin/pool-start +0 -26
- data/bin/server-build-messenger +0 -27
- data/bin/server-clean-cert-for +0 -15
- data/bin/server-list-responding +0 -24
- 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/lib/erlang/messenger/Emakefile +0 -1
- data/lib/erlang/messenger/Makefile +0 -15
- data/lib/erlang/messenger/README +0 -5
- data/lib/erlang/messenger/Rakefile +0 -72
- data/lib/erlang/messenger/control +0 -11
- data/lib/erlang/messenger/ebin/client.app +0 -19
- 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 +0 -10326
- data/lib/erlang/messenger/ebin/master.app +0 -19
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/ebin/node.app +0 -19
- data/lib/erlang/messenger/ebin/node_app.beam +0 -0
- data/lib/erlang/messenger/ebin/packager.app +0 -19
- 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_rel-0.1.rel +0 -1
- 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_rel-0.1.rel +0 -1
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +0 -1
- 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/include/defines.hrl +0 -27
- data/lib/erlang/messenger/lib/eunit/AUTHORS +0 -2
- data/lib/erlang/messenger/lib/eunit/CHANGELOG +0 -14
- data/lib/erlang/messenger/lib/eunit/COPYING +0 -504
- data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
- data/lib/erlang/messenger/lib/eunit/NOTES +0 -276
- data/lib/erlang/messenger/lib/eunit/README +0 -3
- data/lib/erlang/messenger/lib/eunit/doc/edoc-info +0 -3
- data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
- data/lib/erlang/messenger/lib/eunit/doc/eunit.html +0 -172
- data/lib/erlang/messenger/lib/eunit/doc/index.html +0 -17
- data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +0 -12
- data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +0 -984
- data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +0 -980
- data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +0 -11
- data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +0 -55
- data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.app +0 -21
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +0 -1
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl +0 -339
- data/lib/erlang/messenger/lib/eunit/examples/fib.erl +0 -19
- data/lib/erlang/messenger/lib/eunit/examples/tests.txt +0 -1
- data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +0 -313
- data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
- data/lib/erlang/messenger/lib/eunit/src/autoload.erl +0 -388
- data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +0 -243
- data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +0 -21
- data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +0 -1
- data/lib/erlang/messenger/lib/eunit/src/eunit.erl +0 -196
- data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +0 -102
- data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +0 -798
- data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +0 -48
- data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +0 -682
- data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +0 -552
- data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +0 -157
- data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +0 -340
- data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +0 -64
- data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +0 -334
- data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +0 -45
- data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +0 -272
- data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +0 -409
- data/lib/erlang/messenger/lib/eunit/sys.config +0 -9
- data/lib/erlang/messenger/lib/eunit/vsn.mk +0 -1
- data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_client_rel-0.1.script +0 -238
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +0 -239
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +0 -237
- data/lib/erlang/messenger/src/client_app.erl +0 -39
- data/lib/erlang/messenger/src/client_server.erl +0 -60
- data/lib/erlang/messenger/src/master_app.erl +0 -39
- data/lib/erlang/messenger/src/node_app.erl +0 -39
- data/lib/erlang/messenger/src/pm_client.erl +0 -49
- data/lib/erlang/messenger/src/pm_client_supervisor.erl +0 -38
- data/lib/erlang/messenger/src/pm_cluster.erl +0 -61
- data/lib/erlang/messenger/src/pm_event_manager.erl +0 -27
- data/lib/erlang/messenger/src/pm_master.erl +0 -215
- data/lib/erlang/messenger/src/pm_master_event_handler.erl +0 -72
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +0 -39
- data/lib/erlang/messenger/src/pm_node.erl +0 -200
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +0 -38
- data/lib/erlang/messenger/src/pm_packager.erl +0 -76
- data/lib/erlang/messenger/src/pm_spawner.erl +0 -213
- data/lib/erlang/messenger/src/pm_strings.erl +0 -11
- data/lib/erlang/messenger/src/utils.erl +0 -73
- data/lib/erlang/messenger/useful_snippets +0 -17
- data/lib/poolparty/capistrano.rb +0 -18
- data/lib/poolparty/config/postlaunchmessage.txt +0 -5
- data/lib/poolparty/dependency_resolutions/base.rb +0 -12
- data/lib/poolparty/modules/configurable.rb +0 -36
- data/lib/poolparty/modules/method_missing_sugar.rb +0 -58
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +0 -15
- data/lib/poolparty/monitors/monitors/web_monitor.rb +0 -18
- data/lib/poolparty/net/messenger.rb +0 -72
- data/lib/poolparty/net/remote.rb +0 -38
- data/lib/poolparty/net/remote_bases/ec2.rb +0 -190
- data/lib/poolparty/net/remoter.rb +0 -343
- data/lib/poolparty/plugins/deploydirectory.rb +0 -71
- data/lib/poolparty/plugins/line.rb +0 -77
- data/lib/poolparty/plugins/rsyncmirror.rb +0 -26
- data/lib/poolparty/poolparty/custom_resource.rb +0 -45
- data/lib/poolparty/poolparty/resources/class_package.rb +0 -105
- data/lib/poolparty/poolparty/resources/conditional.rb +0 -67
- data/lib/poolparty/poolparty/resources/cron.rb +0 -14
- data/lib/poolparty/poolparty/resources/custom_service.rb +0 -30
- data/lib/poolparty/poolparty/resources/directory.rb +0 -26
- data/lib/poolparty/poolparty/resources/exec.rb +0 -28
- data/lib/poolparty/poolparty/resources/file.rb +0 -23
- data/lib/poolparty/poolparty/resources/gem_package.rb +0 -52
- data/lib/poolparty/poolparty/resources/host.rb +0 -14
- data/lib/poolparty/poolparty/resources/mount.rb +0 -22
- data/lib/poolparty/poolparty/resources/package.rb +0 -24
- data/lib/poolparty/poolparty/resources/remote_file.rb +0 -26
- data/lib/poolparty/poolparty/resources/service.rb +0 -21
- data/lib/poolparty/poolparty/resources/sshkey.rb +0 -23
- data/lib/poolparty/poolparty/resources/symlink.rb +0 -25
- data/lib/poolparty/poolparty/resources/variable.rb +0 -32
- data/lib/poolparty/provisioners/capistrano/capistrano.rb +0 -127
- data/lib/poolparty/provisioners/capistrano/capistrano_configurer.rb +0 -58
- data/lib/poolparty/provisioners/capistrano/recipies/base.rb +0 -104
- data/lib/poolparty/provisioners/capistrano/recipies/master.rb +0 -121
- data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +0 -12
- data/lib/poolparty/provisioners/provisioner_base.rb +0 -204
- data/lib/poolparty/spec/core/string.rb +0 -16
- 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/templates/puppet.conf +0 -26
- data/lib/poolparty/templates/puppetcleaner +0 -12
- data/lib/poolparty/templates/puppetrerun +0 -22
- data/lib/poolparty/version.rb +0 -9
- data/lib/poolpartyspec.rb +0 -34
- data/log/pool.log +0 -0
- data/poolparty.gemspec +0 -580
- data/spec/poolparty/dependency_resolutions/base_spec.rb +0 -11
- data/spec/poolparty/modules/configurable_spec.rb +0 -29
- data/spec/poolparty/net/log/pool.log +0 -0
- data/spec/poolparty/net/messenger_spec.rb +0 -16
- data/spec/poolparty/plugins/svn_spec.rb +0 -16
- data/spec/poolparty/poolparty/custom_resource_spec.rb +0 -120
- data/spec/poolparty/poolparty/resources/class_package_spec.rb +0 -120
- data/spec/poolparty/poolparty/resources/conditional_spec.rb +0 -77
- data/spec/poolparty/poolparty/resources/cron_spec.rb +0 -50
- data/spec/poolparty/poolparty/resources/directory_spec.rb +0 -40
- data/spec/poolparty/poolparty/resources/exec_spec.rb +0 -37
- data/spec/poolparty/poolparty/resources/file_spec.rb +0 -40
- data/spec/poolparty/poolparty/resources/gem_spec.rb +0 -46
- data/spec/poolparty/poolparty/resources/host_spec.rb +0 -28
- data/spec/poolparty/poolparty/resources/package_spec.rb +0 -44
- data/spec/poolparty/poolparty/resources/remote_file_spec.rb +0 -40
- data/spec/poolparty/poolparty/resources/service_spec.rb +0 -45
- data/spec/poolparty/poolparty/resources/sshkey_spec.rb +0 -48
- data/spec/poolparty/poolparty/resources/symlink_spec.rb +0 -22
- data/spec/poolparty/poolparty/resources/user_spec.rb +0 -38
- data/spec/poolparty/poolparty/resources/variable_spec.rb +0 -24
- data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +0 -27
- data/spec/poolparty/provisioners/provisioner_base_spec.rb +0 -120
- data/spec/poolparty/spec/core/string_spec.rb +0 -57
- data/website/index.html +0 -107
- data/website/index.txt +0 -95
- data/website/stylesheets/code.css +0 -29
|
@@ -16,149 +16,152 @@
|
|
|
16
16
|
register_remote_base :remote_base_name
|
|
17
17
|
|
|
18
18
|
=end
|
|
19
|
-
module PoolParty
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
args.each do |arg|
|
|
23
|
-
(remote_bases << "#{arg}".downcase.to_sym)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def remote_bases
|
|
28
|
-
$remote_bases ||= []
|
|
29
|
-
end
|
|
20
|
+
module PoolParty
|
|
30
21
|
|
|
31
22
|
module Remote
|
|
32
|
-
# This class is the base class for all remote types
|
|
23
|
+
# This class is the base class for all remote types, such as ec2
|
|
33
24
|
# Everything remoting-wise is derived from this class
|
|
34
|
-
|
|
25
|
+
class RemoterBase
|
|
26
|
+
include Dslify
|
|
27
|
+
include ::PoolParty::Remote
|
|
28
|
+
|
|
29
|
+
attr_reader :cloud
|
|
30
|
+
|
|
31
|
+
def initialize(prnt, opts={}, &block)
|
|
32
|
+
dsl_options prnt.options.merge(opts) if prnt && prnt.respond_to?(:options)
|
|
33
|
+
instance_eval &block if block
|
|
34
|
+
@cloud = prnt
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.inherited(arg)
|
|
38
|
+
base_name = "#{arg}".downcase.top_level_class.to_sym
|
|
39
|
+
(remote_bases << base_name) unless remote_bases.include?(base_name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# def method_missing(meth, *args, &block)
|
|
44
|
+
# if @cloud
|
|
45
|
+
# @cloud.send meth, *args, &block rescue super
|
|
46
|
+
# else
|
|
47
|
+
# super
|
|
48
|
+
# end
|
|
49
|
+
# end
|
|
50
|
+
|
|
35
51
|
# Required methods
|
|
36
52
|
# The next methods are required on all RemoteInstance types
|
|
37
53
|
# If your RemoteInstance type does not overwrite the following methods
|
|
38
54
|
# An exception will be raised and poolparty will explode into tiny little
|
|
39
55
|
# pieces. Don't forget to overwrite these methods
|
|
40
56
|
# Launch a new instance
|
|
41
|
-
def launch_new_instance!
|
|
42
|
-
|
|
57
|
+
def self.launch_new_instance!(cld, o={})
|
|
58
|
+
new(cld, o).launch_new_instance!(o)
|
|
43
59
|
end
|
|
60
|
+
def launch_new_instance!(o={})
|
|
61
|
+
raise RemoteException.new(:method_not_defined, "launch_new_instance!")
|
|
62
|
+
end
|
|
63
|
+
|
|
44
64
|
# Terminate an instance by id
|
|
45
|
-
def terminate_instance!(
|
|
65
|
+
def self.terminate_instance!(cld, o={})
|
|
66
|
+
new(cld, o).terminate_instance!(o)
|
|
67
|
+
end
|
|
68
|
+
def terminate_instance!(o={})
|
|
46
69
|
raise RemoteException.new(:method_not_defined, "terminate_instance!")
|
|
47
70
|
end
|
|
71
|
+
|
|
48
72
|
# Describe an instance's status
|
|
49
|
-
def describe_instance(
|
|
73
|
+
def self.describe_instance(cld, o={})
|
|
74
|
+
new(cld, o).describe_instance(o)
|
|
75
|
+
end
|
|
76
|
+
def describe_instance(o={})
|
|
50
77
|
raise RemoteException.new(:method_not_defined, "describe_instance")
|
|
51
78
|
end
|
|
79
|
+
|
|
52
80
|
# Get instances
|
|
53
81
|
# The instances must have a status associated with them on the hash
|
|
54
|
-
def describe_instances
|
|
82
|
+
def self.describe_instances(cld, o={})
|
|
83
|
+
new(cld, o).describe_instances(o)
|
|
84
|
+
end
|
|
85
|
+
def describe_instances(o={})
|
|
55
86
|
raise RemoteException.new(:method_not_defined, "describe_instances")
|
|
56
87
|
end
|
|
57
88
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def master
|
|
84
|
-
get_instance_by_number(0)
|
|
85
|
-
end
|
|
86
|
-
# Get instance by number
|
|
87
|
-
def get_instance_by_number(i=0, list = remote_instances_list)
|
|
88
|
-
name = (i.zero? ? "master" : "node#{i}")
|
|
89
|
-
list.select {|i| i.name == name }.first
|
|
90
|
-
end
|
|
91
|
-
# A callback before the configuration task takes place
|
|
92
|
-
def before_configuration_tasks
|
|
93
|
-
end
|
|
94
|
-
def remote_instances_list
|
|
95
|
-
@containing_cloud = self
|
|
96
|
-
# puts "> #{@containing_cloud} #{@describe_instances.nil?}"
|
|
97
|
-
list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
|
|
98
|
-
end
|
|
99
|
-
# List the instances for the current key pair, regardless of their states
|
|
100
|
-
# If no keypair is passed, select them all
|
|
101
|
-
def list_of_instances(keyp=nil)
|
|
102
|
-
tmp_key = (keyp ? keyp : keypair).to_s
|
|
103
|
-
unless @describe_instances
|
|
104
|
-
tmpInstanceList = describe_instances.select {|a| a if tmp_key ? a[:keypair] == tmp_key : true }
|
|
105
|
-
has_master = !tmpInstanceList.select {|a| a[:name] == "master" }.empty?
|
|
106
|
-
if has_master
|
|
107
|
-
@describe_instances = tmpInstanceList
|
|
108
|
-
else
|
|
109
|
-
@id = 0
|
|
110
|
-
running = select_from_instances_on_status(/running/, tmpInstanceList)
|
|
111
|
-
pending = select_from_instances_on_status(/pending/, tmpInstanceList)
|
|
112
|
-
terminated = select_from_instances_on_status(/shutting/, tmpInstanceList)
|
|
89
|
+
# TODO: Rename and modularize the @inst.status =~ /pending/ so that it works on all
|
|
90
|
+
# remoter_bases
|
|
91
|
+
def launch_instance!(o={}, &block)
|
|
92
|
+
@inst = launch_new_instance!( o )
|
|
93
|
+
sleep(2)
|
|
94
|
+
|
|
95
|
+
cloud.dputs "#{cloud.name} launched instance checking for ip..."
|
|
96
|
+
|
|
97
|
+
# Wait for 10 minutes for the instance to gain an ip if it doesn't already have one
|
|
98
|
+
500.times do |i|
|
|
99
|
+
break if @inst[:ip] =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
|
|
100
|
+
sleep(2)
|
|
101
|
+
@inst = describe_instance(@inst)
|
|
102
|
+
cloud.dprint "."
|
|
103
|
+
end
|
|
104
|
+
cloud.dputs "Found an ip"
|
|
105
|
+
cloud.dputs "#{@cloud.name} Launched instance #{@inst[:ip]}"
|
|
106
|
+
cloud.dputs " waiting for it to respond"
|
|
107
|
+
|
|
108
|
+
# Try for 10 minutes to pint port 22
|
|
109
|
+
500.times do |i|
|
|
110
|
+
cloud.dprint "."
|
|
111
|
+
if ping_port(@inst[:ip], 22)
|
|
112
|
+
cloud.dputs ""
|
|
113
|
+
cloud.started_instance = @inst
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
@id += 1
|
|
117
|
-
inst
|
|
118
|
-
end.sort_by {|a| a[:index] }
|
|
115
|
+
cloud.call_after_launch_instance_callbacks(@inst)
|
|
116
|
+
block.call(@inst) if block
|
|
119
117
|
|
|
120
|
-
@
|
|
118
|
+
return @inst
|
|
121
119
|
end
|
|
120
|
+
sleep(2)
|
|
122
121
|
end
|
|
123
|
-
|
|
124
|
-
end
|
|
125
|
-
# Select the instances based on their status
|
|
126
|
-
def select_from_instances_on_status(status=/running/, list=[])
|
|
127
|
-
list.select {|a| a[:status] =~ status}
|
|
128
|
-
end
|
|
129
|
-
# Helpers
|
|
130
|
-
def create_keypair
|
|
122
|
+
raise "Instance not responding at #{inst.ip}"
|
|
131
123
|
end
|
|
132
|
-
|
|
133
|
-
def
|
|
134
|
-
|
|
124
|
+
|
|
125
|
+
def self.launch_instance!(cld, o={}, &block)
|
|
126
|
+
new(cld, o, &block).launch_instance!
|
|
135
127
|
end
|
|
136
|
-
|
|
137
|
-
|
|
128
|
+
|
|
129
|
+
# Called after an instance is launched
|
|
130
|
+
def after_launch_instance(instance=nil)
|
|
131
|
+
puts "after_launch_instance in remoter_base"
|
|
138
132
|
end
|
|
133
|
+
|
|
134
|
+
#TODO: Remove
|
|
135
|
+
# def self.when_instance_is_responding(inst, &block)
|
|
136
|
+
# if ping_port(inst.ip, 22)
|
|
137
|
+
# block.call if block
|
|
138
|
+
# else
|
|
139
|
+
# raise "Instance not responding at #{inst.ip}"
|
|
140
|
+
# end
|
|
141
|
+
# end
|
|
142
|
+
# def when_instance_is_responding(inst, &block);self.class.when_instance_is_responding;end
|
|
139
143
|
|
|
140
|
-
#
|
|
141
|
-
def
|
|
144
|
+
# TODO: BAD FORM, already defined in connections.rb. Fix this, ASAP
|
|
145
|
+
def self.ping_port(host, port=22, retry_times=400)
|
|
146
|
+
connected = false
|
|
147
|
+
retry_times.times do |i|
|
|
148
|
+
begin
|
|
149
|
+
break if connected = TCPSocket.new(host, port).is_a?(TCPSocket)
|
|
150
|
+
rescue Exception => e
|
|
151
|
+
sleep(2)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
connected
|
|
142
155
|
end
|
|
143
156
|
|
|
144
|
-
#
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
def custom_minimum_runnable_options
|
|
148
|
-
[]
|
|
157
|
+
# After launch callback
|
|
158
|
+
# This is called after a new instance is launched
|
|
159
|
+
def after_launched(force=false)
|
|
149
160
|
end
|
|
150
|
-
|
|
151
|
-
#
|
|
152
|
-
#
|
|
153
|
-
|
|
154
|
-
def custom_install_tasks_for(a=nil)
|
|
155
|
-
[]
|
|
156
|
-
end
|
|
157
|
-
# Custom configure tasks
|
|
158
|
-
# Allows the remoter bases to attach their own
|
|
159
|
-
# custom configuration tasks to the configuration process
|
|
160
|
-
def custom_configure_tasks_for(a=nil)
|
|
161
|
-
[]
|
|
161
|
+
|
|
162
|
+
# Before shutdown callback
|
|
163
|
+
# This is called before the cloud is contracted
|
|
164
|
+
def before_shutdown
|
|
162
165
|
end
|
|
163
166
|
|
|
164
167
|
end
|
|
@@ -166,4 +169,6 @@ module PoolParty
|
|
|
166
169
|
end
|
|
167
170
|
end
|
|
168
171
|
|
|
169
|
-
Dir["#{File.dirname(__FILE__)}/
|
|
172
|
+
Dir["#{File.dirname(__FILE__)}/remoter/*.rb"].each do |remoter_module|
|
|
173
|
+
require remoter_module
|
|
174
|
+
end
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
EC2 Remoter Base
|
|
3
|
+
|
|
4
|
+
This serves as the basis for running PoolParty on Amazon's ec2 cloud.
|
|
5
|
+
=end
|
|
6
|
+
require "date"
|
|
7
|
+
require "#{::File.dirname(__FILE__)}/ec2_response_object"
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
require 'EC2'
|
|
11
|
+
rescue LoadError
|
|
12
|
+
puts <<-EOM
|
|
13
|
+
Error: In order to use ec2, you need to install the amazon-ec2 gem
|
|
14
|
+
|
|
15
|
+
Ec2 is the default remoter base for PoolParty. If you intend on using
|
|
16
|
+
a different remoter base, specify it with:
|
|
17
|
+
|
|
18
|
+
using :remoter_name
|
|
19
|
+
|
|
20
|
+
in your config file, otherwise, to continue install grempe-amazon-ec2 with
|
|
21
|
+
|
|
22
|
+
sudo gem install grempe-amazon-ec2 --source http://gems.github.com
|
|
23
|
+
EOM
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class String
|
|
27
|
+
def convert_from_ec2_to_ip
|
|
28
|
+
self.gsub(/.compute-1.amazonaws.com*/, '').gsub(/ec2-/, '').gsub(/-/, '.')
|
|
29
|
+
end
|
|
30
|
+
def parse_datetime
|
|
31
|
+
DateTime.parse( self.chomp ) rescue self
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module PoolParty
|
|
36
|
+
module Remote
|
|
37
|
+
class Ec2 < Remote::RemoterBase
|
|
38
|
+
|
|
39
|
+
default_options({
|
|
40
|
+
:image_id => 'ami-bf5eb9d6',
|
|
41
|
+
# :key_name => ::File.basename(keypair.is_a?(String) ? keypair : keypair.full_filepath),
|
|
42
|
+
:instance_type => 'm1.small', # or 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
|
|
43
|
+
:addressing_type => "public",
|
|
44
|
+
:availabilty_zone => "us-east-1a",
|
|
45
|
+
:security_group => ["default"]
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
# Requires a hash of options
|
|
49
|
+
def self.launch_new_instance!(parent_cloud, o)
|
|
50
|
+
new(parent_cloud, o).launch_new_instance!
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# TODO: Fix the key_name issue
|
|
54
|
+
# Start a new instance with the given options
|
|
55
|
+
def launch_new_instance!(o={})
|
|
56
|
+
raise "You must pass a keypair to launch an instance, or else you will not be able to login. options = #{o.inspect}" if !cloud.keypair
|
|
57
|
+
o.merge!( options ).merge!(:key_name=>keypair.basename)
|
|
58
|
+
instance = ec2(o).run_instances(o)
|
|
59
|
+
begin
|
|
60
|
+
h = EC2ResponseObject.get_hash_from_response(instance.instancesSet.item.first)
|
|
61
|
+
#h = instance.instancesSet.item.first
|
|
62
|
+
rescue Exception => e
|
|
63
|
+
h = EC2ResponseObject.get_hash_from_response(instance) rescue instance
|
|
64
|
+
# h = instance
|
|
65
|
+
end
|
|
66
|
+
h
|
|
67
|
+
end
|
|
68
|
+
# Terminate an instance by id
|
|
69
|
+
def terminate_instance!(o={})
|
|
70
|
+
ec2(o).terminate_instances(:instance_id => o[:instance_id])
|
|
71
|
+
end
|
|
72
|
+
# Describe an instance's status
|
|
73
|
+
def describe_instance(o={})
|
|
74
|
+
return describe_instances.first if o[:instance_id].nil?
|
|
75
|
+
describe_instances.detect {|a| a[:name] == o[:instance_id] || a[:ip] == o[:instance_id] || a[:instance_id] == o[:instance_id] }
|
|
76
|
+
end
|
|
77
|
+
# TODO: Clean up this method and remove hostnames
|
|
78
|
+
def describe_instances(o={})
|
|
79
|
+
id = 0
|
|
80
|
+
get_instances_description(options.merge(o)).each_with_index do |h,i|
|
|
81
|
+
if h[:status] == "running"
|
|
82
|
+
inst_name = id == 0 ? "master" : "node#{id}"
|
|
83
|
+
id += 1
|
|
84
|
+
else
|
|
85
|
+
inst_name = "#{h[:status]}_node#{i}"
|
|
86
|
+
end
|
|
87
|
+
h.merge!({
|
|
88
|
+
:name => inst_name,
|
|
89
|
+
:hostname => h[:ip],
|
|
90
|
+
:ip => h[:ip].convert_from_ec2_to_ip,
|
|
91
|
+
:index => i, #TODO MF get the instance id from the aws result instead
|
|
92
|
+
:launching_time => (h[:launching_time])
|
|
93
|
+
})
|
|
94
|
+
end.compact.sort {|a,b| a[:index] <=> b[:index] }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# ===================================
|
|
98
|
+
# = Ec2 Specific methods below here =
|
|
99
|
+
# ===================================
|
|
100
|
+
|
|
101
|
+
# return or create a new base EC2 connection object that will actually connect to ec2
|
|
102
|
+
def ec2(o={})
|
|
103
|
+
@ec2 ||= EC2::Base.new( :access_key_id => o[:access_key],
|
|
104
|
+
:secret_access_key => o[:secret_access_key]
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
def self.ec2(o)
|
|
108
|
+
@ec2 ||= EC2::Base.new( :access_key_id => o[:access_key],
|
|
109
|
+
:secret_access_key => o[:secret_access_key]
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Get the ec2 description for the response in a hash format
|
|
114
|
+
def get_instances_description(o={})
|
|
115
|
+
#TODO: only use keypair.full_filepath
|
|
116
|
+
key_hash = {:keypair => ::File.basename(keypair.is_a?(String) ? keypair : keypair.full_filepath)}
|
|
117
|
+
EC2ResponseObject.get_descriptions(ec2(o).describe_instances).select_with_hash(key_hash)
|
|
118
|
+
end
|
|
119
|
+
def get_descriptions(o={})
|
|
120
|
+
self.class.get_descriptions(o)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def keypair
|
|
124
|
+
cloud.keypair
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Class method helpers
|
|
128
|
+
def aws_keys
|
|
129
|
+
unless @access_key && @secret_access_key
|
|
130
|
+
aws_keys = {}
|
|
131
|
+
aws_keys = YAML::load( File.open('/etc/poolparty/aws_keys.yml') ) rescue 'No aws_keys.yml file. Will try to use enviornment variables'
|
|
132
|
+
@access_key ||= aws_keys[:access_key] || ENV['AMAZON_ACCESS_KEY_ID'] || ENV['AWS_ACCESS_KEY']
|
|
133
|
+
@secret_access_key ||= aws_keys[:secret_access_key] || ENV['AMAZON_SECRET_ACCESS_KEY'] || ENV['AWS_SECRET_ACCESS_KEY']
|
|
134
|
+
end
|
|
135
|
+
[@access_key, @secret_access_key]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def after_launch_instance(inst)
|
|
139
|
+
if inst
|
|
140
|
+
associate_address(inst)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Associate an address with the instance using ec2
|
|
145
|
+
# Get the next_unused_elastic_ip
|
|
146
|
+
# and if there is one, associate the instance to the
|
|
147
|
+
# public ip
|
|
148
|
+
def associate_address(instance=nil)
|
|
149
|
+
if ip = next_unused_elastic_ip
|
|
150
|
+
vputs "Associating #{instance.instance_id} with #{ip}"
|
|
151
|
+
ec2.associate_address(:instance_id => instance.instance_id, :public_ip => ip)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Get the next usable elastic ip
|
|
156
|
+
# First, get the list of addresses from ec2 that the client
|
|
157
|
+
# has access to, then select only the ones that are not associated
|
|
158
|
+
# with an instance.
|
|
159
|
+
# If the cloud has set elastic_ips to use, then, using the
|
|
160
|
+
# intersection of the unused ips and those, find the first one available
|
|
161
|
+
# and return that, otherwise, return the first elastic ip available
|
|
162
|
+
def next_unused_elastic_ip
|
|
163
|
+
# [{"instanceId"=>nil, "publicIp"=>"174.129.212.93"}, {"instanceId"=>nil, "publicIp"=>"174.129.212.94"}]
|
|
164
|
+
if addressesSet = ec2(options).describe_addresses["addressesSet"]
|
|
165
|
+
begin
|
|
166
|
+
empty_addresses = addressesSet["item"].select {|i| i["instanceId"].nil? }
|
|
167
|
+
ips = empty_addresses.map {|addr| addr["publicIp"]}
|
|
168
|
+
if cloud.elastic_ips?
|
|
169
|
+
ips_to_use = cloud.elastic_ips & ips
|
|
170
|
+
ips_to_use.first
|
|
171
|
+
else
|
|
172
|
+
ips.first
|
|
173
|
+
end
|
|
174
|
+
rescue Exception => e
|
|
175
|
+
puts "Error: #{e}"
|
|
176
|
+
nil
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Help create a keypair for the cloud
|
|
182
|
+
# This is a helper to create the keypair and add them to the cloud for you
|
|
183
|
+
def create_keypair
|
|
184
|
+
return false unless keypair
|
|
185
|
+
unless ::File.exists?( new_keypair_path )
|
|
186
|
+
FileUtils.mkdir_p ::File.dirname( new_keypair_path )
|
|
187
|
+
vputs "Creating keypair: #{keypair} in #{new_keypair_path}"
|
|
188
|
+
Kernel.system "ec2-add-keypair #{keypair} > #{new_keypair_path} && chmod 600 #{new_keypair_path}"
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# wrapper for remote base to perform a snapshot backup for the ebs volume
|
|
193
|
+
def create_snapshot
|
|
194
|
+
return nil if ebs_volume_id.nil?
|
|
195
|
+
ec2.create_snapshot(:volume_id => ebs_volume_id)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def has_cert_and_key?
|
|
199
|
+
pub_key && private_key
|
|
200
|
+
end
|
|
201
|
+
# The keys are used only for puppet certificates
|
|
202
|
+
# and are only used for EC2.
|
|
203
|
+
# Public key
|
|
204
|
+
def pub_key
|
|
205
|
+
@pub_key ||= ENV["EC2_CERT"] ? ENV["EC2_CERT"] : nil
|
|
206
|
+
end
|
|
207
|
+
# Private key
|
|
208
|
+
def private_key
|
|
209
|
+
@private_key ||= ENV["EC2_PRIVATE_KEY"] ? ENV["EC2_PRIVATE_KEY"] : nil
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def custom_minimum_runnable_options
|
|
213
|
+
[:ami, :availabilty_zone, :security_group]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Hook
|
|
217
|
+
#TODO#: Change this so they match with the cap tasks
|
|
218
|
+
def custom_install_tasks_for(o)
|
|
219
|
+
[
|
|
220
|
+
# "if [ -z $(grep -v '#' /etc/hosts | grep '#{o.name}') ]; then echo \"$(curl http://169.254.169.254/latest/meta-data/public-ipv4) #{o.name}\" >> /etc/hosts; fi",
|
|
221
|
+
"if [ -z \"$(grep -v '#' /etc/hosts | grep '#{o.name}')\" ]; then echo '127.0.0.1 #{o.name}' >> /etc/hosts; fi",
|
|
222
|
+
"hostname #{o.name}",
|
|
223
|
+
"echo #{o.name} > /etc/hostname"
|
|
224
|
+
]
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def after_install_tasks_for(o)
|
|
228
|
+
[
|
|
229
|
+
# "cd /var/poolparty && wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1",
|
|
230
|
+
# "/usr/bin/gem install --no-ri --no-rdoc amazon-ec2.gem 2>&1"
|
|
231
|
+
]
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def custom_configure_tasks_for(o)
|
|
235
|
+
[
|
|
236
|
+
]
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def reset_base!
|
|
240
|
+
@describe_instances = @cached_descriptions = nil
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end
|
|
245
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module Remote
|
|
3
|
+
class Ec2RemoteInstance < RemoteInstance
|
|
4
|
+
include Dslify
|
|
5
|
+
|
|
6
|
+
attr_reader :my_cloud, :uniquely_identifiable_by, :found_at
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# A new instance will be created from the passed in hash.
|
|
10
|
+
# This hash of passed in values will be converted to methods on this instance.
|
|
11
|
+
# The parent clouds describe_instances list will be searched for the first one matching any of this instance's provided unique identifiers.
|
|
12
|
+
# If an instance is found, this instance's properties will be set to the properties provided
|
|
13
|
+
# If the found instance has properties of the same key as the provided options, the found instance's values will override the passed in options
|
|
14
|
+
def initialize(opts={}, prnt=Ec2.new)
|
|
15
|
+
@uniquely_identifiable_by = [:ip, :name, :dns_name, :instance_id]
|
|
16
|
+
@original_options = opts
|
|
17
|
+
@my_cloud = prnt
|
|
18
|
+
super(opts, prnt)
|
|
19
|
+
find_myself(@uniquely_identifiable_by && opts.keys) if prnt.respond_to?(:describe_instances)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Search the clouds describe_instances list for the first match on one of this nodes unique identifiers
|
|
23
|
+
def find_myself(unique_identifiers = @original_options.keys)
|
|
24
|
+
description_hash = @my_cloud.describe_instances.detect do|node|
|
|
25
|
+
unique_identifiers.detect{|identifier_key| node[identifier_key] == options[identifier_key]
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
return nil if description_hash.blank?
|
|
29
|
+
@found_at = Time.now
|
|
30
|
+
self.set_vars_from_options(description_hash)
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Is this instance running?
|
|
35
|
+
def running?
|
|
36
|
+
!(status =~ /running/).nil?
|
|
37
|
+
end
|
|
38
|
+
# Is this instance pending?
|
|
39
|
+
def pending?
|
|
40
|
+
!(status =~ /pending/).nil?
|
|
41
|
+
end
|
|
42
|
+
# Is this instance terminating?
|
|
43
|
+
def terminating?
|
|
44
|
+
!(status =~ /shutting/).nil?
|
|
45
|
+
end
|
|
46
|
+
# Has this instance been terminated?
|
|
47
|
+
def terminated?
|
|
48
|
+
!(status =~ /terminated/).nil?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# Convenience class to convert standard amazon-ec2 responses from their camel cased style to a hash using underscore style.
|
|
2
|
+
# For example: instanceId to instance_id
|
|
1
3
|
class EC2ResponseObject
|
|
2
4
|
def self.get_descriptions(resp)
|
|
3
5
|
rs = get_instance_from_response(resp)
|
|
@@ -48,7 +50,6 @@ class EC2ResponseObject
|
|
|
48
50
|
group
|
|
49
51
|
end
|
|
50
52
|
def self.get_hash_from_response(resp, group = 'default')
|
|
51
|
-
begin
|
|
52
53
|
{
|
|
53
54
|
:instance_id => resp.instanceId,
|
|
54
55
|
:name => resp.instanceId,
|
|
@@ -59,8 +60,5 @@ class EC2ResponseObject
|
|
|
59
60
|
:keypair => resp.keyName,
|
|
60
61
|
:security_group => group
|
|
61
62
|
}
|
|
62
|
-
rescue Exception => e
|
|
63
|
-
nil
|
|
64
|
-
end
|
|
65
63
|
end
|
|
66
64
|
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
Vmx file creator
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
Vmx.new({
|
|
6
|
+
:name => "MyPP",
|
|
7
|
+
:vmx_disk => {
|
|
8
|
+
:image_size => "2G"
|
|
9
|
+
},
|
|
10
|
+
:base_directory => "/tmp/vmx"
|
|
11
|
+
}).compile
|
|
12
|
+
=end
|
|
13
|
+
class Vmx
|
|
14
|
+
include Dslify
|
|
15
|
+
|
|
16
|
+
default_options(
|
|
17
|
+
:name => "PoolParty",
|
|
18
|
+
:base_directory => "~/Documents/Virtual\ Machines.localized"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
def initialize(o={})
|
|
22
|
+
dsl_options o
|
|
23
|
+
@vmx_file = VmxFile.new o
|
|
24
|
+
@vmx_disk = VmxDisk.new o
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def compile
|
|
28
|
+
::FileUtils.mkdir_p "#{base_directory}/#{options[:name]}"
|
|
29
|
+
vmdk = @vmx_disk.compile
|
|
30
|
+
@vmx_file.set("ide0:0.fileName", vmdk)
|
|
31
|
+
@vmx_file.compile
|
|
32
|
+
end
|
|
33
|
+
end
|