diff --git a/setup.py b/setup.py index 26de2563a1047017658f282a4873f1a4e67be7b9..9f3225c07451236390ad3023d686d83be9a91403 100644 --- a/setup.py +++ b/setup.py @@ -48,6 +48,7 @@ setup(name=name, 'certificate_authority = slapos.recipe.certificate_authority:Recipe', 'certificate_authority.request = slapos.recipe.certificate_authority:Request', 'check_port_listening = slapos.recipe.check_port_listening:Recipe', + 'check_url_available = slapos.recipe.check_url_available:Recipe', 'cron = slapos.recipe.dcron:Recipe', 'cron.d = slapos.recipe.dcron:Part', 'davstorage = slapos.recipe.davstorage:Recipe', diff --git a/slapos/recipe/check_url_available/__init__.py b/slapos/recipe/check_url_available/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1e3508530844672ad78fa72f2d265c37ec614fd2 --- /dev/null +++ b/slapos/recipe/check_url_available/__init__.py @@ -0,0 +1,47 @@ +############################################################################## +# +# Copyright (c) 2011 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): + """ + Create script that will check if "url" is available (e.g page answers 200 OK). + """ + + def install(self): + config = { + 'url': self.options['url'], + 'shell_path': self.options['dash_path'], + } + + # XXX-Cedric in this script, curl won't check certificate + promise = self.createExecutable( + self.options['path'], + self.substituteTemplate(self.getTemplateFilename('check_url.in'), config) + ) + + return [promise] diff --git a/slapos/recipe/check_url_available/template/check_url.in b/slapos/recipe/check_url_available/template/check_url.in new file mode 100644 index 0000000000000000000000000000000000000000..b6e378345e45b69c332f10ac79c319a7a70e107c --- /dev/null +++ b/slapos/recipe/check_url_available/template/check_url.in @@ -0,0 +1,16 @@ +#!%(shell_path)s +# BEWARE: This file is operated by slapgrid +# BEWARE: It will be overwritten automatically + +URL="%(url)s" +CODE=$(curl -k -sL $URL -w %%{http_code} -o /dev/null) + +if [ $CODE -eq 000 ]; then + echo "$URL is not available (server not reachable)" >&2 + exit 1 +fi + +if ! [ $CODE -eq 200 ]; then + echo "$URL is not available (returned $CODE)" >&2 + exit 2 +fi