nagios-charmers team mailing list archive
-
nagios-charmers team
-
Mailing list archive
-
Message #00609
[Merge] ~knobby/nagios-layer:mwilson/utils into nagios-layer:master
You have been requested to review the proposed merge of ~knobby/nagios-layer:mwilson/utils into nagios-layer:master.
For more details, see:
https://code.launchpad.net/~knobby/nagios-layer/+git/nagios-layer/+merge/373525
Adding some library functions to the layer for charms to install and remove plugins.
--
Your team Nagios Charm developers is requested to review the proposed merge of ~knobby/nagios-layer:mwilson/utils into nagios-layer:master.
diff --git a/lib/charms/layer/nagios.py b/lib/charms/layer/nagios.py
new file mode 100644
index 0000000..7aeb3f8
--- /dev/null
+++ b/lib/charms/layer/nagios.py
@@ -0,0 +1,60 @@
+from pathlib import Path
+
+NAGIOS_PLUGINS_DIR = '/usr/lib/nagios/plugins'
+
+
+def install_nagios_plugin_from_text(text, plugin_name):
+ """ Install a nagios plugin.
+
+ Args:
+ test: Source file text to install
+ plugin_name: Name of the plugin in nagios
+
+ Returns: Full path to installed plugin
+ """
+ dest_path = Path(NAGIOS_PLUGINS_DIR) / plugin_name
+ if dest_path.exists():
+ # we could complain here, test the files are the same contents, or
+ # just bail. Idempotency is a big deal in Juju, so I'd like to be
+ # ok with being called with the same file multiple times, but we
+ # certainly want to catch the case where multiple layers are using
+ # the same filename for their nagios checks.
+ dest = dest_path.read_text()
+ if dest == text:
+ # same file
+ return dest_path
+ # different file contents!
+ # maybe someone changed options or something so we need to write
+ # it again
+
+ dest_path.write_text(text)
+ dest_path.chmod(0o755)
+
+ return dest_path
+
+
+def install_nagios_plugin_from_file(source_file_path, plugin_name):
+ """ Install a nagios plugin.
+
+ Args:
+ source_file_path: File that is copied to create plugin
+ plugin_name: Name of the plugin in nagios
+
+ Returns: Full path to installed plugin
+ """
+
+ return install_nagios_plugin_from_text(Path(source_file_path).read_text(),
+ plugin_name)
+
+
+def remove_nagios_plugin(plugin_name):
+ """ Remove a nagios plugin.
+
+ Args:
+ plugin_name: Plugin name that was passed to install_plugin
+
+ Returns: None
+ """
+ dest_path = Path(NAGIOS_PLUGINS_DIR) / plugin_name
+ if dest_path.exists():
+ dest_path.unlink()