auser-poolparty 1.1.7 → 1.2.0
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 +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({
|