auser-poolparty 1.2.2 → 1.2.3
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/VERSION.yml +1 -1
- data/bin/cloud +37 -48
- 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 +31 -15
- data/bin/cloud-osxcopy +22 -12
- data/bin/cloud-provision +35 -24
- 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 +33 -20
- data/bin/cloud-verify +38 -29
- data/bin/install-poolparty +4 -198
- data/bin/server-cloud-elections +1 -1
- data/examples/basic.rb +9 -9
- data/examples/fairchild.rb +1 -1
- data/examples/metavirt_cloud.rb +21 -0
- data/lib/poolparty/aska.rb +3 -0
- data/lib/poolparty/base_packages/haproxy.rb +19 -18
- data/lib/poolparty/base_packages/poolparty.rb +1 -1
- data/lib/poolparty/core/hash.rb +46 -0
- data/lib/poolparty/core/object.rb +21 -15
- data/lib/poolparty/core/string.rb +16 -0
- data/lib/poolparty/dependency_resolver/chef_resolver.rb +23 -6
- data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
- data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +2 -2
- data/lib/poolparty/dependency_resolver/puppet_resolver.rb +10 -32
- data/lib/poolparty/helpers/optioner.rb +19 -14
- 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/modules/callbacks.rb +6 -2
- data/lib/poolparty/modules/cloud_dsl.rb +2 -2
- data/lib/poolparty/modules/cloud_resourcer.rb +10 -50
- data/lib/poolparty/modules/file_writer.rb +2 -2
- data/lib/poolparty/modules/pinger.rb +4 -1
- data/lib/poolparty/modules/resourcing_dsl.rb +1 -29
- data/lib/poolparty/modules/searchable_paths.rb +3 -3
- data/lib/poolparty/monitors/monitor_rack.rb +1 -1
- data/lib/poolparty/net/remote_bases.rb +2 -0
- data/lib/poolparty/net/remote_instance.rb +6 -4
- data/lib/poolparty/net/remoter/interactive.rb +2 -3
- data/lib/poolparty/net/remoter_base.rb +54 -31
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +49 -26
- data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +6 -19
- data/lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb +4 -3
- data/lib/poolparty/net/remoter_bases/metavirt/metavirt.rb +99 -0
- data/lib/poolparty/net/remoter_bases/metavirt/metavirt_instance.rb +52 -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 +36 -31
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +9 -5
- data/lib/poolparty/plugins/apache2/apache.rb +118 -73
- data/lib/poolparty/plugins/chef.rb +15 -17
- data/lib/poolparty/plugins/chef_deploy.rb +18 -4
- data/lib/poolparty/plugins/deploy_directory.rb +25 -16
- data/lib/poolparty/plugins/gem_package.rb +15 -5
- data/lib/poolparty/plugins/git.rb +44 -30
- data/lib/poolparty/plugins/line_in_file.rb +5 -1
- data/lib/poolparty/plugins/rails_deploy.rb +79 -26
- data/lib/poolparty/plugins/svn.rb +2 -2
- data/lib/poolparty/poolparty/cloud.rb +101 -47
- data/lib/poolparty/poolparty/default.rb +25 -23
- data/lib/poolparty/poolparty/key.rb +18 -27
- data/lib/poolparty/poolparty/neighborhoods.rb +1 -1
- data/lib/poolparty/poolparty/plugin.rb +17 -7
- data/lib/poolparty/poolparty/pool.rb +3 -3
- data/lib/poolparty/poolparty/poolparty_base_class.rb +41 -35
- data/lib/poolparty/poolparty/resource.rb +18 -44
- data/lib/poolparty/poolparty/service.rb +1 -5
- data/lib/poolparty/provision/boot_strapper.rb +24 -19
- data/lib/poolparty/provision/configurations/chef.rb +4 -4
- data/lib/poolparty/provision/dr_configure.rb +11 -10
- data/lib/poolparty/resources/cron.rb +7 -3
- data/lib/poolparty/resources/directory.rb +7 -0
- data/lib/poolparty/resources/exec.rb +2 -1
- data/lib/poolparty/resources/file.rb +23 -9
- data/lib/poolparty/resources/group.rb +21 -0
- data/lib/poolparty/resources/host.rb +2 -1
- data/lib/poolparty/resources/mount.rb +0 -4
- data/lib/poolparty/resources/remote_file.rb +1 -1
- data/lib/poolparty/resources/service.rb +2 -1
- data/lib/poolparty/resources/sshkey.rb +10 -12
- data/lib/poolparty/resources/symlink.rb +3 -5
- data/lib/poolparty/resources/user.rb +5 -0
- data/lib/poolparty/resources/variable.rb +1 -1
- data/lib/poolparty/templates/haproxy.conf +1 -1
- data/lib/poolparty/verification/verify.rb +4 -0
- data/lib/poolparty.rb +9 -4
- data/lib/poolpartycl.rb +1 -52
- data/spec/bin/bin_spec_helper.rb +1 -0
- data/spec/bin/server-list-active_spec.rb +3 -3
- data/spec/poolparty/core/object_spec.rb +9 -46
- data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +18 -12
- data/spec/poolparty/fixtures/clouds.json +1 -1
- data/spec/poolparty/helpers/optioner_spec.rb +4 -11
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +1 -1
- data/spec/poolparty/net/remote_instance_spec.rb +0 -1
- 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 -44
- data/spec/poolparty/net/remoter_bases/ec2_spec.rb +2 -3
- data/spec/poolparty/net/remoter_spec.rb +2 -3
- data/spec/poolparty/plugins/git_spec.rb +5 -8
- data/spec/poolparty/poolparty/cloud_spec.rb +17 -24
- data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +1 -3
- 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 +6 -5
- data/spec/poolparty/poolparty/plugin_model_spec.rb +7 -4
- data/spec/poolparty/poolparty/pool_spec.rb +2 -9
- data/spec/poolparty/poolparty/resource_spec.rb +10 -24
- data/spec/poolparty/poolparty/script_spec.rb +1 -4
- data/spec/poolparty/poolparty/test_plugins/webserver.rb +0 -2
- data/spec/poolparty/resources/file_spec.rb +4 -4
- data/spec/poolparty/resources/service_spec.rb +1 -1
- data/spec/poolparty/spec_helper.rb +9 -38
- data/tasks/spec.rake +6 -2
- data/test/fixtures/test_key +1 -0
- data/test/poolparty/core/object_test.rb +29 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +1 -1
- data/test/poolparty/modules/cloud_dsl_test.rb +4 -4
- data/test/poolparty/net/remoter_bases/metavirt/metavirt_test.rb +55 -0
- data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +41 -14
- data/test/poolparty/plugins/chef_deploy_test.rb +37 -0
- data/test/poolparty/plugins/rails_deploy_test.rb +50 -0
- data/test/poolparty/poolparty/plugin_test.rb +18 -0
- data/test/poolparty/poolparty/poolparty_base_class_test.rb +41 -3
- data/test/test_helper.rb +5 -1
- data/vendor/gems/dslify/LICENSE +20 -0
- data/vendor/gems/dslify/README.rdoc +33 -0
- data/vendor/gems/dslify/Rakefile +56 -56
- data/vendor/gems/dslify/lib/dslify.rb +76 -5
- data/vendor/gems/dslify/test/dslify_test.rb +197 -0
- data/vendor/gems/dslify/test/test_helper.rb +7 -0
- data/vendor/gems/git-style-binaries/README.markdown +274 -0
- data/vendor/gems/{butterfly → git-style-binaries}/Rakefile +64 -62
- 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/poolparty-binaries.screenplay +45 -0
- data/vendor/gems/git-style-binaries/git-style-binaries.gemspec +69 -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 +74 -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/lib/parenting/parenting.rb +13 -4
- data/vendor/gems/rest-client/README.rdoc +151 -0
- data/vendor/gems/rest-client/Rakefile +85 -0
- data/vendor/gems/rest-client/bin/restclient +87 -0
- data/vendor/gems/rest-client/lib/rest_client.rb +2 -0
- data/vendor/gems/rest-client/lib/restclient/exceptions.rb +84 -0
- data/vendor/gems/rest-client/lib/restclient/mixin/response.rb +43 -0
- data/vendor/gems/rest-client/lib/restclient/raw_response.rb +30 -0
- data/vendor/gems/rest-client/lib/restclient/request.rb +232 -0
- data/vendor/gems/rest-client/lib/restclient/resource.rb +146 -0
- data/vendor/gems/rest-client/lib/restclient/response.rb +20 -0
- data/vendor/gems/rest-client/lib/restclient.rb +93 -0
- data/vendor/gems/rest-client/rest-client.gemspec +21 -0
- data/vendor/gems/rest-client/spec/base.rb +4 -0
- data/vendor/gems/rest-client/spec/exceptions_spec.rb +54 -0
- data/vendor/gems/rest-client/spec/mixin/response_spec.rb +46 -0
- data/vendor/gems/rest-client/spec/raw_response_spec.rb +17 -0
- data/vendor/gems/rest-client/spec/request_spec.rb +442 -0
- data/vendor/gems/rest-client/spec/resource_spec.rb +75 -0
- data/vendor/gems/rest-client/spec/response_spec.rb +16 -0
- data/vendor/gems/rest-client/spec/restclient_spec.rb +53 -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 +100 -70
- data/bin/cloud-describe +0 -28
- data/bin/cloud-handle-load +0 -27
- data/bin/cloud-rsync +0 -28
- data/bin/cloud-spec +0 -40
- data/lib/poolparty/plugins/nanite.rb +0 -41
- data/lib/poolparty/plugins/runit.rb +0 -96
- data/vendor/gems/butterfly/History.txt +0 -4
- data/vendor/gems/butterfly/PostInstall.txt +0 -2
- data/vendor/gems/butterfly/README.rdoc +0 -48
- data/vendor/gems/butterfly/VERSION.yml +0 -4
- data/vendor/gems/butterfly/bin/flutter +0 -4
- data/vendor/gems/butterfly/butterfly.gemspec +0 -37
- data/vendor/gems/butterfly/examples/config.ru +0 -15
- data/vendor/gems/butterfly/examples/my_app.rb +0 -12
- data/vendor/gems/butterfly/lib/butterfly.rb +0 -14
- data/vendor/gems/butterfly/lib/handler.rb +0 -48
- data/vendor/gems/butterfly/lib/request.rb +0 -29
- data/vendor/gems/butterfly/lib/response.rb +0 -49
- data/vendor/gems/butterfly/script/console +0 -10
- data/vendor/gems/butterfly/script/destroy +0 -14
- data/vendor/gems/butterfly/script/generate +0 -14
- data/vendor/gems/butterfly/test/test_adapter_base.rb +0 -23
- data/vendor/gems/butterfly/test/test_butterfly_request.rb +0 -46
- data/vendor/gems/butterfly/test/test_butterfly_response.rb +0 -43
- data/vendor/gems/butterfly/test/test_butterfly_server.rb +0 -16
- data/vendor/gems/butterfly/test/test_default.rb +0 -12
- data/vendor/gems/butterfly/test/test_helper.rb +0 -6
- data/vendor/gems/dslify/History.txt +0 -4
- data/vendor/gems/dslify/Manifest.txt +0 -25
- data/vendor/gems/dslify/PostInstall.txt +0 -5
- data/vendor/gems/dslify/README.txt +0 -60
- data/vendor/gems/dslify/config/hoe.rb +0 -73
- data/vendor/gems/dslify/config/requirements.rb +0 -15
- data/vendor/gems/dslify/dslify.gemspec +0 -40
- data/vendor/gems/dslify/lib/dslify/dslify.rb +0 -76
- data/vendor/gems/dslify/lib/dslify/version.rb +0 -10
- data/vendor/gems/dslify/script/console +0 -10
- data/vendor/gems/dslify/script/destroy +0 -14
- data/vendor/gems/dslify/script/generate +0 -14
- data/vendor/gems/dslify/script/txt2html +0 -82
- data/vendor/gems/dslify/setup.rb +0 -1585
- data/vendor/gems/dslify/tasks/deployment.rake +0 -34
- data/vendor/gems/dslify/tasks/environment.rake +0 -7
- data/vendor/gems/dslify/tasks/website.rake +0 -17
- data/vendor/gems/dslify/test/test_dslify.rb +0 -138
- data/vendor/gems/dslify/website/index.html +0 -86
- data/vendor/gems/dslify/website/index.txt +0 -83
- data/vendor/gems/dslify/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/vendor/gems/dslify/website/stylesheets/screen.css +0 -138
- data/vendor/gems/dslify/website/template.html.erb +0 -48
|
@@ -1,23 +1,33 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
Enables haproxy for a cloud
|
|
3
|
+
=end
|
|
1
4
|
module PoolParty
|
|
2
5
|
class Base
|
|
3
6
|
plugin :haproxy do
|
|
4
7
|
|
|
8
|
+
default_options(
|
|
9
|
+
:port => 80,
|
|
10
|
+
:forwarding_port => 8080,
|
|
11
|
+
:proxy_mode => "http"
|
|
12
|
+
)
|
|
13
|
+
|
|
5
14
|
def before_configure
|
|
6
15
|
end
|
|
7
16
|
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
-
# include_chef_recipe "#{::File.dirname(__FILE__)}/../../../vendor/chef/apache2"
|
|
11
|
-
|
|
17
|
+
def loaded(o={}, &block)
|
|
18
|
+
set_vars_from_options(cloud.dsl_options.reject{|k,v| [:enabled, :disabled].include?(v) }) if cloud
|
|
12
19
|
# Restart sysklogd after we update the haproxy.log
|
|
13
20
|
has_service(:name => "sysklogd")
|
|
21
|
+
|
|
22
|
+
has_package "haproxy"
|
|
23
|
+
|
|
14
24
|
# Template variables
|
|
15
|
-
has_variable("haproxy_name", :value => "#{cloud.name}")
|
|
25
|
+
has_variable("haproxy_name", :value => "#{(cloud ? cloud.name : name)}")
|
|
16
26
|
has_variable("listen_ports", :value => [ "8080" ], :namespace => "apache")
|
|
17
27
|
|
|
18
|
-
has_variable("ports_haproxy", :value => ([(
|
|
19
|
-
has_variable("forwarding_port", :value => (
|
|
20
|
-
has_variable("proxy_mode", :value => (
|
|
28
|
+
has_variable("ports_haproxy", :value => ([(port || Default.port)].flatten))
|
|
29
|
+
has_variable("forwarding_port", :value => (forwarding_port || Default.forwarding_port))
|
|
30
|
+
has_variable("proxy_mode", :value => (proxy_mode || Default.proxy_mode))
|
|
21
31
|
|
|
22
32
|
# Startup haproxy and enable it
|
|
23
33
|
has_line_in_file(:line => "ENABLED=1", :file => "/etc/default/haproxy")
|
|
@@ -27,14 +37,7 @@ module PoolParty
|
|
|
27
37
|
content ''
|
|
28
38
|
end
|
|
29
39
|
|
|
30
|
-
has_directory "/var/run/haproxy"
|
|
31
|
-
# has_package "apache2"
|
|
32
|
-
# has_service "apache2"
|
|
33
|
-
|
|
34
|
-
has_package "haproxy" do
|
|
35
|
-
# stops get_service("apache2"), :immediately
|
|
36
|
-
# starts get_service("apache2")
|
|
37
|
-
end
|
|
40
|
+
has_directory "/var/run/haproxy"
|
|
38
41
|
|
|
39
42
|
has_exec "reloadhaproxy",
|
|
40
43
|
:command => "/etc/init.d/haproxy reload",
|
|
@@ -49,8 +52,6 @@ module PoolParty
|
|
|
49
52
|
# Service is required
|
|
50
53
|
has_service("haproxy") do
|
|
51
54
|
action [:start, :enable]
|
|
52
|
-
# stops get_service("apache2"), :immediately
|
|
53
|
-
# starts get_service("apache2")
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
end
|
data/lib/poolparty/core/hash.rb
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
Hash extentions
|
|
3
3
|
=end
|
|
4
4
|
class Hash
|
|
5
|
+
|
|
6
|
+
# alias_method :_old_reader, :[]
|
|
7
|
+
# # Treat string and symbols the same
|
|
8
|
+
# def [](key)
|
|
9
|
+
# if o = _old_reader(key) || has_key?(key)
|
|
10
|
+
# return o
|
|
11
|
+
# elsif key.is_a? Symbol
|
|
12
|
+
# _old_reader(key.to_s)
|
|
13
|
+
# elsif key.is_a? String
|
|
14
|
+
# _old_reader(key.to_sym) rescue _old_reader(key)
|
|
15
|
+
# else
|
|
16
|
+
# _old_reader(key)
|
|
17
|
+
# end
|
|
18
|
+
# end
|
|
19
|
+
|
|
20
|
+
# Return a hash of all the elements where the block evaluates to true
|
|
5
21
|
def choose(&block)
|
|
6
22
|
Hash[*self.select(&block).inject([]){|res,(k,v)| res << k << v}]
|
|
7
23
|
end
|
|
@@ -66,6 +82,36 @@ class Hash
|
|
|
66
82
|
keys.sort[idx - 1]
|
|
67
83
|
end
|
|
68
84
|
|
|
85
|
+
def stringify_keys
|
|
86
|
+
dup.stringify_keys!
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Converts all of the keys to strings
|
|
90
|
+
def stringify_keys!
|
|
91
|
+
keys.each{|k|
|
|
92
|
+
v = delete(k)
|
|
93
|
+
self[k.to_s] = v
|
|
94
|
+
v.stringify_keys! if v.is_a?(Hash)
|
|
95
|
+
v.each{|p| p.stringify_keys! if p.is_a?(Hash)} if v.is_a?(Array)
|
|
96
|
+
}
|
|
97
|
+
self
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def symbolize_keys
|
|
101
|
+
dup.stringify_keys!
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Converts all of the keys to strings
|
|
105
|
+
def symbolize_keys!
|
|
106
|
+
keys.each{|k|
|
|
107
|
+
v = delete(k)
|
|
108
|
+
self[k.to_sym] = v
|
|
109
|
+
v.symbolize_keys! if v.is_a?(Hash)
|
|
110
|
+
v.each{|p| p.symbolize_keys! if p.is_a?(Hash)} if v.is_a?(Array)
|
|
111
|
+
}
|
|
112
|
+
self
|
|
113
|
+
end
|
|
114
|
+
|
|
69
115
|
def method_missing(sym, *args, &block)
|
|
70
116
|
if has_key?(sym)
|
|
71
117
|
fetch(sym)
|
|
@@ -16,11 +16,7 @@ class Object
|
|
|
16
16
|
original = self.method(original_id).to_proc
|
|
17
17
|
define_method(new_id){|*args| original.call(*args)}
|
|
18
18
|
end
|
|
19
|
-
|
|
20
|
-
@p = par.clone
|
|
21
|
-
@p.options.merge!(opts)
|
|
22
|
-
@p.instance_eval &block if block
|
|
23
|
-
end
|
|
19
|
+
|
|
24
20
|
def returning(receiver)
|
|
25
21
|
yield receiver
|
|
26
22
|
receiver
|
|
@@ -29,14 +25,24 @@ class Object
|
|
|
29
25
|
block.in_context(self).call
|
|
30
26
|
self
|
|
31
27
|
end
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
|
|
29
|
+
# Procs that have been run already in the run_once blocks
|
|
30
|
+
# This is just a container array of procs
|
|
31
|
+
def run_procs
|
|
32
|
+
@run_procs ||= []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Do once.
|
|
36
|
+
# Takes a block. IF this block has already been run (from the run_procs array),
|
|
37
|
+
# then run it and store the block unique id in the run_procs array so
|
|
38
|
+
# it never gets run again
|
|
39
|
+
def do_once(&block)
|
|
40
|
+
unless run_procs.include?(block.to_s)
|
|
41
|
+
instance_eval &block if block
|
|
42
|
+
run_procs << block.to_s
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
40
46
|
def respec_string
|
|
41
47
|
case self.class
|
|
42
48
|
when String
|
|
@@ -85,7 +91,7 @@ class Object
|
|
|
85
91
|
print "#{m}" if debugging?(o) || verbose?(o) rescue ""
|
|
86
92
|
end
|
|
87
93
|
def verbose?(o=self)
|
|
88
|
-
o.respond_to?(:verbose) ? o.verbose : ($TESTING ||= false)
|
|
94
|
+
o.respond_to?(:verbose) ? o.verbose : (debugging? || $TESTING ||= false)
|
|
89
95
|
end
|
|
90
96
|
def debugging?(o=self)
|
|
91
97
|
o.respond_to?(:debug) ? o.debug : ($DEBUGGING ||= false)
|
|
@@ -100,4 +106,4 @@ class Object
|
|
|
100
106
|
def unix_hide_string
|
|
101
107
|
"2>&1 > /dev/null"
|
|
102
108
|
end
|
|
103
|
-
end
|
|
109
|
+
end
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'json/add/core'
|
|
4
|
+
|
|
1
5
|
class String
|
|
2
6
|
def hasherize(format=[])
|
|
3
7
|
hash = {}
|
|
@@ -46,6 +50,9 @@ class String
|
|
|
46
50
|
self.gsub(/['"]/, '\\\"')
|
|
47
51
|
# self.gsub(/["']/, "\\\"")
|
|
48
52
|
end
|
|
53
|
+
def path_quote
|
|
54
|
+
self.safe_quote.gsub(/[ ]/, '\ ')
|
|
55
|
+
end
|
|
49
56
|
def nice_runnable(quite=true)
|
|
50
57
|
self.split(/ && /).join("\n")
|
|
51
58
|
end
|
|
@@ -188,4 +195,13 @@ class String
|
|
|
188
195
|
File.join(self, o.to_s)
|
|
189
196
|
end
|
|
190
197
|
|
|
198
|
+
# Parse json string to a ruby object
|
|
199
|
+
def json_parse
|
|
200
|
+
return nil if self == "null" || self.empty?
|
|
201
|
+
result = JSON.parse self
|
|
202
|
+
if result.respond_to? :keys
|
|
203
|
+
result.symbolize_keys!
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
191
207
|
end
|
|
@@ -26,7 +26,6 @@ module PoolParty
|
|
|
26
26
|
def compile(props=@properties_hash, tabs=0, default_namespace="poolparty")
|
|
27
27
|
base_dir(default_namespace)
|
|
28
28
|
build_base_recipe_directory( default_namespace )
|
|
29
|
-
|
|
30
29
|
# ::Suitcase::Zipper.add( base_dir, "chef/cookbooks")
|
|
31
30
|
|
|
32
31
|
_compile(props, tabs, default_namespace)
|
|
@@ -46,7 +45,6 @@ module PoolParty
|
|
|
46
45
|
end
|
|
47
46
|
|
|
48
47
|
def build_base_recipe_directory(nm)
|
|
49
|
-
dputs "Making new #{base_dir}"
|
|
50
48
|
::FileUtils.mkdir_p "#{base_dir}"
|
|
51
49
|
|
|
52
50
|
[ "recipes", "templates", "attributes" ].each do |bdir|
|
|
@@ -61,7 +59,11 @@ module PoolParty
|
|
|
61
59
|
end
|
|
62
60
|
|
|
63
61
|
def base_dir(nm="poolparty")
|
|
64
|
-
@base_dir ||= "#{
|
|
62
|
+
@base_dir ||= "#{tmp_path}/dr_configure/chef/cookbooks/#{nm}"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def tmp_path
|
|
66
|
+
the_cloud ? the_cloud.tmp_path : "#{Default.tmp_path}/pool/cloud"
|
|
65
67
|
end
|
|
66
68
|
|
|
67
69
|
def options_to_string(opts,tabs=0)
|
|
@@ -159,7 +161,8 @@ module PoolParty
|
|
|
159
161
|
hsh.merge!({:source => "#{nm}.erb"})
|
|
160
162
|
end
|
|
161
163
|
#
|
|
162
|
-
hsh.delete(:require)
|
|
164
|
+
hsh.delete(:require)
|
|
165
|
+
hsh.delete(:requires)
|
|
163
166
|
hsh.delete(:name) # we don't need the names in the methods
|
|
164
167
|
hsh
|
|
165
168
|
end
|
|
@@ -211,9 +214,23 @@ module PoolParty
|
|
|
211
214
|
when PoolParty::Resources::Resource
|
|
212
215
|
"resources(:#{handle_chef_types(obj.class.to_s.top_level_class.downcase.to_sym)} => \"#{obj.name}\")"
|
|
213
216
|
when Fixnum
|
|
214
|
-
|
|
217
|
+
case obj
|
|
218
|
+
when /^\d{3}$/
|
|
219
|
+
"0#{obj.to_i}"
|
|
220
|
+
else
|
|
221
|
+
"#{obj.to_i}"
|
|
222
|
+
end
|
|
215
223
|
when String
|
|
216
|
-
|
|
224
|
+
case obj
|
|
225
|
+
when /^\d{4}$/
|
|
226
|
+
"#{obj}"
|
|
227
|
+
when /^\d{3}$/
|
|
228
|
+
"0#{obj}"
|
|
229
|
+
else
|
|
230
|
+
"\"#{obj}\""
|
|
231
|
+
end
|
|
232
|
+
when Proc
|
|
233
|
+
obj.call # eh
|
|
217
234
|
when Array
|
|
218
235
|
# If we are sending a notifies with a second argument
|
|
219
236
|
if obj[1] && [:immediately, :delayed].include?(obj[1])
|
|
@@ -10,7 +10,7 @@ module PoolParty
|
|
|
10
10
|
|
|
11
11
|
attr_reader :properties_hash, :the_cloud
|
|
12
12
|
|
|
13
|
-
def initialize(hsh, contxt=
|
|
13
|
+
def initialize(hsh, contxt={:tmp_path => "/tmp/poolparty/testpool/testcloud"})
|
|
14
14
|
raise DependencyResolverException.new('must pass a hash') if hsh.nil? || !(hsh.instance_of?(OrderedHash) || hsh.instance_of?(Hash))
|
|
15
15
|
@properties_hash = hsh
|
|
16
16
|
@the_cloud = contxt
|
|
@@ -7,7 +7,7 @@ module PoolParty
|
|
|
7
7
|
module DependencyResolverCloudExtensions
|
|
8
8
|
def to_properties_hash
|
|
9
9
|
oh = {}
|
|
10
|
-
oh[:options] =
|
|
10
|
+
oh[:options] = dsl_options.merge(:cloud_name => name)
|
|
11
11
|
oh[:resources] = ordered_resources.map {|a| a.to_properties_hash }
|
|
12
12
|
# oh[:resources] = resources.keys.inject(OrderedHash.new) do |sum,k|
|
|
13
13
|
# sum.merge(k.to_sym => resources[k].map {|a| a.to_properties_hash } )
|
|
@@ -23,7 +23,7 @@ module PoolParty
|
|
|
23
23
|
# Adds the to_properties_hash method on top of resources, the lowest level
|
|
24
24
|
module DependencyResolverResourceExtensions
|
|
25
25
|
def to_properties_hash
|
|
26
|
-
|
|
26
|
+
{:pp_type => self.class.to_s.top_level_class}.merge!(dsl_options)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|
|
@@ -5,12 +5,6 @@ module PoolParty
|
|
|
5
5
|
|
|
6
6
|
class PuppetResolver< DependencyResolver
|
|
7
7
|
|
|
8
|
-
permitted_resource_options({
|
|
9
|
-
:global => [:require, :name],
|
|
10
|
-
:file => [:content, :mode, :user],
|
|
11
|
-
:exec => [:command, :path, :refreshonly]
|
|
12
|
-
})
|
|
13
|
-
|
|
14
8
|
def initialize(hsh=nil)
|
|
15
9
|
super(hsh)
|
|
16
10
|
end
|
|
@@ -71,11 +65,6 @@ module PoolParty
|
|
|
71
65
|
|
|
72
66
|
def permitted_option?(ty, key)
|
|
73
67
|
true
|
|
74
|
-
# if permitted_resource_options.has_key?(ty)
|
|
75
|
-
# permitted_resource_options[ty].include?(key) || true #permitted_resource_options[:global].include?(key)
|
|
76
|
-
# else
|
|
77
|
-
# true
|
|
78
|
-
# end
|
|
79
68
|
end
|
|
80
69
|
|
|
81
70
|
def hash_flush_out(hash, pre="", post="")
|
|
@@ -97,6 +86,10 @@ module PoolParty
|
|
|
97
86
|
"present"
|
|
98
87
|
end
|
|
99
88
|
end
|
|
89
|
+
|
|
90
|
+
if hsh.has_key?(:requires)
|
|
91
|
+
hsh[:require] = hsh.delete(:requires)
|
|
92
|
+
end
|
|
100
93
|
new_hsh ={}
|
|
101
94
|
hsh.each do |k,v|
|
|
102
95
|
new_hsh.merge!({k => to_option_string(v)})
|
|
@@ -126,26 +119,11 @@ module PoolParty
|
|
|
126
119
|
end
|
|
127
120
|
|
|
128
121
|
def handle_print_service(klassname, plugin, tabs)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
# plugin.each do |klasshash|
|
|
135
|
-
# # str << "\n#{tf(tabs+1)}#{compile(hsh,tabs+1)}"
|
|
136
|
-
# str << "#{tf(tabs)}case $#{klasshash[:options][:variable]} {"
|
|
137
|
-
# str << "#{klasshash[:services][:control_statements].map do |k,v|"\n#{tf(tabs+1)}#{k} : {#{compile(v.to_properties_hash, tabs+2)}#{tf(tabs+1)}\n#{tf(tabs)}}" end}"
|
|
138
|
-
# end
|
|
139
|
-
# str << "#{tf(tabs)}}"
|
|
140
|
-
# deprecated conditional
|
|
141
|
-
|
|
142
|
-
else
|
|
143
|
-
kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
|
|
144
|
-
str = "\n#{tf(tabs)}# #{kname}\n"
|
|
145
|
-
str << "#{tf(tabs)}class #{kname} {"
|
|
146
|
-
str << "\n#{tf(tabs+1)}#{compile(plugin,tabs+1)}"
|
|
147
|
-
str << "#{tf(tabs)}} include #{kname}"
|
|
148
|
-
end
|
|
122
|
+
kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
|
|
123
|
+
str = "\n#{tf(tabs)}# #{kname}\n"
|
|
124
|
+
str << "#{tf(tabs)}class #{kname} {"
|
|
125
|
+
str << "\n#{tf(tabs+1)}#{compile(plugin,tabs+1)}"
|
|
126
|
+
str << "#{tf(tabs)}} include #{kname}"
|
|
149
127
|
end
|
|
150
128
|
|
|
151
129
|
def handle_print_variable(name, value, tabs)
|
|
@@ -185,4 +163,4 @@ module PoolParty
|
|
|
185
163
|
|
|
186
164
|
end
|
|
187
165
|
|
|
188
|
-
end
|
|
166
|
+
end
|
|
@@ -9,10 +9,15 @@ module PoolParty
|
|
|
9
9
|
class Optioner
|
|
10
10
|
include Dslify
|
|
11
11
|
|
|
12
|
+
attr_accessor :loaded_pool, :loaded_clouds, :loaded_pools
|
|
13
|
+
|
|
14
|
+
dsl_methods :spec,
|
|
15
|
+
:num,
|
|
16
|
+
:cloudname,
|
|
17
|
+
:poolname
|
|
18
|
+
|
|
12
19
|
default_options( :verbose => false,
|
|
13
|
-
:quiet => false
|
|
14
|
-
:cloudname => false,
|
|
15
|
-
:poolname => false)
|
|
20
|
+
:quiet => false)
|
|
16
21
|
|
|
17
22
|
def initialize(args=[], opts={}, &block)
|
|
18
23
|
boolean_args << opts[:boolean_args] if opts.has_key?(:boolean_args)
|
|
@@ -75,8 +80,8 @@ module PoolParty
|
|
|
75
80
|
end
|
|
76
81
|
|
|
77
82
|
def parse_options(&blk)
|
|
78
|
-
self.spec
|
|
79
|
-
self.num
|
|
83
|
+
self.spec nil
|
|
84
|
+
self.num nil
|
|
80
85
|
|
|
81
86
|
progname = $0.include?("-") ? "#{::File.basename($0[/(\w+)-/, 1])} #{::File.basename($0[/-(.*)/, 1])}" : ::File.basename($0)
|
|
82
87
|
@opts = OptionParser.new
|
|
@@ -106,20 +111,20 @@ module PoolParty
|
|
|
106
111
|
@opts.parse(@arguments.dup)
|
|
107
112
|
|
|
108
113
|
process_options
|
|
109
|
-
output_options if verbose
|
|
114
|
+
output_options if verbose? && verbose
|
|
110
115
|
|
|
111
116
|
if @load_pools
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
117
|
+
@loaded_pool = load_pool( spec? ? spec : Binary.get_existing_spec_location)
|
|
118
|
+
@loaded_clouds = extract_cloud_from_options(self)
|
|
119
|
+
@loaded_pools = extract_pool_from_options(self)
|
|
115
120
|
|
|
116
121
|
reject_junk_options!
|
|
117
122
|
raise CloudNotFoundException.new("Please specify your cloud with -s, move it to ./clouds.rb or in your POOL_SPEC environment variable") unless loaded_clouds && !loaded_clouds.empty?
|
|
118
123
|
loaded_pools.each do |pl|
|
|
119
|
-
pl.
|
|
124
|
+
pl.dsl_options.merge!(self.options)
|
|
120
125
|
end
|
|
121
126
|
loaded_clouds.each do |cl|
|
|
122
|
-
cl.
|
|
127
|
+
cl.dsl_options.merge!(self.options)
|
|
123
128
|
end
|
|
124
129
|
end
|
|
125
130
|
end
|
|
@@ -147,10 +152,10 @@ module PoolParty
|
|
|
147
152
|
end
|
|
148
153
|
|
|
149
154
|
def extract_cloud_from_options(o)
|
|
150
|
-
o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
|
|
155
|
+
o.cloudname? ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
|
|
151
156
|
end
|
|
152
157
|
|
|
153
158
|
def extract_pool_from_options(o)
|
|
154
|
-
o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
|
|
159
|
+
o.poolname? ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
|
|
155
160
|
end
|
|
156
|
-
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module Installers
|
|
3
|
+
class BaseInstaller
|
|
4
|
+
|
|
5
|
+
include ::PoolParty::Remote
|
|
6
|
+
include ::PoolParty::Pinger
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
self.__send__ :welcome_message
|
|
10
|
+
commands.each {|c| self.__send__ c.to_sym }
|
|
11
|
+
self.__send__ :closing_message
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def welcome_message
|
|
15
|
+
welcome_msg = <<-EOE
|
|
16
|
+
We are going to take you through the installation process of PoolParty.
|
|
17
|
+
|
|
18
|
+
First, we'll setup your environment so using PoolParty will be a breeze
|
|
19
|
+
EOE
|
|
20
|
+
|
|
21
|
+
colored_say "Welcome to PoolParty!", :help
|
|
22
|
+
say welcome_msg
|
|
23
|
+
begin
|
|
24
|
+
t = colored_ask "Press enter to continue or Ctrl+C to exit"
|
|
25
|
+
rescue Exception => e
|
|
26
|
+
say <<-EOE
|
|
27
|
+
|
|
28
|
+
Cancelled PoolParty installation
|
|
29
|
+
|
|
30
|
+
You can always restart this by typing:
|
|
31
|
+
install-poolparty
|
|
32
|
+
EOE
|
|
33
|
+
exit 0
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def closing_message
|
|
39
|
+
closing_message = <<-EOE
|
|
40
|
+
You are now set to ride the waves with PoolParty! You'll notice there is a clouds.rb file in your current directory. You can start your new cloud
|
|
41
|
+
by typing:
|
|
42
|
+
|
|
43
|
+
cloud start
|
|
44
|
+
|
|
45
|
+
You can start your clouds.rb. More samples are available here:
|
|
46
|
+
http://github.com/auser/poolparty-examples/tree/master
|
|
47
|
+
EOE
|
|
48
|
+
say closing_message
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def commands
|
|
52
|
+
@commands ||= []
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
protected
|
|
56
|
+
|
|
57
|
+
def ask_with_help(opts={}, &block)
|
|
58
|
+
help_str = opts[:help]
|
|
59
|
+
message = opts[:message]
|
|
60
|
+
|
|
61
|
+
o = ask("#{message} (h for help)") do |q|
|
|
62
|
+
q.validate = opts[:validate] if opts.has_key?(:validate)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if %w(h H).include?(o)
|
|
66
|
+
colored_say help_str, :help
|
|
67
|
+
ask_with_help(opts, &block)
|
|
68
|
+
else
|
|
69
|
+
block.call(o)
|
|
70
|
+
end
|
|
71
|
+
o
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def rescued_ask(m, r)
|
|
75
|
+
begin
|
|
76
|
+
t = colored_ask m
|
|
77
|
+
rescue Exception => e
|
|
78
|
+
say r
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def colored_ask(str, color = :notice)
|
|
83
|
+
setup_colors
|
|
84
|
+
ask("<%= color(\"#{str}\", :#{color}) %>")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def colored_say(str, color = :headline)
|
|
88
|
+
setup_colors
|
|
89
|
+
say("<%= color(\"#{str}\", :#{color}) %>")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def setup_colors
|
|
93
|
+
unless @setup_colors
|
|
94
|
+
ft = HighLine::ColorScheme.new do |cs|
|
|
95
|
+
cs[:headline] = [ :bold, :yellow, :on_black ]
|
|
96
|
+
cs[:horizontal_line] = [ :bold, :white, :on_blue]
|
|
97
|
+
cs[:critical] = [ :yellow, :on_red ]
|
|
98
|
+
cs[:error] = [ :bold, :red ]
|
|
99
|
+
cs[:help] = [ :bold, :white, :on_blue]
|
|
100
|
+
cs[:notice] = [ :blue, :on_white]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
HighLine.color_scheme = ft
|
|
104
|
+
@setup_colors = true
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
Dir["#{::File.dirname(__FILE__)}/*.rb"].each {|lib| require lib }
|