]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/munin/resources/plugin.rb
Add some extra sandboxing options to systemd_service
[chef.git] / cookbooks / munin / resources / plugin.rb
index 758d9b413da8762cceb945e2cc6793924d61aad0..10c149436b7c79d96b59a738eeb39e1d22c51326 100644 (file)
@@ -1,14 +1,14 @@
 #
-# Cookbook Name:: munin
-# Resource:: munin_plugin
+# Cookbook:: munin
+# Provider:: munin_plugin
 #
-# Copyright 2013, OpenStreetMap Foundation
+# Copyright:: 2013, OpenStreetMap Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-# http://www.apache.org/licenses/LICENSE-2.0
+#     https://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # limitations under the License.
 #
 
-actions :create, :delete
+unified_mode true
+
 default_action :create
 
-attribute :name, :kind_of => String, :name_attribute => true
-attribute :target, :kind_of => String
-attribute :conf, :kind_of => String
-attribute :conf_cookbook, :kind_of => String
-attribute :conf_variables, :kind_of => Hash, :default => {}
+property :plugin, :kind_of => String, :name_property => true
+property :target, :kind_of => String
+property :conf, :kind_of => String
+property :conf_cookbook, :kind_of => String
+property :conf_variables, :kind_of => Hash, :default => {}
+property :restart_munin, :kind_of => [TrueClass, FalseClass], :default => true
+
+action :create do
+  link_action = case target_path
+                when nil then :delete
+                else :create
+                end
+
+  link plugin_path do
+    action link_action
+    to target_path
+  end
+
+  if new_resource.conf
+    munin_plugin_conf new_resource.plugin do
+      cookbook new_resource.conf_cookbook
+      template new_resource.conf
+      variables new_resource.conf_variables
+      restart_munin false
+    end
+  end
+end
+
+action :delete do
+  link plugin_path do
+    action :delete
+  end
+
+  if new_resource.conf
+    munin_plugin_conf new_resource.plugin do
+      action :delete
+      restart_munin false
+    end
+  end
+end
+
+action_class do
+  def plugin_path
+    "/etc/munin/plugins/#{new_resource.plugin}"
+  end
+
+  def target_path
+    if ::File.exist?(target)
+      target
+    elsif ::File.exist?("/usr/local/share/munin/plugins/#{target}")
+      "/usr/local/share/munin/plugins/#{target}"
+    elsif ::File.exist?("/usr/share/munin/plugins/#{target}")
+      "/usr/share/munin/plugins/#{target}"
+    end
+  end
+
+  def target
+    new_resource.target || new_resource.plugin
+  end
+end
+
+def after_created
+  notifies :restart, "service[munin-node]" if restart_munin
+end