diff --git a/setup.py b/setup.py index bb782562d194f0a42268635d1555b9663cff1679..f88e2a6f9ac9cb1e807fa1ba751febe22f13fbc2 100755 --- a/setup.py +++ b/setup.py @@ -87,6 +87,7 @@ setup(name=name, 'check_page_content = slapos.recipe.check_page_content:Recipe', 'check_port_listening = slapos.recipe.check_port_listening:Recipe', 'check_url_available = slapos.recipe.check_url_available:Recipe', + 'check_parameter = slapos.recipe.check_parameter:Recipe', 'cloud9 = slapos.recipe.cloud9:Recipe', 'cloudooo.test = slapos.recipe.erp5_test:CloudoooRecipe', 'condor = slapos.recipe.condor:Recipe', diff --git a/slapos/recipe/check_parameter/__init__.py b/slapos/recipe/check_parameter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..165273647d6b3740ff0377dc576b951646d05244 --- /dev/null +++ b/slapos/recipe/check_parameter/__init__.py @@ -0,0 +1,60 @@ +# vim: set et sts=2: +############################################################################## +# +# Copyright (c) 2015 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. +# +############################################################################## +from slapos.recipe.librecipe import GenericBaseRecipe +import sys + +class Recipe(GenericBaseRecipe): + """ + Check listening port promise + """ + + def install(self): + config = dict( + value=self.options['value'], + python_path=sys.executable, + ) + + if self.options.get('expected-type') == "ipv6": + template = self.getTemplateFilename('check_ipv6.py.in') + + elif self.options.get('expected-type') == "ipv4": + template = self.getTemplateFilename('check_ipv4.py.in') + else: + if self.options.get('expected-value'): + config["expected-value"] = self.options.get('expected-value') + + if self.options.get('expected-not-value'): + config["expected-not-value"] = self.options.get('expected-not-value') + + template = self.getTemplateFilename('check_parameter.py.in') + + promise = self.createExecutable( + self.options['path'], + self.substituteTemplate(template, config)) + + return [promise] diff --git a/slapos/recipe/check_parameter/template/check_ipv4.py.in b/slapos/recipe/check_parameter/template/check_ipv4.py.in new file mode 100644 index 0000000000000000000000000000000000000000..a6b390a49a5c0ff234b966cdcd32c8658f3f135e --- /dev/null +++ b/slapos/recipe/check_parameter/template/check_ipv4.py.in @@ -0,0 +1,19 @@ +#!%(python_path)s +# BEWARE: This file is operated by slapgrid +# BEWARE: It will be overwritten automatically +import socket + +address = "%(value)s" + +try: + socket.inet_pton(socket.AF_INET, address) +except AttributeError: # no inet_pton here, sorry + try: + socket.inet_aton(address) + except socket.error: + sys.exit(127) + if address.count('.') != 3: + sys.exit(127) + +except socket.error: # not a valid address + sys.exit(127) diff --git a/slapos/recipe/check_parameter/template/check_ipv6.py.in b/slapos/recipe/check_parameter/template/check_ipv6.py.in new file mode 100644 index 0000000000000000000000000000000000000000..1668d7348ca8f89f541a055b50c6b2f5defce1cf --- /dev/null +++ b/slapos/recipe/check_parameter/template/check_ipv6.py.in @@ -0,0 +1,12 @@ +#!%(python_path)s +# BEWARE: This file is operated by slapgrid +# BEWARE: It will be overwritten automatically +import socket +import sys + +address = "%(value)s" + +try: + socket.inet_pton(socket.AF_INET6, address) +except socket.error: # not a valid address + sys.exit(127) diff --git a/slapos/recipe/check_parameter/template/check_parameter.py.in b/slapos/recipe/check_parameter/template/check_parameter.py.in new file mode 100644 index 0000000000000000000000000000000000000000..bf3a743c0d5fc57dbf0ea808eec23b945c59768d --- /dev/null +++ b/slapos/recipe/check_parameter/template/check_parameter.py.in @@ -0,0 +1,18 @@ +#!%(python_path)s +# BEWARE: This file is operated by slapgrid +# BEWARE: It will be overwritten automatically +import socket +import sys + +value = "%(value)s" +expected = "%(expected-value)s" +not_expected = "%(expected-not-value)s" + +if expected != "" and value != expected: + print "FAIL: %s != %s" % (value, expected) + sys.exit(127) + +if not_expected != "" and value == not_expected: + print "FAIL: %s == %s" % (value, not_expected) + sys.exit(127) +