From 687811925a387da3dca170ff0cf0d5fbf661cfd5 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Fri, 21 Feb 2014 15:12:04 +0100 Subject: [PATCH] Add linux specific timeslidersmf module and dependencies --- usr/share/time-slider/lib/time_slider/linux/smf.py | 45 +++++++++++ .../lib/time_slider/linux/timesliderconfig.py | 91 ++++++++++++++++++++++ .../lib/time_slider/linux/timeslidersmf.py | 65 ++++++++++++++++ .../time-slider/lib/time_slider/timesliderd.py | 2 +- 4 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 usr/share/time-slider/lib/time_slider/linux/smf.py create mode 100644 usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py create mode 100755 usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py diff --git a/usr/share/time-slider/lib/time_slider/linux/smf.py b/usr/share/time-slider/lib/time_slider/linux/smf.py new file mode 100644 index 0000000..748ca22 --- /dev/null +++ b/usr/share/time-slider/lib/time_slider/linux/smf.py @@ -0,0 +1,45 @@ +#!/usr/bin/python2 +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +import timesliderconfig +import time_slider.smf as base + +class SMFInstance(base.SMFInstance): + + def __init__(self, instanceName): + base.SMFInstance.__init__(self, instanceName) + + def get_service_state(self): + config = timesliderconfig.Config() + return config.get(self.instanceName[5:], 'state') + + def get_service_dependencies(self): + return [] + + def get_prop(self, propgroup, propname): + return timesliderconfig.Config().get(self.instanceName[5:], \ + propgroup + '/' + propname) + +if __name__ == "__main__": + S = SMFInstance('svc:/application/time-slider') + print S + diff --git a/usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py b/usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py new file mode 100644 index 0000000..453abc6 --- /dev/null +++ b/usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py @@ -0,0 +1,91 @@ +#!/usr/bin/python2 +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +import ConfigParser +import sys + +# Default config file name position +configfile = "/etc/time-slider/timesliderd.conf" + +# Default values +default_properties = { + 'application/time-slider': { + 'zpool/emergency-level': 95, + 'zpool/critical-level': 90, + 'zpool/warning-level': 80, + 'zfs/sep': '_', + 'daemon/verbose': 'true', + 'state': 'online', + }, + 'system/filesystem/zfs/auto-snapshot:monthly': { + 'zfs/interval': 'months', + 'zfs/period': 1, + 'zfs/keep': 2, + 'state': 'online', + }, + 'system/filesystem/zfs/auto-snapshot:weekly': { + 'zfs/interval': 'days', + 'zfs/period': 7, + 'zfs/keep': 4, + 'state': 'online', + }, + 'system/filesystem/zfs/auto-snapshot:daily': { + 'zfs/interval': 'days', + 'zfs/period': 1, + 'zfs/keep': 6, + 'state': 'online', + }, + 'system/filesystem/zfs/auto-snapshot:hourly': { + 'zfs/interval': 'hours', + 'zfs/period': 1, + 'zfs/keep': 23, + 'state': 'online', + }, + 'system/filesystem/zfs/auto-snapshot:frequent': { + 'zfs/interval': 'minutes', + 'zfs/period': 15, + 'zfs/keep': 3, + 'state': 'online', + }, +} + +class Config: + def __init__(self): + self.config = ConfigParser.ConfigParser() + self.config.read(configfile) + + def get(self, section, option): + try: + result = self.config.get(section, option) + sys.stderr.write('CONFIG: FILE section %s, option %s with value %s\n' % (section, option, result)) + return result + except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): + try: + result = default_properties[section][option] + sys.stderr.write('CONFIG: DEFAULT section %s, option %s with value %s\n' % (section, option, result)) + return result + except KeyError: + sys.stderr.write('CONFIG: NOTFOUND section %s, option %s\n' % (section, option)) + return '' + + def sections(self): + return self.config.sections() diff --git a/usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py b/usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py new file mode 100755 index 0000000..64f3a5b --- /dev/null +++ b/usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py @@ -0,0 +1,65 @@ +#!/usr/bin/python2 +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +import time_slider.timeslidersmf as base +import smf +import threading + +class TimeSliderSMF(base.TimeSliderSMF): + + def __init__(self, instanceName = base.SMFNAME): + base.TimeSliderSMF.__init__(self, instanceName) + +# +# This is beyond ugly. +# +# The problem this is trying to solve is to change the inheritance chain. Origially +# it looks like this: +# +# +# +# +# +# +# +# +# We'd like it to look like this: +# +# +# +# +# +# +# +# +# +# so we can inject some linux specific things into SMF without having to copy all +# the code. +# +# This has to be done here as the __init__ of TimeSliderSMF will otherwise fail. +# + +base.TimeSliderSMF.__bases__ = (smf.SMFInstance,) + +if __name__ == "__main__": + S = TimeSliderSMF('svc:/application/time-slider') + print S diff --git a/usr/share/time-slider/lib/time_slider/timesliderd.py b/usr/share/time-slider/lib/time_slider/timesliderd.py index 2261ee9..d3fee51 100755 --- a/usr/share/time-slider/lib/time_slider/timesliderd.py +++ b/usr/share/time-slider/lib/time_slider/timesliderd.py @@ -43,7 +43,7 @@ import dbus.mainloop.glib import dbussvc import zfs import smf -import timeslidersmf +import time_slider.linux.timeslidersmf as timeslidersmf import autosnapsmf import plugin from time_slider.linux.rbac import RBACprofile -- 1.8.3.1