diff --git a/attributes/default.rb b/attributes/default.rb index 230ff77..395c7e2 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -18,10 +18,28 @@ # default[:collectd][:base_dir] = "/var/lib/collectd" -default[:collectd][:plugin_dir] = "/usr/lib/collectd" + +case node['platform'] +when "debian","ubuntu" + default[:collectd][:plugin_dir] = "/usr/lib/collectd" + default[:collectd][:config_dir] = "/etc/collectd" + default[:collectd][:config_file] = "/etc/collectd/collectd.conf" +when "redhat","centos","scientific","fedora","suse" + default[:collectd][:plugin_dir] = "/usr/lib64/collectd" + default[:collectd][:config_dir] = "/etc/collectd.d" + default[:collectd][:config_file] = "/etc/collectd.conf" +else + default[:collectd][:plugin_dir] = "/usr/lib/collectd" + default[:collectd][:config_dir] = "/etc/collectd.d" + default[:collectd][:config_file] = "/etc/collectd.conf" +end + default[:collectd][:types_db] = ["/usr/share/collectd/types.db"] default[:collectd][:interval] = 10 default[:collectd][:read_threads] = 5 +default[:collectd][:fqdn_lookup] = true +default[:collectd][:hostname] = node[:fqdn] +default[:collectd][:servers] = [] default[:collectd][:collectd_web][:path] = "/srv/collectd_web" -default[:collectd][:collectd_web][:hostname] = "collectd" +default[:collectd][:collectd_web][:hostname] = "collectd" \ No newline at end of file diff --git a/definitions/collectd_plugin.rb b/definitions/collectd_plugin.rb index f4a4e89..f1f8d9f 100644 --- a/definitions/collectd_plugin.rb +++ b/definitions/collectd_plugin.rb @@ -18,7 +18,7 @@ # define :collectd_plugin, :options => {}, :template => nil, :cookbook => nil do - template "/etc/collectd/plugins/#{params[:name]}.conf" do + template "#{node[:collectd][:config_dir]}/plugins/#{params[:name]}.conf" do owner "root" group "root" mode "644" @@ -36,7 +36,7 @@ define :collectd_python_plugin, :options => {}, :module => nil, :path => nil do begin - t = resources(:template => "/etc/collectd/plugins/python.conf") + t = resources(:template => "#{node[:collectd][:config_dir]}/plugins/python.conf") rescue ArgumentError collectd_plugin "python" do options :paths=>[node[:collectd][:plugin_dir]], :modules=>{} diff --git a/metadata.rb b/metadata.rb index 05ec153..05a691c 100644 --- a/metadata.rb +++ b/metadata.rb @@ -1,7 +1,90 @@ -maintainer "Noan Kantrowitz" -maintainer_email "noah@coderanger.net" -license "Apache 2.0" -description "Install and configure the collectd monitoring daemon" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "1.0.0" -supports "ubuntu" +name "collectd" +maintainer "Noan Kantrowitz" +maintainer_email "noah@coderanger.net" +license "Apache 2.0" +description "Install and configure the collectd monitoring daemon" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "1.0.0" + +depends "apache2" + +%w{ debian ubuntu centos redhat fedora }.each do |os| + supports os +end + +recipe "collectd", "Install a standalone daemon." +recipe "collectd::client", "Install collectd and configure it to send data to a server." +recipe "collectd::server", "Install collectd and configure it to recieve data from clients." +recipe "collectd::collectd_web", "Installs and configures collectd_web." + +attribute "collectd/base_dir", + :display_name => "collectd Base Directory", + :description => "The base directory for collectd.", + :required => "optional", + :default => "/var/lib/collectd", + :recipes => [ "collectd::default" ] + +attribute "collectd/plugin_dir", + :display_name => "collectd Plugin Directory", + :description => "The plugin directory for collectd.", + :required => "optional", + :default => "/usr/lib/collectd" , + :recipes => [ "collectd::default" ] + +attribute "collectd/types_db", + :display_name => "collectd Types Database", + :description => "The location of the collectd types.db file.", + :required => "optional", + :type => "array", + :default => [ "/usr/share/collectd/types.db" ], + :recipes => [ "collectd::default" ] + +attribute "collectd/interval", + :display_name => "collectd Polling Interval", + :description => "The collectd interval setting value.", + :required => "optional", + :default => "20", + :recipes => [ "collectd::default" ] + +attribute "collectd/read_threads", + :display_name => "collectd Read Threads", + :description => "The collectd read threads setting value.", + :required => "optional", + :default => "5", + :recipes => [ "collectd::default" ] + +#attribute "collectd/servers", +# :display_name => "collectd Servers", +# :description => "The collectd servers to send to as a client.", +# :required => "optional", +# :default => nil, +# :type => "array", +# :recipes => [ "collectd::client" ] + +attribute "collectd/hostname", + :display_name => "collectd Hostname", + :description => "The collectd Hostname setting value.", + :required => "optional", + :recipes => [ "collectd::default" ] + +attribute "collectd/fqdn_lookup", + :display_name => "collectd FQDNLookup", + :description => "The collectd FQDNLookup setting value.", + :required => "optional", + :recipes => [ "collectd::default" ], + :choice => [ "true", "false" ], + :default => "true" + +attribute "collectd/collectd_web/path", + :display_name => "collectd_web path", + :description => "The collectd_web install path.", + :required => "optional", + :default => "/srv/collectd_web", + :recipes => [ "collectd::collectd_web" ] + +attribute "collectd/collectd_web/hostname", + :display_name => "collectd_web hostname", + :description => "The collectd_web hostname.", + :required => "optional", + :default => "collectd", + :recipes => [ "collectd::collectd_web" ] \ No newline at end of file diff --git a/recipes/client.rb b/recipes/client.rb index 5c1be7d..72cc42d 100644 --- a/recipes/client.rb +++ b/recipes/client.rb @@ -19,15 +19,20 @@ include_recipe "collectd" -servers = [] -search(:node, 'recipes:"collectd::server"') do |n| - servers << n['fqdn'] -end - +servers = + if !node[:collectd][:servers].empty? + node[:collectd][:servers] + elsif !Chef::Config[:solo] + search(:node, 'recipes:"collectd::server"').map {|n| n['fqdn'] } + end if servers.empty? - raise "No servers found. Please configure at least one node with collectd::server." + if Chef::Config[:solo] + raise "No collectd servers found. Please configure at least one server in Chef Solo with collectd['servers']." + else + raise "No collectd servers found. Please configure at least one server node using collectd::server." + end end collectd_plugin "network" do options :server=>servers -end +end \ No newline at end of file diff --git a/recipes/default.rb b/recipes/default.rb index cf5277e..f880cc7 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -17,21 +17,28 @@ # limitations under the License. # -package "collectd" do - package_name "collectd-core" -end +package = value_for_platform( + ["centos", "redhat", "suse", "fedora" ] => { + "default" => "collectd" + }, + ["ubuntu", "debian"] => { + "default" => "collectd-core" + }, + "default" => "collectd" +) +package package service "collectd" do supports :restart => true, :status => true end -directory "/etc/collectd" do +directory node[:collectd][:config_dir] do owner "root" group "root" mode "755" end -directory "/etc/collectd/plugins" do +directory "#{node[:collectd][:config_dir]}/plugins" do owner "root" group "root" mode "755" @@ -52,7 +59,7 @@ end %w(collectd collection thresholds).each do |file| - template "/etc/collectd/#{file}.conf" do + template "#{node[:collectd][:config_dir]}/#{file}.conf" do source "#{file}.conf.erb" owner "root" group "root" @@ -63,7 +70,7 @@ ruby_block "delete_old_plugins" do block do - Dir['/etc/collectd/plugins/*.conf'].each do |path| + Dir["#{node[:collectd][:config_dir]}/plugins/*.conf"].each do |path| autogen = false File.open(path).each_line do |line| if line.start_with?('#') and line.include?('autogenerated') diff --git a/templates/default/collectd.conf.erb b/templates/default/collectd.conf.erb index b1e3964..68e5d2d 100644 --- a/templates/default/collectd.conf.erb +++ b/templates/default/collectd.conf.erb @@ -6,8 +6,8 @@ # You should also read /usr/share/doc/collectd/README.Debian.plugins before # enabling any more plugins. -Hostname "<%= @node[:fqdn] %>" -FQDNLookup true +Hostname "<%= @node[:collectd][:hostname] %>" +FQDNLookup <%= @node[:collectd][:fqdn_lookup] %> BaseDir "<%= @node[:collectd][:base_dir] %>" PluginDir "<%= @node[:collectd][:plugin_dir] %>" TypesDB "<%= @node[:collectd][:types_db].join('", "') %>"