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,5 +1,12 @@
|
|
|
1
|
+
$:.unshift(::File.dirname(__FILE__))
|
|
2
|
+
$:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/*")
|
|
3
|
+
$:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/dslify/lib")
|
|
4
|
+
$:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/parenting/lib")
|
|
5
|
+
|
|
6
|
+
require "default"
|
|
1
7
|
require "dslify"
|
|
2
8
|
require "parenting"
|
|
9
|
+
|
|
3
10
|
module PoolParty
|
|
4
11
|
|
|
5
12
|
def context_stack
|
|
@@ -7,10 +14,13 @@ module PoolParty
|
|
|
7
14
|
end
|
|
8
15
|
|
|
9
16
|
class PoolPartyBaseClass
|
|
10
|
-
|
|
17
|
+
attr_reader :init_opts
|
|
18
|
+
|
|
19
|
+
include Parenting, Dslify
|
|
11
20
|
|
|
12
21
|
include PoolParty::DependencyResolverCloudExtensions
|
|
13
|
-
# attr_accessor :depth
|
|
22
|
+
# attr_accessor :depth
|
|
23
|
+
default_options Default.dsl_options
|
|
14
24
|
|
|
15
25
|
def initialize(opts={}, extra_opts={}, &block)
|
|
16
26
|
add_to_parent_if_parent_exists_and_is_a_service
|
|
@@ -18,21 +28,25 @@ module PoolParty
|
|
|
18
28
|
@init_block = block
|
|
19
29
|
@base_name = get_name_from_options_and_extra_options(opts, extra_opts)
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
run_in_context(
|
|
24
|
-
super(&block)
|
|
31
|
+
@init_opts = (opts.is_a?(Hash) ? extra_opts.merge(opts) : extra_opts.merge(:name => @base_name))
|
|
32
|
+
|
|
33
|
+
run_in_context(init_opts, &block)
|
|
34
|
+
# super(init_opts, &block)
|
|
25
35
|
end
|
|
26
36
|
|
|
27
37
|
# Overloading the parent run_in_context
|
|
28
|
-
def run_in_context(o={}, &block)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
def run_in_context(o={}, &block)
|
|
39
|
+
context_stack.push self
|
|
40
|
+
set_vars_from_options(o)
|
|
41
|
+
instance_eval &block if block
|
|
42
|
+
context_stack.pop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def run_with_callbacks(o, &block)
|
|
46
|
+
run_in_context(o) do
|
|
47
|
+
before_load(o, &block)
|
|
48
|
+
yield if block_given?
|
|
49
|
+
loaded(o, &block)
|
|
36
50
|
end
|
|
37
51
|
end
|
|
38
52
|
|
|
@@ -46,7 +60,7 @@ module PoolParty
|
|
|
46
60
|
|
|
47
61
|
# Try to extract the name from the options
|
|
48
62
|
def get_name_from_options_and_extra_options(opts={}, extra_opts={})
|
|
49
|
-
opts.is_a?(Hash) ? (opts.has_key?(:name) ? opts
|
|
63
|
+
opts.is_a?(Hash) ? (opts.has_key?(:name) ? opts[:name] : nil) : dsl_options[:name] = opts
|
|
50
64
|
end
|
|
51
65
|
|
|
52
66
|
# Add to the services pool for the manifest listing
|
|
@@ -76,7 +90,7 @@ module PoolParty
|
|
|
76
90
|
# A word about stores, the global store stores the entire list of stored
|
|
77
91
|
# resources. The local resource store is available on all clouds and plugins
|
|
78
92
|
# which stores the instance variable's local resources.
|
|
79
|
-
def add_resource(ty, opts={}, extra_opts={}, &block)
|
|
93
|
+
def add_resource(ty, opts={}, extra_opts={}, &block)
|
|
80
94
|
temp_name = get_name_from_options_and_extra_options(opts, extra_opts)
|
|
81
95
|
|
|
82
96
|
if res = get_resource(ty, temp_name, opts)
|
|
@@ -137,24 +151,6 @@ module PoolParty
|
|
|
137
151
|
false
|
|
138
152
|
end
|
|
139
153
|
|
|
140
|
-
def method_missing(m,*a,&block)
|
|
141
|
-
if respond_to?(:this_context) && this_context != self && this_context.respond_to?(m)# && !self.is_a?(PoolParty::Resources::Resource)
|
|
142
|
-
this_context.send m, *a, &block
|
|
143
|
-
else
|
|
144
|
-
# if dsl_options.has_key?(m)
|
|
145
|
-
# dsl_options[m]
|
|
146
|
-
# elsif parent && parent.respond_to?(:dsl_options) && parent.dsl_options.has_key?(m)
|
|
147
|
-
# parent.dsl_options[m]
|
|
148
|
-
# elsif self.class.default_options.has_key?(m)
|
|
149
|
-
# self.class.default_options[m]
|
|
150
|
-
# elsif parent && parent.respond_to?(:dsl_options) && parent.default_options.has_key?(m)
|
|
151
|
-
# parent.default_options[m]
|
|
152
|
-
# else
|
|
153
|
-
super
|
|
154
|
-
# end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
154
|
# Adds two methods to the module
|
|
159
155
|
# Adds the method type:
|
|
160
156
|
# has_
|
|
@@ -167,7 +163,7 @@ module PoolParty
|
|
|
167
163
|
# TODO: Refactor nicely to include other types that don't accept ensure
|
|
168
164
|
def self.add_has_and_does_not_have_methods_for(typ=:file)
|
|
169
165
|
method_name = "__#{typ}"
|
|
170
|
-
|
|
166
|
+
ev=<<-EOE
|
|
171
167
|
def has_#{typ}(opts={}, extra={}, &block)
|
|
172
168
|
#{method_name}({:ensures => :present}.merge(handle_option_values(opts).merge(extra)), &block)
|
|
173
169
|
end
|
|
@@ -175,6 +171,16 @@ module PoolParty
|
|
|
175
171
|
#{method_name}({:ensures => :absent}.merge(handle_option_values(opts).merge(extra)), &block)
|
|
176
172
|
end
|
|
177
173
|
EOE
|
|
174
|
+
PoolParty::PoolPartyBaseClass.module_eval ev, ($pool_specfile || "")
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def self.add_resource_lookup_method(lookup_type=:file)
|
|
178
|
+
ev=<<-EOE
|
|
179
|
+
def #{lookup_type}s
|
|
180
|
+
ordered_resources.select {|q| q if q.class.to_s =~ /#{lookup_type.to_s.classify}/ }
|
|
181
|
+
end
|
|
182
|
+
EOE
|
|
183
|
+
PoolParty::PoolPartyBaseClass.module_eval ev, ($pool_specfile || "")
|
|
178
184
|
end
|
|
179
185
|
|
|
180
186
|
def handle_option_values(o)
|
|
@@ -61,6 +61,7 @@ module PoolParty
|
|
|
61
61
|
EOE
|
|
62
62
|
PoolParty::PoolPartyBaseClass.module_eval method
|
|
63
63
|
PoolParty::PoolPartyBaseClass.add_has_and_does_not_have_methods_for(lowercase_class_name.to_sym)
|
|
64
|
+
PoolParty::PoolPartyBaseClass.add_resource_lookup_method(lowercase_class_name)
|
|
64
65
|
|
|
65
66
|
available_resources << subclass
|
|
66
67
|
end
|
|
@@ -72,6 +73,13 @@ module PoolParty
|
|
|
72
73
|
@available_resources ||= []
|
|
73
74
|
end
|
|
74
75
|
|
|
76
|
+
dsl_methods :action,
|
|
77
|
+
:not_if,
|
|
78
|
+
:if_not,
|
|
79
|
+
:only_if,
|
|
80
|
+
:calls,
|
|
81
|
+
:requires
|
|
82
|
+
|
|
75
83
|
# This is set in order of descending precedence
|
|
76
84
|
# The options are overwritten from the bottom up
|
|
77
85
|
# and the resource will use those as the values
|
|
@@ -80,11 +88,12 @@ module PoolParty
|
|
|
80
88
|
# Finally, it uses the parent's options as the lowest priority
|
|
81
89
|
def initialize(opts={}, extra_opts={}, &block)
|
|
82
90
|
super(opts, extra_opts, &block)
|
|
83
|
-
|
|
91
|
+
|
|
84
92
|
@resource_name = @base_name
|
|
85
|
-
dsl_options[:name] =
|
|
93
|
+
# dsl_options[:name] = @init_opts[:name] unless dsl_options.has_key?(:name) && dsl_options[:name]
|
|
86
94
|
|
|
87
|
-
|
|
95
|
+
# p [:name, name, dsl_options, init_opts] # methods.sort.join(", ")
|
|
96
|
+
loaded(init_opts, &block)
|
|
88
97
|
|
|
89
98
|
after_create
|
|
90
99
|
end
|
|
@@ -98,14 +107,14 @@ module PoolParty
|
|
|
98
107
|
def resource_name
|
|
99
108
|
@resource_name ||= nil
|
|
100
109
|
end
|
|
101
|
-
|
|
102
|
-
def name(*args)
|
|
103
|
-
resource_name
|
|
104
|
-
end
|
|
105
|
-
|
|
110
|
+
|
|
106
111
|
# After create callback
|
|
107
112
|
def after_create
|
|
108
113
|
end
|
|
114
|
+
def before_load(o={}, &block)
|
|
115
|
+
end
|
|
116
|
+
def after_load(o={}, &block)
|
|
117
|
+
end
|
|
109
118
|
|
|
110
119
|
# We don't want to inherit the services on a resource, as resources
|
|
111
120
|
# are a base and should never have services.
|
|
@@ -129,33 +138,6 @@ module PoolParty
|
|
|
129
138
|
def class_type_name
|
|
130
139
|
self.class.to_s.top_level_class.underscore.downcase
|
|
131
140
|
end
|
|
132
|
-
def self.custom_function(str)
|
|
133
|
-
custom_functions << str
|
|
134
|
-
end
|
|
135
|
-
def self.custom_functions
|
|
136
|
-
@custom_functions ||= []
|
|
137
|
-
end
|
|
138
|
-
def custom_function(str)
|
|
139
|
-
self.class.custom_functions << str
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def self.custom_functions_to_string(pre="")
|
|
143
|
-
returning Array.new do |output|
|
|
144
|
-
PoolParty::Resources.available_custom_resources.each do |resource|
|
|
145
|
-
resource.custom_functions.each do |func|
|
|
146
|
-
output << "#{pre*2}#{func}"
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
end.join("\n")
|
|
150
|
-
end
|
|
151
|
-
# Some things in puppet aren't allowed, so let's override them here
|
|
152
|
-
def disallowed_options
|
|
153
|
-
[]
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def key
|
|
157
|
-
name
|
|
158
|
-
end
|
|
159
141
|
# def virtual_resource?
|
|
160
142
|
# false
|
|
161
143
|
# end
|
|
@@ -170,14 +152,6 @@ module PoolParty
|
|
|
170
152
|
true
|
|
171
153
|
end
|
|
172
154
|
|
|
173
|
-
def method_missing(m,*a,&block)
|
|
174
|
-
if parent && parent.dsl_options.has_key?(m) && is_in_plugin?
|
|
175
|
-
parent.send m, *a, &block
|
|
176
|
-
else
|
|
177
|
-
super
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
155
|
# Private method just for resource retrievling purposes
|
|
182
156
|
def class_name_sym
|
|
183
157
|
self.class.to_s.top_level_class.downcase.to_sym
|
|
@@ -210,4 +184,4 @@ module PoolParty
|
|
|
210
184
|
end
|
|
211
185
|
end
|
|
212
186
|
|
|
213
|
-
Dir["#{::File.dirname(__FILE__)}/../resources/*.rb"].each {|lib| require "#{lib}"}
|
|
187
|
+
Dir["#{::File.dirname(__FILE__)}/../resources/*.rb"].each {|lib| require "#{lib}"}
|
|
@@ -4,12 +4,8 @@ module PoolParty
|
|
|
4
4
|
|
|
5
5
|
include PoolParty::DependencyResolverCloudExtensions
|
|
6
6
|
|
|
7
|
-
def initialize(o={}, &block)
|
|
8
|
-
super(o, &block)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
7
|
def to_properties_hash
|
|
12
|
-
{ :pp_type => "plugin", :options =>
|
|
8
|
+
{ :pp_type => "plugin", :options => dsl_options,
|
|
13
9
|
:name => self.class.to_s.top_level_class,
|
|
14
10
|
:resources => ordered_resources.map {|a| a.to_properties_hash }}
|
|
15
11
|
end
|
|
@@ -13,6 +13,8 @@ module PoolParty
|
|
|
13
13
|
|
|
14
14
|
# List of gems that are default to install
|
|
15
15
|
def self.gem_list
|
|
16
|
+
# auser-dslify
|
|
17
|
+
# auser-parenting
|
|
16
18
|
@gem_list ||= %w( logging
|
|
17
19
|
rake
|
|
18
20
|
xml-simple
|
|
@@ -26,22 +28,23 @@ module PoolParty
|
|
|
26
28
|
grempe-amazon-ec2
|
|
27
29
|
ohai
|
|
28
30
|
chef
|
|
29
|
-
auser-dslify
|
|
30
|
-
auser-parenting
|
|
31
31
|
adamwiggins-rest-client
|
|
32
32
|
rack
|
|
33
33
|
thin
|
|
34
|
+
logging
|
|
35
|
+
ruby2ruby
|
|
34
36
|
)
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
# Default options for the boot_strapper
|
|
38
|
-
@defaults = ::PoolParty::Default.
|
|
40
|
+
@defaults = ::PoolParty::Default.dsl_options.merge({
|
|
39
41
|
:full_keypair_path => "#{ENV["AWS_KEYPAIR_NAME"]}" || "~/.ssh/id_rsa",
|
|
40
42
|
:installer => 'apt-get',
|
|
41
43
|
:dependency_resolver => 'chef'
|
|
42
44
|
})
|
|
43
45
|
class <<self; attr_reader :defaults; end
|
|
44
46
|
|
|
47
|
+
attr_reader :cloud_name
|
|
45
48
|
# In case the method is being called on ourself, let's check the
|
|
46
49
|
# defaults hash to see if it's available there
|
|
47
50
|
def method_missing(m,*a,&block)
|
|
@@ -58,6 +61,7 @@ module PoolParty
|
|
|
58
61
|
self.class.defaults.merge(opts).to_instance_variables(self)
|
|
59
62
|
@target_host = host
|
|
60
63
|
@cloud = opts[:cloud]
|
|
64
|
+
@cloud_name = @cloud.name
|
|
61
65
|
|
|
62
66
|
instance_eval &block if block
|
|
63
67
|
@cloud.call_before_bootstrap_callbacks if @cloud
|
|
@@ -79,27 +83,27 @@ module PoolParty
|
|
|
79
83
|
def pack_the_dependencies
|
|
80
84
|
# Add the keypair to the instance... shudder
|
|
81
85
|
::Suitcase::Zipper.add(keypair, "keys")
|
|
82
|
-
|
|
86
|
+
edge_pp_gem = Dir["#{Default.vendor_path}/../pkg/*poolparty*gem"].pop
|
|
83
87
|
# Use the locally built poolparty gem if it is availabl
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
if edge_pp_gem
|
|
89
|
+
puts "using edge poolparty: #{::File.expand_path(edge_pp_gem)}"
|
|
90
|
+
::Suitcase::Zipper.add(edge_pp_gem, 'gems')
|
|
91
|
+
else
|
|
92
|
+
vputs "using gem auser-poolparty. use rake build to use edge"
|
|
93
|
+
self.class.gem_list << 'auser-poolparty'
|
|
94
|
+
end
|
|
91
95
|
# Add the gems to the suitcase
|
|
92
96
|
puts "Adding default gem dependencies"
|
|
93
|
-
::Suitcase::Zipper.gems self.class.gem_list, "#{
|
|
97
|
+
::Suitcase::Zipper.gems self.class.gem_list, "#{cloud.tmp_path}/trash/dependencies"
|
|
94
98
|
|
|
95
99
|
::Suitcase::Zipper.packages( "http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz",
|
|
96
|
-
"#{
|
|
100
|
+
"#{cloud.tmp_path}/trash/dependencies/packages")
|
|
97
101
|
# ::Suitcase::Zipper.add("templates/")
|
|
98
102
|
|
|
99
103
|
::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.ru", "/etc/poolparty/")
|
|
100
104
|
::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.god", "/etc/poolparty/")
|
|
101
105
|
|
|
102
|
-
::Suitcase::Zipper.add("#{
|
|
106
|
+
::Suitcase::Zipper.add("#{cloud.tmp_path}/trash/dependencies/cache", "gems")
|
|
103
107
|
|
|
104
108
|
::Suitcase::Zipper.add("#{::File.join(File.dirname(__FILE__), '..', 'templates', 'gemrc_template' )}", "etc/poolparty")
|
|
105
109
|
|
|
@@ -108,7 +112,7 @@ module PoolParty
|
|
|
108
112
|
{:instances => instances.flatten.compact}.to_json,
|
|
109
113
|
"neighborhood.json", "/etc/poolparty")
|
|
110
114
|
|
|
111
|
-
::Suitcase::Zipper.build_dir!("#{
|
|
115
|
+
::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dependencies")
|
|
112
116
|
|
|
113
117
|
::Suitcase::Zipper.flush!
|
|
114
118
|
|
|
@@ -118,8 +122,8 @@ module PoolParty
|
|
|
118
122
|
# The commands to setup a PoolParty enviornment
|
|
119
123
|
def default_commands
|
|
120
124
|
pack_the_dependencies
|
|
121
|
-
::FileUtils.rm_rf "#{
|
|
122
|
-
rsync "#{
|
|
125
|
+
::FileUtils.rm_rf "#{cloud.tmp_path}/dependencies/gems/cache"
|
|
126
|
+
rsync "#{cloud.tmp_path}/dependencies", '/var/poolparty'
|
|
123
127
|
|
|
124
128
|
commands << [
|
|
125
129
|
"mkdir -p /etc/poolparty",
|
|
@@ -137,16 +141,17 @@ module PoolParty
|
|
|
137
141
|
"cd ../ && rm -rf rubygems-1.3.1*",
|
|
138
142
|
"gem source --add http://gems.github.com",
|
|
139
143
|
"cd /var/poolparty/dependencies/gems/",
|
|
140
|
-
"gem install --no-rdoc --no-ri
|
|
144
|
+
"gem install --no-rdoc --no-ri --ignore-dependencies *.gem",
|
|
141
145
|
"cd /var/poolparty/dependencies",
|
|
142
146
|
"cp /var/poolparty/dependencies/etc/poolparty/* /etc/poolparty/",
|
|
143
147
|
'touch /var/poolparty/POOLPARTY.PROGRESS',
|
|
144
148
|
"mkdir -p /root/.ssh",
|
|
145
149
|
"cp /var/poolparty/dependencies/keys/* /root/.ssh/",
|
|
146
|
-
"chmod 600 /root/.ssh/#{
|
|
150
|
+
"chmod 600 /root/.ssh/#{keypair_name}",
|
|
147
151
|
# "god -c /etc/poolparty/monitor.god",
|
|
148
152
|
"mkdir -p /var/log/poolparty/",
|
|
149
153
|
"thin -R /etc/poolparty/monitor.ru -p 8642 --pid /var/run/stats_monitor.pid --daemon -l /var/log/poolparty/monitor.log start 2>/dev/null",
|
|
154
|
+
"tail /var/log/poolparty/monitor.log",
|
|
150
155
|
'echo "bootstrap" >> /var/poolparty/POOLPARTY.PROGRESS']
|
|
151
156
|
commands << self.class.class_commands unless self.class.class_commands.empty?
|
|
152
157
|
end
|
|
@@ -14,10 +14,10 @@ module PoolParty
|
|
|
14
14
|
end
|
|
15
15
|
def self.files_to_upload
|
|
16
16
|
[
|
|
17
|
-
"#{Default.tmp_path}/dr_configure/chef/solo.rb",
|
|
18
|
-
"#{Default.tmp_path}/dr_configure/chef/dna.json",
|
|
19
|
-
"#{Default.base_config_directory}/chef/solo.rb",
|
|
20
|
-
"#{Default.base_config_directory}/chef/dna.json"
|
|
17
|
+
# "#{Default.tmp_path}/dr_configure/chef/solo.rb",
|
|
18
|
+
# "#{Default.tmp_path}/dr_configure/chef/dna.json",
|
|
19
|
+
# "#{Default.base_config_directory}/chef/solo.rb",
|
|
20
|
+
# "#{Default.base_config_directory}/chef/dna.json"
|
|
21
21
|
]
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -31,13 +31,14 @@ module PoolParty
|
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
attr_reader :cloud, :keypair, :run_count
|
|
34
|
+
attr_reader :cloud, :keypair, :run_count, :cloud_name
|
|
35
35
|
|
|
36
36
|
def initialize(host, opts={}, &block)
|
|
37
37
|
self.class.defaults.merge(opts).to_instance_variables(self)
|
|
38
38
|
@target_host = host
|
|
39
39
|
@configurator = "::PoolParty::Provision::#{dependency_resolver.capitalize}".constantize
|
|
40
40
|
@cloud = opts[:cloud]
|
|
41
|
+
@cloud_name = @cloud.name
|
|
41
42
|
@keypair = @cloud.keypair
|
|
42
43
|
@run_count = 0
|
|
43
44
|
|
|
@@ -50,15 +51,15 @@ module PoolParty
|
|
|
50
51
|
private
|
|
51
52
|
|
|
52
53
|
def prescribe_configuration
|
|
53
|
-
::FileUtils.mkdir_p "#{
|
|
54
|
-
::File.cp $pool_specfile, "#{
|
|
55
|
-
::File.open "#{
|
|
54
|
+
::FileUtils.mkdir_p "#{cloud.tmp_path}/dr_configure" unless ::File.directory?("#{cloud.tmp_path}/dr_configure")
|
|
55
|
+
::File.cp $pool_specfile, "#{cloud.tmp_path}/dr_configure/clouds.rb"
|
|
56
|
+
::File.open "#{cloud.tmp_path}/dr_configure/clouds.json", "w" do |f|
|
|
56
57
|
f << cloud.to_properties_hash.to_json
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
setup_configurator
|
|
60
61
|
# write_erlang_cookie
|
|
61
|
-
@configurator.files_to_upload.each {|f| ::FileUtils.cp f, "#{
|
|
62
|
+
@configurator.files_to_upload.each {|f| ::FileUtils.cp f, "#{cloud.tmp_path}/dr_configure/#{::File.basename(f)}" if ::File.file?(f) }
|
|
62
63
|
|
|
63
64
|
pack_up_and_ship_off_suitcase
|
|
64
65
|
run_commands
|
|
@@ -106,8 +107,8 @@ module PoolParty
|
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
def pack_up_and_ship_off_suitcase
|
|
109
|
-
::Suitcase::Zipper.build_dir!("#{
|
|
110
|
-
rsync "#{
|
|
110
|
+
::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dr_configure")
|
|
111
|
+
rsync "#{cloud.tmp_path}/dr_configure/", "/var/poolparty/dr_configure/", ['-a --stats']
|
|
111
112
|
end
|
|
112
113
|
|
|
113
114
|
# Pack up monitors verifiers plugins directories in the same direcotry as your clouds.rb and send to nodes.
|
|
@@ -115,7 +116,7 @@ module PoolParty
|
|
|
115
116
|
# @cloud.write_properties_hash("#{Default.tmp_path}/properties_hash.rb")
|
|
116
117
|
#TODO: move to puppet class
|
|
117
118
|
#TODO: remove or conditionalize this puppet specific task
|
|
118
|
-
@cloud.build_and_store_new_config_file("#{
|
|
119
|
+
@cloud.build_and_store_new_config_file("#{cloud.tmp_path}/dr_configure/poolparty.pp")
|
|
119
120
|
|
|
120
121
|
%w(monitors verifiers plugins).each do |dir|
|
|
121
122
|
@cloud.pack_user_directory dir
|
|
@@ -129,8 +130,8 @@ module PoolParty
|
|
|
129
130
|
def write_erlang_cookie
|
|
130
131
|
# cookie = (1..16).collect { chars[rand(chars.size)] }.pack("C*")
|
|
131
132
|
cookie = (1..65).collect {rand(9)}.join()
|
|
132
|
-
cookie_file = ::File.open("#{
|
|
133
|
-
::File.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{
|
|
133
|
+
cookie_file = ::File.open("#{cloud.tmp_path}/dr_configure/erlang.cookie", 'w+'){|f| f << cookie }
|
|
134
|
+
::File.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{cloud.tmp_path}/dr_configure/"
|
|
134
135
|
end
|
|
135
136
|
|
|
136
137
|
def self.class_commands
|
|
@@ -32,10 +32,14 @@ The cron resource will set cron jobs at the intervals you set
|
|
|
32
32
|
=end
|
|
33
33
|
class Cron < Resource
|
|
34
34
|
|
|
35
|
-
default_options(
|
|
35
|
+
default_options(
|
|
36
36
|
:command => nil,
|
|
37
|
-
:user => "root"
|
|
38
|
-
|
|
37
|
+
:user => "root",
|
|
38
|
+
:minute => "*",
|
|
39
|
+
:hour => "*",
|
|
40
|
+
:month => "*",
|
|
41
|
+
:weekday => "*"
|
|
42
|
+
)
|
|
39
43
|
|
|
40
44
|
def present
|
|
41
45
|
:create
|
|
@@ -25,6 +25,7 @@ Ensure a command is run on the instances
|
|
|
25
25
|
|
|
26
26
|
class Exec < Resource
|
|
27
27
|
|
|
28
|
+
dsl_methods :cwd, :creates, :command
|
|
28
29
|
default_options({
|
|
29
30
|
:path => ["/usr/bin:/bin:/usr/local/bin:$PATH"]
|
|
30
31
|
})
|
|
@@ -38,7 +39,7 @@ Ensure a command is run on the instances
|
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
def after_create
|
|
41
|
-
|
|
42
|
+
dsl_options[:name] = dsl_options[:command] unless dsl_options[:name]
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
end
|
|
@@ -29,11 +29,21 @@ To write a file to the template directory, use:
|
|
|
29
29
|
== Example
|
|
30
30
|
has_file(:name => '/etc/motd', :content => 'Hey and welcome to your node today!')
|
|
31
31
|
=end
|
|
32
|
-
class File < Resource
|
|
32
|
+
class File < Resource
|
|
33
33
|
has_searchable_paths(:dir => "templates")
|
|
34
34
|
|
|
35
|
+
dsl_methods :name, # The name, the full path of the file
|
|
36
|
+
:owner, # String that describes the owner of the file
|
|
37
|
+
:content, # A string that describes the content of the file
|
|
38
|
+
:template, # The file that describes the content of the file
|
|
39
|
+
:render_as # Render the content (Erb) (default: Erb)
|
|
40
|
+
|
|
41
|
+
default_options(
|
|
42
|
+
:mode => "644" # A string indicating the mode of the file
|
|
43
|
+
)
|
|
44
|
+
|
|
35
45
|
def loaded(o={}, &block)
|
|
36
|
-
|
|
46
|
+
has_directory ::File.dirname(name)
|
|
37
47
|
end
|
|
38
48
|
|
|
39
49
|
def present
|
|
@@ -47,24 +57,28 @@ To write a file to the template directory, use:
|
|
|
47
57
|
def after_create
|
|
48
58
|
run_render = dsl_options.include?(:render_as) ? dsl_options.delete(:render_as) : false
|
|
49
59
|
|
|
50
|
-
if dsl_options
|
|
60
|
+
if dsl_options[:template]
|
|
51
61
|
filename = find_file(dsl_options.delete(:template))
|
|
52
62
|
file = ::File.basename( filename )
|
|
53
63
|
raise TemplateNotFound.new("no template given") unless file
|
|
54
64
|
|
|
55
|
-
template_opts = (parent ?
|
|
56
|
-
|
|
65
|
+
template_opts = (parent ? dsl_options.merge(parent.dsl_options) : dsl_options)
|
|
66
|
+
dsl_options.merge!(:content => run_render ? Template.compile_file(filename, template_opts.merge(:renderer => run_render)).gsub("\"", "\"") : open(filename).read)
|
|
57
67
|
end
|
|
58
68
|
|
|
59
69
|
if dsl_options.include?(:content)
|
|
60
70
|
cont = dsl_options.delete(:content)
|
|
61
|
-
template_opts = (parent ?
|
|
62
|
-
|
|
71
|
+
template_opts = (parent ? dsl_options.merge(parent.dsl_options) : dsl_options).merge(:renderer => run_render)
|
|
72
|
+
dsl_options.merge!(:content => run_render ? Template.compile_string(cont, template_opts) : cont)
|
|
63
73
|
end
|
|
64
74
|
end
|
|
65
75
|
|
|
66
|
-
def method_missing m, *a, &block
|
|
67
|
-
|
|
76
|
+
# def method_missing m, *a, &block
|
|
77
|
+
# super rescue ::File.send(m, *a, &block)
|
|
78
|
+
# end
|
|
79
|
+
|
|
80
|
+
def variable(k,v)
|
|
81
|
+
set_default_options(k => v)
|
|
68
82
|
end
|
|
69
83
|
|
|
70
84
|
end
|
|
@@ -25,10 +25,11 @@ The host parameter sets hosts on the instances. Setting this, every node will ha
|
|
|
25
25
|
class Host < Resource
|
|
26
26
|
|
|
27
27
|
default_options({
|
|
28
|
+
:ip => "127.0.0.1"
|
|
28
29
|
})
|
|
29
30
|
|
|
30
31
|
def aka(i=nil)
|
|
31
|
-
i ?
|
|
32
|
+
i ? dsl_options[:alias] = i : dsl_options[:alias]
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
end
|
|
@@ -43,7 +43,7 @@ To write a file to the template directory, use:
|
|
|
43
43
|
})
|
|
44
44
|
|
|
45
45
|
def source(arg=nil)
|
|
46
|
-
arg ?
|
|
46
|
+
arg ? dsl_options[:source] = arg : "#{Default.fileserver_base}/#{::File.basename(name)}"
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
end
|