auser-poolparty 1.3.5 → 1.3.6
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/Rakefile +2 -2
- data/VERSION.yml +1 -1
- data/bin/cloud-misc +34 -0
- data/bin/{poolparty-setup → cloud-setup} +0 -0
- data/bin/cloud-ssh +4 -1
- data/config/jeweler.rb +4 -3
- data/examples/monitored_cloud.rb +1 -1
- data/examples/thrift/thrift_example.rb +5 -3
- data/examples/vmware.rb +10 -0
- data/lib/cloud_providers/cloud_provider_instance.rb +13 -4
- data/lib/cloud_providers/connections.rb +1 -1
- data/lib/core/file.rb +12 -0
- data/lib/dependency_resolvers/base.rb +1 -1
- data/lib/dependency_resolvers/chef.rb +7 -5
- data/lib/dependency_resolvers/proxy_object.rb +11 -3
- data/lib/poolparty.rb +3 -1
- data/lib/poolparty/base.rb +1 -2
- data/lib/poolparty/cloud.rb +20 -5
- data/lib/poolparty/default.rb +1 -0
- data/lib/poolparty/plugin.rb +1 -5
- data/lib/poolparty/plugins/apache.rb +8 -6
- data/lib/poolparty/plugins/collectd.rb +24 -0
- data/lib/poolparty/plugins/collectd/templates/collectd.conf.erb +369 -0
- data/lib/poolparty/plugins/hermes.rb +89 -0
- data/lib/poolparty/pool.rb +26 -3
- data/lib/poolparty/resource.rb +12 -11
- data/lib/poolparty/resources/line.rb +2 -2
- data/lib/poolparty/resources/variable.rb +4 -3
- data/lib/proto/command_interface_handler.rb +17 -1
- data/lib/proto/gen-py/cloudthrift/CommandInterface.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/__init__.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/constants.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/ttypes.pyc +0 -0
- data/lib/proto/gen-py/thrift/Thrift.pyc +0 -0
- data/lib/proto/gen-py/thrift/__init__.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/TBinaryProtocol.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/TProtocol.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/__init__.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/TSocket.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/TTransport.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/__init__.pyc +0 -0
- data/test/lib/dependency_resolvers/chef_test.rb +92 -100
- data/test/lib/poolparty/cloud_test.rb +50 -2
- data/test/lib/poolparty/monitor_test.rb +2 -2
- data/test/lib/poolparty/resource_test.rb +5 -0
- data/test/lib/poolparty/resources/variable_test.rb +33 -10
- metadata +11 -4
data/Rakefile
CHANGED
@@ -39,8 +39,8 @@ end
|
|
39
39
|
|
40
40
|
# Generate documentation
|
41
41
|
Rake::RDocTask.new do |rd|
|
42
|
-
rd.main = "
|
43
|
-
rd.rdoc_files.include("
|
42
|
+
rd.main = "README.rdoc"
|
43
|
+
rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
|
44
44
|
rd.rdoc_dir = "rdoc"
|
45
45
|
# rd.template = "hanaa"
|
46
46
|
end
|
data/VERSION.yml
CHANGED
data/bin/cloud-misc
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib")
|
3
|
+
require "poolparty"
|
4
|
+
|
5
|
+
require 'git-style-binary/command'
|
6
|
+
|
7
|
+
GitStyleBinary.command do
|
8
|
+
banner <<-EOS
|
9
|
+
Usage: #{$0} #{all_options_string}
|
10
|
+
|
11
|
+
read the code
|
12
|
+
EOS
|
13
|
+
|
14
|
+
short_desc "various cloud development tasks"
|
15
|
+
|
16
|
+
opt :inst_num, "The number of the instance to run bootstrap on", :type => :int
|
17
|
+
opt :force, "Force rebootstrapping (useful for upgrading)", :default => false
|
18
|
+
|
19
|
+
run do |command|
|
20
|
+
@loaded_clouds.each do |cld|
|
21
|
+
cld.nodes.each do |node|
|
22
|
+
|
23
|
+
case command.argv.shift
|
24
|
+
when "deploy_hermes"
|
25
|
+
hermesdir = File.dirname(__FILE__) + "/../vendor/erlang/hermes"
|
26
|
+
release = `#{hermesdir}/scripts/most_recent_release tar.gz`.strip
|
27
|
+
node.scp(:source => release, :destination => "/var/poolparty/tmp")
|
28
|
+
node.scp(:source => "#{hermesdir}/scripts/target_system", :destination => "/var/poolparty/tmp")
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
File without changes
|
data/bin/cloud-ssh
CHANGED
@@ -13,11 +13,14 @@ EOS
|
|
13
13
|
|
14
14
|
short_desc "ssh into an instance of the cloud"
|
15
15
|
|
16
|
+
opt :instance_number, "Ssh into the instance number", :type => :integer, :default => 0
|
17
|
+
|
16
18
|
run do |command|
|
17
19
|
cloud = @loaded_clouds.first
|
18
20
|
|
19
21
|
if !cloud.nodes.empty?
|
20
|
-
cloud.nodes
|
22
|
+
inst = cloud.nodes[command[:instance_number]]
|
23
|
+
inst ? inst.ssh : puts("Error: The instance number (#{command[:instance_number]}) is too high for the current number of instances")
|
21
24
|
else
|
22
25
|
puts "No running instances can be found"
|
23
26
|
end
|
data/config/jeweler.rb
CHANGED
@@ -26,11 +26,12 @@ end
|
|
26
26
|
|
27
27
|
s.files = (%w(Rakefile README.rdoc License.txt VERSION.yml) + Dir["{config,examples,lib,test,tasks,script,generators,bin,vendor}/**/*"])
|
28
28
|
|
29
|
-
s.files.exclude '
|
30
|
-
s.files.exclude
|
29
|
+
s.files.exclude 'vendor/erlang/*'
|
30
|
+
s.files.exclude 'examples/thrift/**/*.beam'
|
31
|
+
# s.files.exclude "**/*/erl_crash.dump"
|
31
32
|
|
32
33
|
s.has_rdoc = true
|
33
|
-
s.extra_rdoc_files = ["README.
|
34
|
+
s.extra_rdoc_files = ["README.rdoc", "License.txt", 'History.txt']
|
34
35
|
s.require_paths = ["lib"]
|
35
36
|
s.rdoc_options = ['--quiet', '--title', 'PoolParty documentation',
|
36
37
|
# "index.html",
|
data/examples/monitored_cloud.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
$:.unshift(File.dirname(__FILE__) + "/../../lib")
|
4
4
|
$:.unshift(File.dirname(__FILE__) + "/../../examples")
|
5
5
|
require "poolparty"
|
6
|
-
require "simple"
|
6
|
+
# require "simple"
|
7
7
|
|
8
8
|
$:.unshift("#{File.dirname(__FILE__)}/../../lib/proto/gen-rb")
|
9
9
|
|
@@ -15,6 +15,7 @@ require "poolparty_types"
|
|
15
15
|
port = ARGV.pop || 11223
|
16
16
|
|
17
17
|
transport = Thrift::BufferedTransport.new(Thrift::Socket.new('localhost', port))
|
18
|
+
# transport = Thrift::BufferedTransport.new(Thrift::Socket.new('vm', port))
|
18
19
|
protocol = Thrift::BinaryProtocol.new(transport)
|
19
20
|
|
20
21
|
client = CloudThrift::CommandInterface::Client.new(protocol)
|
@@ -22,6 +23,7 @@ transport.open()
|
|
22
23
|
|
23
24
|
cld = CloudThrift::CloudQuery.new
|
24
25
|
cld.name = 'monitored_app'
|
26
|
+
# cld.name = 'vmware'
|
25
27
|
|
26
28
|
resp = client.run_command(cld, "name", [])
|
27
29
|
puts resp.response
|
@@ -29,8 +31,8 @@ puts resp.response
|
|
29
31
|
resp = client.run_command(cld, "maximum_instances", [])
|
30
32
|
puts resp.response
|
31
33
|
|
32
|
-
resp = client.run_command(cld, "run_monitor", ["cpu", "0.91"])
|
34
|
+
resp = client.run_command(cld, "run_monitor", ["cpu-idle", "0.91"])
|
33
35
|
p resp.response
|
34
36
|
|
35
|
-
resp = client.run_command(cld, "run_monitor", ["cpu", "0.01"])
|
37
|
+
resp = client.run_command(cld, "run_monitor", ["cpu-idle", "0.01"])
|
36
38
|
p resp.response
|
data/examples/vmware.rb
CHANGED
@@ -10,9 +10,19 @@ pool "poolparty" do
|
|
10
10
|
image_id "/Users/nmurray/Documents/VMware/Ubuntu-jaunty.vmwarevm/Ubuntu-jaunty.vmx"
|
11
11
|
public_ip "192.168.133.128"
|
12
12
|
end
|
13
|
+
has_hermes
|
13
14
|
has_file "/etc/motd", :content => "welcome to your instance"
|
14
15
|
|
15
16
|
has_convenience_helpers
|
16
17
|
end
|
17
18
|
|
18
19
|
end
|
20
|
+
|
21
|
+
# hermes
|
22
|
+
# want to be able to run cloud configure to update it
|
23
|
+
# but want to be able to pull from locally to configure it
|
24
|
+
# submodules?
|
25
|
+
# node name
|
26
|
+
# install path
|
27
|
+
# how to upload the escript target system
|
28
|
+
# how to upload the tar.gz of the release
|
@@ -66,16 +66,16 @@ module CloudProviders
|
|
66
66
|
bootstrap! unless bootstrapped?
|
67
67
|
callback :before_configure
|
68
68
|
raise StandardError.new("You must pass in a cloud to configure an instance") unless cloud
|
69
|
-
cloud.compile(self)
|
69
|
+
cloud.compile(self)
|
70
|
+
|
70
71
|
scp(:source => keypair.full_filepath,
|
71
72
|
:destination => "/etc/poolparty/keys/#{keypair.basename}")
|
72
|
-
script_file = Provision::Bootstrapper.configure_script(cloud, os)
|
73
73
|
|
74
74
|
FileUtils.mkdir_p cloud.tmp_path/"etc"/"poolparty" unless File.directory?(cloud.tmp_path/"etc"/"poolparty")
|
75
|
-
|
75
|
+
pack_clouds_dot_rb_and_expected_directories
|
76
76
|
|
77
|
+
dputs("Rsyncing #{cloud.tmp_path/"*"}")
|
77
78
|
rsync(:source => cloud.tmp_path/"*", :destination => "/")
|
78
|
-
run("chmod +x /etc/poolparty/#{File.basename(script_file)}; /bin/sh /etc/poolparty/#{File.basename(script_file)}").chomp
|
79
79
|
run(cloud.dependency_resolver.compile_command)
|
80
80
|
callback :after_configure
|
81
81
|
end
|
@@ -95,6 +95,15 @@ module CloudProviders
|
|
95
95
|
end
|
96
96
|
alias :platform :os # Chef uses platform, aliased for conveneince
|
97
97
|
|
98
|
+
def pack_clouds_dot_rb_and_expected_directories
|
99
|
+
%w(lib plugins).each do |dir|
|
100
|
+
if File.directory?(d = cloud.clouds_dot_rb_dir/dir)
|
101
|
+
dputs("Adding local path: #{d}")
|
102
|
+
FileUtils.cp_r d, cloud.tmp_path/cloud.base_config_directory, :verbose => true, :remove_destination => true # req'd for symlinks
|
103
|
+
end
|
104
|
+
end
|
105
|
+
FileUtils.cp cloud.clouds_dot_rb_file, cloud.tmp_path/"/etc/poolparty/clouds.rb"
|
106
|
+
end
|
98
107
|
# Determine the os
|
99
108
|
# Default to ubuntu
|
100
109
|
# Send the determine_os.sh script to the node and run it remotely
|
@@ -51,7 +51,7 @@ module CloudProviders
|
|
51
51
|
raise StandardError.new("You must pass a :source=>uri option to rsync") unless opts[:source]
|
52
52
|
destination_path = opts[:destination] || opts[:source]
|
53
53
|
rsync_opts = opts[:rsync_opts] || '-va'
|
54
|
-
cmd_string = "rsync -e 'ssh #{ssh_options}' #{rsync_opts} #{opts[:source]} #{user}@#{host}:#{destination_path}"
|
54
|
+
cmd_string = "rsync -L -e 'ssh #{ssh_options}' #{rsync_opts} #{opts[:source]} #{user}@#{host}:#{destination_path}"
|
55
55
|
out = system_run(cmd_string)
|
56
56
|
out
|
57
57
|
end
|
data/lib/core/file.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class File
|
2
|
+
class << self
|
3
|
+
alias_method :old_symlink, :symlink
|
4
|
+
def symlink(old_name, new_name)
|
5
|
+
begin
|
6
|
+
old_symlink(old_name, new_name)
|
7
|
+
rescue Errno::EEXIST
|
8
|
+
$stderr.puts "warning: symlinking #{old_name} -> #{new_name}. Already exists"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -111,7 +111,7 @@ module DependencyResolvers
|
|
111
111
|
when Symbol
|
112
112
|
":#{obj}"
|
113
113
|
when Hash
|
114
|
-
"#{obj.map {|k,v| ":#{k} => #{handle_print_variable(v)}" unless v == obj }.compact.join("
|
114
|
+
"{#{obj.map {|k,v| ":#{k} => #{handle_print_variable(v)}" unless v == obj }.compact.join(",")}}"
|
115
115
|
else
|
116
116
|
"#{obj}"
|
117
117
|
end
|
@@ -159,13 +159,15 @@ module DependencyResolvers
|
|
159
159
|
file_pointers.each do |n,f|
|
160
160
|
f << "\n#{n} Mash.new unless attribute?(\"#{n}\")\n"
|
161
161
|
end
|
162
|
-
variables.each do |var|
|
163
|
-
|
164
|
-
var_val = handle_print_variable(ProxyObject.new(var, @caller).compile(:value))
|
162
|
+
variables.each do |var|
|
165
163
|
if var.parent && !var.parent.is_a?(PoolParty::Cloud)
|
166
|
-
file_pointers[var.parent.has_method_name] << "#{var.parent.has_method_name}[:#{var.name}] =
|
164
|
+
file_pointers[var.parent.has_method_name] << "#{var.parent.has_method_name}[:#{var.name}] ="
|
165
|
+
file_pointers[var.parent.has_method_name] << ProxyObject.new(var, @caller).compile(:value)
|
166
|
+
file_pointers[var.parent.has_method_name] << "\n"
|
167
167
|
else
|
168
|
-
file_pointers[:poolparty] << "poolparty[:#{var.name}] =
|
168
|
+
file_pointers[:poolparty] << "poolparty[:#{var.name}] = "
|
169
|
+
file_pointers[:poolparty] << ProxyObject.new(var, @caller).compile(:value)
|
170
|
+
file_pointers[:poolparty] << "\n"
|
169
171
|
end
|
170
172
|
end
|
171
173
|
# Close the files
|
@@ -32,15 +32,18 @@ module DependencyResolvers
|
|
32
32
|
meth_name
|
33
33
|
when Symbol
|
34
34
|
@current_printing_method = meth_name
|
35
|
-
self.send(meth_name)
|
35
|
+
self.send(meth_name)
|
36
36
|
else
|
37
37
|
raise PoolParty::PoolPartyError.create("ProxyObjectError", "Compilation of #{proxy.inspect} error. Strings and symbols are supported")
|
38
38
|
end
|
39
|
+
|
40
|
+
str = handle_print_variable(str) if proxy.class == PoolParty::Resources::Variable
|
41
|
+
|
39
42
|
begin
|
40
43
|
ERB.new(str).result(self.send(:binding))
|
41
44
|
rescue Exception => e
|
42
|
-
|
43
|
-
end
|
45
|
+
""
|
46
|
+
end
|
44
47
|
end
|
45
48
|
|
46
49
|
# Print the dsl options in the Erb string format
|
@@ -73,6 +76,11 @@ module DependencyResolvers
|
|
73
76
|
end.join("\n")
|
74
77
|
end
|
75
78
|
|
79
|
+
# Print variables
|
80
|
+
def handle_print_variable(var)
|
81
|
+
DependencyResolvers::Base.handle_print_variable(var)
|
82
|
+
end
|
83
|
+
|
76
84
|
def instance
|
77
85
|
@caller
|
78
86
|
end
|
data/lib/poolparty.rb
CHANGED
data/lib/poolparty/base.rb
CHANGED
@@ -37,8 +37,7 @@ module PoolParty
|
|
37
37
|
# - stack
|
38
38
|
def run_in_context(o={}, &block)
|
39
39
|
proc = Proc.new do
|
40
|
-
# Name MUST be set first
|
41
|
-
set_vars_from_options(:name => o[:name]) if o.has_key?(:name)
|
40
|
+
set_vars_from_options(:name => o[:name]) if o.has_key?(:name) # Name MUST be set first
|
42
41
|
set_vars_from_options(o)
|
43
42
|
instance_eval &block if block
|
44
43
|
end
|
data/lib/poolparty/cloud.rb
CHANGED
@@ -27,6 +27,8 @@ module PoolParty
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def before_compile
|
30
|
+
add_monitoring_stack_if_needed
|
31
|
+
|
30
32
|
validate_all_resources
|
31
33
|
end
|
32
34
|
|
@@ -61,7 +63,7 @@ module PoolParty
|
|
61
63
|
end
|
62
64
|
|
63
65
|
# Cloud provider methods
|
64
|
-
def nodes(o={}); delayed_action {cloud_provider.nodes(o)}; end
|
66
|
+
def nodes(o={}); delayed_action {cloud_provider.nodes(o).collect{|n| n.cloud = self; n}}; end
|
65
67
|
def run_instance(o={}); cloud_provider.run_instance(o);end
|
66
68
|
def terminate_instance!(o={}); cloud_provider.terminate_instance!(o);end
|
67
69
|
def describe_instances(o={}); cloud_provider.describe_instances(o);end
|
@@ -87,7 +89,7 @@ module PoolParty
|
|
87
89
|
|
88
90
|
# 1.) Launches a new instance,
|
89
91
|
# 2.) Waits for the instance to get an ip address
|
90
|
-
# 3.) Waits for port
|
92
|
+
# 3.) Waits for port ssh_port to be open
|
91
93
|
# 4.) Calls call_after_launch_instance callbacks
|
92
94
|
# 5.) Executes passed &block, if any
|
93
95
|
# 6.) Returns the new instance object
|
@@ -98,7 +100,7 @@ module PoolParty
|
|
98
100
|
instance.cloud = self
|
99
101
|
@instance = instance
|
100
102
|
#wait for an ip and then wait for ssh port, then configure instance
|
101
|
-
if instance.wait_for_public_ip(timeout) && instance.wait_for_port(
|
103
|
+
if instance.wait_for_public_ip(timeout) && instance.wait_for_port(ssh_port, :timeout=>timeout)
|
102
104
|
callback :after_launch_instance
|
103
105
|
instance.callback :before_bootstrap
|
104
106
|
instance.bootstrap!
|
@@ -109,7 +111,7 @@ module PoolParty
|
|
109
111
|
block.call(instance) if block
|
110
112
|
instance
|
111
113
|
else
|
112
|
-
raise StandardError.new("Instance port
|
114
|
+
raise StandardError.new("Instance port #{ssh_port} not available")
|
113
115
|
end
|
114
116
|
instance.refresh!
|
115
117
|
instance
|
@@ -126,7 +128,7 @@ module PoolParty
|
|
126
128
|
|
127
129
|
# convenience method to loop thru all the nodes and configure them
|
128
130
|
def configure!(opts={}, threaded=true)
|
129
|
-
nodes.collect{|n| n.configure!}
|
131
|
+
nodes.collect{|n| n.configure! }
|
130
132
|
end
|
131
133
|
|
132
134
|
# Run command/s on all nodes in the cloud.
|
@@ -177,6 +179,19 @@ module PoolParty
|
|
177
179
|
end
|
178
180
|
end
|
179
181
|
|
182
|
+
# Add the monitoring stack
|
183
|
+
def add_monitoring_stack_if_needed
|
184
|
+
if monitors.size > 0
|
185
|
+
|
186
|
+
run_in_context do
|
187
|
+
%w(collectd hermes).each do |m|
|
188
|
+
self.send m.to_sym
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
180
195
|
# Take the cloud's resources and compile them down using
|
181
196
|
# the defined (or the default dependency_resolver, chef)
|
182
197
|
def compile(caller=nil)
|
data/lib/poolparty/default.rb
CHANGED
data/lib/poolparty/plugin.rb
CHANGED
@@ -2,11 +2,7 @@
|
|
2
2
|
Simply a stub class for documentation purposes
|
3
3
|
Plugins are all resources
|
4
4
|
=end
|
5
|
-
module PoolParty
|
6
|
-
class Plugin
|
7
|
-
end
|
8
|
-
end
|
9
5
|
|
10
|
-
%w(apache git rails).each do |plugin|
|
6
|
+
%w(apache git rails collectd hermes).each do |plugin|
|
11
7
|
require "plugins/#{plugin}"
|
12
8
|
end
|
@@ -50,7 +50,7 @@ module PoolParty
|
|
50
50
|
passenger_configs
|
51
51
|
|
52
52
|
has_exec "install_passenger_script" do
|
53
|
-
command "passenger-install-apache2-module
|
53
|
+
command "passenger-install-apache2-module --auto"
|
54
54
|
notifies get_exec("restart-apache2"), :run
|
55
55
|
requires get_exec("restart-apache2")
|
56
56
|
requires get_package("apache2")
|
@@ -157,14 +157,16 @@ PassengerRuby <%= @node[:languages][:ruby][:ruby_bin] %>
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def install_site(name, opts={})
|
160
|
-
|
160
|
+
sitename = name
|
161
|
+
|
162
|
+
opts.merge!(:name => "/etc/apache2/sites-available/#{sitename}")
|
161
163
|
has_directory(:name => "/etc/apache2/sites-available")
|
162
164
|
has_file(opts) unless opts[:no_file]
|
163
|
-
has_exec(:name => "/usr/sbin/a2ensite #{
|
165
|
+
has_exec(:name => "/usr/sbin/a2ensite #{sitename}") do
|
164
166
|
notifies get_exec("reload-apache2"), :run
|
165
167
|
requires get_exec("reload-apache2")
|
166
|
-
requires get_file("/etc/apache2/sites-available/#{
|
167
|
-
not_if "/bin/sh -c '[ -L /etc/apache2/sites-enabled/#{
|
168
|
+
requires get_file("/etc/apache2/sites-available/#{sitename}")
|
169
|
+
not_if "/bin/sh -c '[ -L /etc/apache2/sites-enabled/#{sitename} ] && [ /etc/apache2/sites-enabled/#{sitename} -ef /etc/apache2/sites-available/#{sitename} ]'"
|
168
170
|
end
|
169
171
|
end
|
170
172
|
|
@@ -202,4 +204,4 @@ end
|
|
202
204
|
$:.unshift(File.dirname(__FILE__))
|
203
205
|
%w(php5 virtual_host passenger_site).each do |lib|
|
204
206
|
require "apache2/#{lib}"
|
205
|
-
end
|
207
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module PoolParty
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
class Collectd < Resource
|
5
|
+
|
6
|
+
PoolParty::Resources::FileResource.has_searchable_paths(:prepend_paths=> [File.dirname(__FILE__)+'/collectd/templates'])
|
7
|
+
|
8
|
+
def after_loaded
|
9
|
+
has_package 'collectd'
|
10
|
+
%w(rrdtool librrd-dev librrd-ruby libsensors-dev libsnmp-dev collectd collectd-dev).each{|pkg|
|
11
|
+
has_package pkg
|
12
|
+
}
|
13
|
+
has_gem_package "astro-collectd"
|
14
|
+
|
15
|
+
has_variable 'server', "localhost"
|
16
|
+
has_file '/etc/collectd/collectd.conf' do
|
17
|
+
template 'collectd.conf.erb'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|