From 950a004a2c49372a7c48f4d564fd6a7372eaa5f4 Mon Sep 17 00:00:00 2001 From: Nicolas Wavrant <nicolas.wavrant@tiolive.com> Date: Tue, 24 Dec 2013 12:04:38 +0100 Subject: [PATCH] 2 new recipes added for the 0-knowledge procedure --- setup.py | 2 + slapos/recipe/zeroknown.py | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 slapos/recipe/zeroknown.py diff --git a/setup.py b/setup.py index 0df61b04..1c9786d6 100755 --- a/setup.py +++ b/setup.py @@ -207,6 +207,8 @@ setup(name=name, 'zabbixagent = slapos.recipe.zabbixagent:Recipe', 'zimbra.kvm = slapos.recipe.zimbra_kvm:Recipe', 'zeo = slapos.recipe.zeo:Recipe', + 'zeroknown.read = slapos.recipe.zeroknown:ReadRecipe', + 'zeroknown.write = slapos.recipe.zeroknown:WriteRecipe' ], 'slapos.recipe.nosqltestbed.plugin': [ 'kumo = slapos.recipe.nosqltestbed.kumo:KumoTestBed', diff --git a/slapos/recipe/zeroknown.py b/slapos/recipe/zeroknown.py new file mode 100644 index 00000000..d95d3765 --- /dev/null +++ b/slapos/recipe/zeroknown.py @@ -0,0 +1,99 @@ +############################################################################## +# +# Copyright (c) 2013 Vifib SARL and Contributors. All Rights Reserved. +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsibility of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# guarantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import ConfigParser +import os +import zc.buildout + +from slapos.recipe.librecipe import GenericBaseRecipe + + +class WriteRecipe(GenericBaseRecipe): + """ + """ + def __init__(self, buildout, name, options): + if not "filename" in options: + raise zc.buildout.UserError("You have to provide the parameter \"filename\"") + + self.filename = options['filename'].strip() + self.path = os.path.join(buildout['buildout']['directory'], self.filename) + del options['filename'] + + # We don't want to save the recipe name + recipe = options.pop('recipe') + + # Set up the parser, and write config file if needed + self.parser = ConfigParser.ConfigParser() + try: + self.parser.read(self.path) + #clean_options(options) + for key in options: + if key not in self.parser.options(name): + self.parser.set(name, key, options[key]) + with open(self.path, 'w') as file: + self.parser.write(file) + # If the file or section do not exist + except ConfigParser.NoSectionError, IOError: + #clean_options(options) + self.full_install(name, options) + + # Or buildout will fail + options['recipe'] = recipe + # So that we can get the value in another buildout section + options['filename'] = self.filename + + + install = update = lambda self: [] + + + def full_install(self, name, options): + self.parser.add_section(name) + for key in options: + self.parser.set(name, key, options[key]) + with open(self.path, 'w') as file: + self.parser.write(file) + + +class ReadRecipe(GenericBaseRecipe): + """ + """ + def __init__(self, buildout, name, options): + if not "filename" in options: + raise zc.buildout.UserError("You have to provide the parameter \"filename\"") + + self.filename = options['filename'].strip() + self.path = os.path.join(buildout['buildout']['directory'], self.filename) + + # Set up the parser, and write config file if needed + self.parser = ConfigParser.ConfigParser() + if os.path.exists(self.path): + self.parser.read(self.path) + for section in self.parser.sections(): + for key ,value in self.parser.items(section): + options[key] = value + + install = update = lambda self: [] -- 2.30.9