auser-poolparty 1.1.7 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/README.txt +10 -7
- data/Rakefile +0 -1
- data/VERSION.yml +2 -2
- data/bin/cloud-osxcopy +1 -1
- data/bin/cloud-setup-dev +1 -1
- data/bin/cloud-spec +0 -1
- data/bin/cloud-terminate +7 -1
- data/bin/cloud-verify +30 -0
- data/examples/basic.rb +3 -6
- data/examples/fairchild.rb +17 -21
- data/examples/maize.rb +37 -0
- data/lib/poolparty/base_packages/haproxy.rb +6 -6
- data/lib/poolparty/base_packages/heartbeat.rb +1 -43
- data/lib/poolparty/base_packages/poolparty.rb +1 -3
- data/lib/poolparty/modules/cloud_dsl.rb +10 -2
- data/lib/poolparty/modules/cloud_resourcer.rb +0 -4
- data/lib/poolparty/net/init.rb +1 -1
- data/lib/poolparty/net/remote_instance.rb +0 -27
- data/lib/poolparty/net/remoter/cloud_control.rb +0 -177
- data/lib/poolparty/net/remoter/interactive.rb +5 -16
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +1 -10
- data/lib/poolparty/plugins/apache2.rb +53 -0
- data/lib/poolparty/plugins/deploy_directory.rb +16 -14
- data/lib/poolparty/plugins/gem_package.rb +24 -0
- data/lib/poolparty/plugins/line_in_file.rb +16 -0
- data/lib/poolparty/poolparty/plugin.rb +8 -6
- data/lib/poolparty/provision/dr_configure.rb +1 -0
- data/lib/poolparty/resources.rb +42 -0
- data/lib/poolparty/resources/cron.rb +30 -1
- data/lib/poolparty/resources/directory.rb +23 -0
- data/lib/poolparty/resources/exec.rb +22 -0
- data/lib/poolparty/resources/file.rb +28 -0
- data/lib/poolparty/resources/host.rb +22 -1
- data/lib/poolparty/resources/mount.rb +24 -0
- data/lib/poolparty/resources/package.rb +29 -13
- data/lib/poolparty/resources/remote_file.rb +32 -0
- data/lib/poolparty/resources/service.rb +20 -0
- data/lib/poolparty/resources/sshkey.rb +22 -0
- data/lib/poolparty/resources/symlink.rb +30 -0
- data/lib/poolparty/resources/variable.rb +25 -0
- data/lib/poolparty/templates/php.ini.erb +1253 -0
- data/lib/poolparty/verification/verifiers/ping.rb +5 -0
- data/lib/poolparty/verification/verify.rb +2 -0
- data/spec/bin/fixtures/bin_cloud_for_test.rb +0 -6
- data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +0 -6
- data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +0 -10
- data/spec/poolparty/spec_helper.rb +0 -1
- data/tasks/spec.rake +2 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +0 -10
- data/test/poolparty/verification/verify_test.rb +3 -3
- data/vendor/chef/apache2/attributes/apache.rb +1 -1
- data/vendor/gems/parenting/Manifest.txt +2 -1
- data/vendor/gems/parenting/lib/parenting.rb +1 -1
- data/vendor/gems/parenting/parenting.gemspec +2 -2
- metadata +8 -70
- data/bin/messenger-get-current-nodes +0 -14
- data/bin/server-become-master +0 -24
- data/bin/server-build-messenger +0 -28
- data/bin/server-clean-cert-for +0 -15
- data/bin/server-provision +0 -32
- data/bin/server-start-agent +0 -15
- data/bin/server-start-client +0 -29
- data/bin/server-start-master +0 -26
- data/bin/server-start-node +0 -32
- data/bin/server-stop-client +0 -3
- data/bin/server-stop-master +0 -3
- data/bin/server-stop-node +0 -3
- data/bin/server-update-hosts +0 -49
- data/lib/poolparty/capistrano.rb +0 -54
- data/lib/poolparty/capistrano/cloud_tasks.rb +0 -10
- data/lib/poolparty/config/postlaunchmessage.txt +0 -5
- data/lib/poolparty/net/messenger.rb +0 -57
- data/lib/poolparty/plugins/rsyncmirror.rb +0 -28
- data/lib/poolparty/services/conditional.rb +0 -46
- data/lib/poolparty/spec.rb +0 -31
- data/lib/poolparty/spec/core/string.rb +0 -18
- data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
- data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
- data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
- data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
- data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
- data/lib/poolparty/spec/matchers/have_file.rb +0 -28
- data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
- data/lib/poolparty/spec/matchers/have_git.rb +0 -28
- data/lib/poolparty/spec/matchers/have_host.rb +0 -28
- data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
- data/lib/poolparty/spec/matchers/have_package.rb +0 -28
- data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
- data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
- data/lib/poolparty/spec/matchers/have_service.rb +0 -28
- data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
- data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
- data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
- data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
- data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
- data/lib/poolparty/spec/templates/have_base.rb +0 -28
- data/spec/poolparty/net/messenger_spec.rb +0 -16
- data/spec/poolparty/services/conditional_spec.rb +0 -52
- data/spec/poolparty/spec/core/string_spec.rb +0 -57
@@ -1,28 +1,12 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Remote
|
3
3
|
|
4
|
-
# #DEPRECATE We'll stub the ip to be the master ip for ease and accessibility
|
5
|
-
# def ip(i=nil)
|
6
|
-
# puts "DEPRECATED: ip will only be callable against a RemoteInstance in the next release."
|
7
|
-
# i ? options[:ip] = i : (master ? master.ip : options[:ip])
|
8
|
-
# end
|
9
|
-
# #DEPRECATE: get the master instance
|
10
|
-
def master
|
11
|
-
puts "DEPRECATED: 'master' is deprecated and will be removed in the next major release."
|
12
|
-
get_instance_by_number(0)
|
13
|
-
end
|
14
|
-
|
15
4
|
# Select a list of instances based on their status
|
16
5
|
def nodes(hsh={})
|
17
6
|
# _nodes[hsh] ||=
|
18
7
|
list_of_instances.select_with_hash(hsh)
|
19
8
|
end
|
20
9
|
|
21
|
-
# Cache the instances_by_status here
|
22
|
-
def _nodes
|
23
|
-
@_nodes ||= {}
|
24
|
-
end
|
25
|
-
|
26
10
|
# Select the list of instances, either based on the neighborhoods
|
27
11
|
# loaded from /etc/poolparty/neighborhood.json
|
28
12
|
# or by the remote_base on keypair
|
@@ -34,6 +18,11 @@ module PoolParty
|
|
34
18
|
end
|
35
19
|
|
36
20
|
private
|
21
|
+
# Cache the instances_by_status here
|
22
|
+
def _nodes
|
23
|
+
@_nodes ||= {}
|
24
|
+
end
|
25
|
+
|
37
26
|
# List the instances for the current key pair, regardless of their states
|
38
27
|
# If no keypair is passed, select them all
|
39
28
|
def _list_of_instances(select={})
|
@@ -74,6 +74,7 @@ module PoolParty
|
|
74
74
|
return describe_instances.first if o[:instance_id].nil?
|
75
75
|
describe_instances.detect {|a| a[:name] == o[:instance_id] || a[:ip] == o[:instance_id] || a[:instance_id] == o[:instance_id] }
|
76
76
|
end
|
77
|
+
# TODO: Clean up this method and remove hostnames
|
77
78
|
def describe_instances(o={})
|
78
79
|
id = 0
|
79
80
|
get_instances_description(options.merge(o)).each_with_index do |h,i|
|
@@ -137,16 +138,6 @@ module PoolParty
|
|
137
138
|
associate_address(inst)
|
138
139
|
end
|
139
140
|
end
|
140
|
-
|
141
|
-
# Attach a volume to the instance
|
142
|
-
# DEPRECATE this relies on master. master will be removed in next major release. This method will be in ec2_remote_instance instead, or require an instance id
|
143
|
-
def attach_volume(instance=nil)
|
144
|
-
if ebs_volume_id
|
145
|
-
vputs "Attaching volume #{ebs_volume_id} to the master at #{ebs_volume_device}"
|
146
|
-
instance = master
|
147
|
-
ec2.attach_volume(:volume_id => ebs_volume_id, :instance_id => instance.instance_id, :device => ebs_volume_device) if ebs_volume_id && ebs_volume_mount_point
|
148
|
-
end
|
149
|
-
end
|
150
141
|
|
151
142
|
# Associate an address with the instance using ec2
|
152
143
|
# Get the next_unused_elastic_ip
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module PoolParty
|
2
|
+
class Base
|
3
|
+
plugin :apache do
|
4
|
+
|
5
|
+
# Called after the plugin is loaded entirely, all the options are set, etc.
|
6
|
+
def loaded(o={}, &block)
|
7
|
+
include_chef_recipe chef_apache2_recipe_root # We want to include the chef apache2 recipe to use it
|
8
|
+
end
|
9
|
+
|
10
|
+
def present_apache_module(*names)
|
11
|
+
names.each do |name|
|
12
|
+
has_chef_recipe "apache2::mod_" + name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def chef_apache2_recipe_root
|
18
|
+
"#{::File.dirname(__FILE__)}/../../../vendor/chef/apache2"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
# Usage:°
|
25
|
+
#°
|
26
|
+
# enable_php5 do
|
27
|
+
# extras :cli, :pspell, :mysql
|
28
|
+
# end
|
29
|
+
virtual_resource(:enable_php5) do
|
30
|
+
def loaded(opts={}, parent=self)
|
31
|
+
has_package("php5")
|
32
|
+
has_package("libapache2-mod-php5")
|
33
|
+
present_apache_module("php5")
|
34
|
+
has_file({:name => "/etc/php5/apache2/php.ini",
|
35
|
+
:template => File.dirname(__FILE__) + "/../templates/php.ini.erb",
|
36
|
+
:mode => 755,
|
37
|
+
:requires => get_package("libapache2-mod-php5")})
|
38
|
+
# :notify => get_exec("reload-apache2")})
|
39
|
+
end
|
40
|
+
|
41
|
+
def extras(*names)
|
42
|
+
names.each do |name|
|
43
|
+
# has_package(:name => "php5-#{name}", :requires => get_package("php5"))
|
44
|
+
has_package(:name => "php5-#{name}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -1,18 +1,22 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module PoolParty
|
2
|
+
|
3
|
+
=begin rdoc
|
4
|
+
== Deploy Directory
|
5
|
+
|
6
|
+
The deploy directory will copy the source directory from the developer machine (i.e. your laptop) to /tmp/poolparty, and then rsync it to the specified target directory on the cloud nodes.
|
7
|
+
|
8
|
+
== Usage
|
9
|
+
|
10
|
+
has_deploy_directory(has_deploy_directory 'bob',
|
11
|
+
:from => "~/path/to/my/site",
|
12
|
+
:to => "/mnt",
|
13
|
+
:owner => 'www-data'
|
14
|
+
|
15
|
+
This will place the contents of ~/path/to/my/site from your machine to /mnt/bob on the cloud instances virtual_resource(:deploy_directory)
|
3
16
|
|
4
|
-
Deploy directory will rsync a local directory to
|
5
|
-
each instance of your cloud.
|
6
|
-
|
7
|
-
example:
|
8
|
-
has_directory 'name', :from => '/local/path', :to => '/path/on/server/'
|
9
|
-
|
10
|
-
The above example will place the contents of '/local/path' at '/path/on/server/name'
|
11
17
|
=end
|
12
|
-
|
18
|
+
|
13
19
|
class Deploydirectory
|
14
|
-
|
15
|
-
virtual_resource(:deploy_directory) do
|
16
20
|
|
17
21
|
def loaded(opts={}, &block)
|
18
22
|
add_unpack_directory
|
@@ -40,8 +44,6 @@ module PoolParty
|
|
40
44
|
end
|
41
45
|
|
42
46
|
end
|
43
|
-
|
44
|
-
end
|
45
47
|
|
46
48
|
end
|
47
49
|
end
|
@@ -4,6 +4,30 @@ module PoolParty
|
|
4
4
|
# You can optionally pass a :download_url if you want a specific gem or version installed
|
5
5
|
# example:
|
6
6
|
# has_gem_package :name => 'rubot', :download_url => 'http://rubyforge.org/frs/download.php/35089/rubot-base-0.0.1.gem'
|
7
|
+
|
8
|
+
=begin rdoc
|
9
|
+
== Gempackage
|
10
|
+
|
11
|
+
Gempackages describe distributed gems on the cloud. The gem is only downloaded once and then hosted on the master if a download url is given.
|
12
|
+
|
13
|
+
== Usage
|
14
|
+
|
15
|
+
has_gempackage(:name => '...') do
|
16
|
+
# More options.
|
17
|
+
# This block is optional
|
18
|
+
end
|
19
|
+
|
20
|
+
== Options
|
21
|
+
|
22
|
+
* <tt>name</tt> The gem name
|
23
|
+
* <tt>download_url</tt> The location of the gem to download and server across the instances
|
24
|
+
* <tt>version</tt> The gem version requirement (optional and useless if download_url is given)
|
25
|
+
* <tt>source</tt> The gem source (optional and useless matter if download_url is given)
|
26
|
+
|
27
|
+
== Examples
|
28
|
+
has_gempackage(:name => 'rake',
|
29
|
+
:download_url => 'http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem')
|
30
|
+
=end
|
7
31
|
|
8
32
|
class GempackageResource
|
9
33
|
|
@@ -1,4 +1,20 @@
|
|
1
1
|
module PoolParty
|
2
|
+
=begin rdoc
|
3
|
+
|
4
|
+
|
5
|
+
== Line in File
|
6
|
+
|
7
|
+
Ensures that the line given is in the file
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
has_line_in_file('line', '/full/file/path.ext')
|
12
|
+
|
13
|
+
== Examples
|
14
|
+
|
15
|
+
has_line_in_file("ENABLED=1", "/etc/default/haproxy")
|
16
|
+
=end
|
17
|
+
|
2
18
|
class LineInFile
|
3
19
|
|
4
20
|
virtual_resource(:line_in_file) do
|
@@ -8,22 +8,20 @@ module PoolParty
|
|
8
8
|
include CloudResourcer
|
9
9
|
include PoolParty::DependencyResolverCloudExtensions
|
10
10
|
include PoolParty::Callbacks
|
11
|
-
|
12
|
-
default_options({})
|
13
11
|
|
14
12
|
def initialize(opts={}, prnt=nil, &block)
|
13
|
+
setup_callbacks
|
15
14
|
before_load(opts, &block)
|
16
15
|
|
17
16
|
block = Proc.new {enable} unless block
|
18
|
-
|
19
|
-
@opts = opts
|
17
|
+
|
18
|
+
@opts = (opts.is_a?(Hash) ? opts : {:name => opts})
|
20
19
|
super(opts, &block)
|
21
20
|
|
22
21
|
run_in_context do
|
23
22
|
loaded @opts, &block
|
24
23
|
end
|
25
|
-
|
26
|
-
setup_callbacks
|
24
|
+
|
27
25
|
after_create
|
28
26
|
end
|
29
27
|
|
@@ -41,6 +39,10 @@ module PoolParty
|
|
41
39
|
def is_plugin?
|
42
40
|
true
|
43
41
|
end
|
42
|
+
def cloud
|
43
|
+
@parent
|
44
|
+
end
|
45
|
+
|
44
46
|
def bootstrap_gems *gems
|
45
47
|
gems.each do |g|
|
46
48
|
Provision::BootStrapper.gem_list << g unless Provision::BootStrapper.gem_list.include?(g)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module PoolParty
|
2
|
+
=begin rdoc
|
3
|
+
|
4
|
+
Resources are items that poolparty can make available in your clouds.
|
5
|
+
Resources are used in the <tt>clouds.rb</tt>, and in Plugins.
|
6
|
+
Plugins are collections of resources.
|
7
|
+
|
8
|
+
All of these resources can be defined as <tt>has_resource</tt> and <tt>does_not_have_resource</tt>:
|
9
|
+
|
10
|
+
* <tt>has_</tt>
|
11
|
+
example <tt>has_file(...)</tt>
|
12
|
+
* <tt>does_not_have_</tt>
|
13
|
+
For example: <tt>does_not_have_file(...)</tt>
|
14
|
+
|
15
|
+
== Resources
|
16
|
+
|
17
|
+
|
18
|
+
see PoolParty::Resources::File
|
19
|
+
|
20
|
+
* +has_file+ PoolParty::Resources::File
|
21
|
+
* +has_package+ PoolParty::Resources::Package
|
22
|
+
* +has_gempackage+ PoolParty::Resources::GempackageResource
|
23
|
+
* +has_exec+ PoolParty::Resources::Exec
|
24
|
+
* +has_variable+ (for templates) PoolParty::Resources::Variable
|
25
|
+
* +has_line_in_file+ PoolParty::Resources::LineInFile
|
26
|
+
* +has_remotefile+ PoolParty::Resources::Remotefile
|
27
|
+
* +hash_cron+ PoolParty::Resources::Cron
|
28
|
+
* +has_host+ PoolParty::Resources::Host
|
29
|
+
* +has_service+ PoolParty::Resources::Service
|
30
|
+
* +has_symlink+ PoolParty::Resources::Symlink
|
31
|
+
* +has_directory+ PoolParty::Resources::Directory
|
32
|
+
* +has_deploy_directory+ PoolParty::Resources::Deploydirectory
|
33
|
+
* +has_mount+ PoolParty::Resources::Mount
|
34
|
+
|
35
|
+
== Helper methods
|
36
|
+
* execute_if
|
37
|
+
|
38
|
+
=end
|
39
|
+
|
40
|
+
module Resources
|
41
|
+
end
|
42
|
+
end
|
@@ -1,6 +1,35 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
|
-
|
3
|
+
=begin rdoc
|
4
|
+
== Cron
|
5
|
+
|
6
|
+
The cron resource will set cron jobs at the intervals you set
|
7
|
+
|
8
|
+
== Usage
|
9
|
+
|
10
|
+
has_cron(:name => '...') do
|
11
|
+
# More options.
|
12
|
+
# This block is optional
|
13
|
+
end
|
14
|
+
|
15
|
+
== Options
|
16
|
+
|
17
|
+
* <tt>name</tt> The name of the cronjob
|
18
|
+
* <tt>user</tt> The users who owns the cronjob
|
19
|
+
* <tt>command</tt> The cronjob command to run
|
20
|
+
* <tt>minute</tt> Set the minute of the cronjob
|
21
|
+
* <tt>hour</tt> Set the hour of the cronjob
|
22
|
+
* <tt>month</tt> Set the month of the cronjob
|
23
|
+
* <tt>monthday</tt> Set the day of the month of the cronjob
|
24
|
+
* <tt>weekday</tt> Set the weekday of the cronjob, in 0-6 format, where 0 is Sunday
|
25
|
+
|
26
|
+
== Example
|
27
|
+
|
28
|
+
has_cron(:name => "report mailer", :minute => "5", :hour => "0", :weekday => 1) do
|
29
|
+
command "/bin/sh /home/user/email_reports.sh"
|
30
|
+
end
|
31
|
+
|
32
|
+
=end
|
4
33
|
class Cron < Resource
|
5
34
|
|
6
35
|
default_options({
|
@@ -1,6 +1,29 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
3
|
|
4
|
+
=begin rdoc rdoc
|
5
|
+
== Directory
|
6
|
+
|
7
|
+
The directory resource is used to describe a directory that should be present
|
8
|
+
on all of the instances.
|
9
|
+
|
10
|
+
== Usage
|
11
|
+
|
12
|
+
has_directory 'name', :from => '/local/path', :to => '/path/on/server/'
|
13
|
+
|
14
|
+
The above example will place the contents of '/local/path' at '/path/on/server/name'
|
15
|
+
|
16
|
+
has_directory(:name => '/etc/apache2')
|
17
|
+
|
18
|
+
== Options
|
19
|
+
|
20
|
+
* <tt>name</tt> Describe the location of the file with the name
|
21
|
+
* <tt>mode</tt> Describe the mode of the file (default: 644)
|
22
|
+
* <tt>owner</tt> The owner of the file (default: poolparty user)
|
23
|
+
|
24
|
+
=end
|
25
|
+
|
26
|
+
|
4
27
|
class Directory < Resource
|
5
28
|
|
6
29
|
def present
|
@@ -1,5 +1,27 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
|
+
=begin rdoc rdoc
|
4
|
+
== Exec
|
5
|
+
|
6
|
+
Ensure a command is run on the instances
|
7
|
+
|
8
|
+
== Usage
|
9
|
+
|
10
|
+
has_exec(:name => '...') do
|
11
|
+
# More options.
|
12
|
+
# This block is optional
|
13
|
+
end
|
14
|
+
|
15
|
+
== Options
|
16
|
+
|
17
|
+
* <tt>name</tt> The name of your exec. This is optional, but nice for debugging purposes
|
18
|
+
* <tt>cwd</tt> Current working directory to execute the command (optional)
|
19
|
+
* <tt>command</tt> This describes the command to run
|
20
|
+
* <tt>path</tt> The path to run the command with (optional)
|
21
|
+
|
22
|
+
== Examples
|
23
|
+
has_exec(:name => 'start messenger', :command => 'server-start-node', :requires => get_gempackage('poolparty-latest', :onlyif => 'ps aux | grep beam | grep master')
|
24
|
+
=end
|
3
25
|
|
4
26
|
class Exec < Resource
|
5
27
|
|
@@ -1,6 +1,34 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
3
|
|
4
|
+
=begin rdoc rdoc
|
5
|
+
== File
|
6
|
+
|
7
|
+
The file resource is used to describe a file that should be present on all of the instances.
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
has_file(:name => '...') do
|
12
|
+
# More options.
|
13
|
+
# This block is optional
|
14
|
+
end
|
15
|
+
|
16
|
+
== Options
|
17
|
+
|
18
|
+
* <tt>name</tt> Describe the location of the file with the name
|
19
|
+
* <tt>mode</tt> Describe the mode of the file (default: 644)
|
20
|
+
* <tt>owner</tt> The owner of the file (default: poolparty user)
|
21
|
+
* <tt>content</tt> The contents of the file
|
22
|
+
* <tt>source</tt> Used to describe a file that is hosted on the master instance.
|
23
|
+
* <tt>template</tt> The file contents are described with the template. The location given must be readable
|
24
|
+
|
25
|
+
To write a file to the template directory, use:
|
26
|
+
|
27
|
+
copy_template_to_storage_directory(filepath)
|
28
|
+
|
29
|
+
== Example
|
30
|
+
has_file(:name => '/etc/motd', :content => 'Hey and welcome to your node today!')
|
31
|
+
=end
|
4
32
|
class File < Resource
|
5
33
|
|
6
34
|
def loaded(o={}, &block)
|
@@ -1,6 +1,27 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
|
-
|
3
|
+
=begin rdoc
|
4
|
+
|
5
|
+
== Host
|
6
|
+
|
7
|
+
The host parameter sets hosts on the instances. Setting this, every node will have the host.
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
has_host(:name => '...') do
|
12
|
+
# More options.
|
13
|
+
# This block is optional
|
14
|
+
end
|
15
|
+
|
16
|
+
== Options
|
17
|
+
|
18
|
+
* <tt>name</tt>The name of the instance
|
19
|
+
* <tt>ip</tt> IP address of the instance for the host entry
|
20
|
+
|
21
|
+
== Examples
|
22
|
+
|
23
|
+
has_host({:name => "other_machine", :ip => 192.168.0.101 })
|
24
|
+
=end
|
4
25
|
class Host < Resource
|
5
26
|
|
6
27
|
default_options({
|