def test_include_nonexistant_file(self): """Directive "include" : fichier non existant.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = /nonexistant") conf1.close() settings.load_file(conffile1)
def test_include_empty_list(self): """Directive "include" : utilisation d'une liste vide.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = ") conf1.close() settings.load_file(conffile1)
def load_conf_from_string(self, data): """ Chargement d'une configuration à partir d'une chaîne de caractères. """ conffile = os.path.join(self.tmpdir, "test.ini") conf = open(conffile, "w") conf.write(data) conf.close() settings.load_file(conffile) os.environ["VIGILO_SETTINGS"] = conffile
def test_reload_and_load_twice(self): """Chargement de la conf deux fois V.S. utilisation de reload()""" conffile = os.path.join(self.tmpdir, "test.ini") conf = open(conffile, "w") conf.write("[section]\nkey=value\n") conf.close() settings.load_file(conffile) settings["section"]["key"] = "othervalue" settings.load_file(conffile) # ne change rien, fichier déjà chargé self.assertEqual(settings["section"]["key"], "othervalue") settings.reload() # Retour à la valeur d'origine self.assertEqual(settings["section"]["key"], "value")
def test_include(self): """Directive "include" : cas simple.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conffile2 = os.path.join(self.tmpdir, "test-2.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = %s" % conffile2) conf1.close() conf2 = open(conffile2, "w") conf2.write("[section]\nkey=value\n") conf2.close() settings.load_file(conffile1) self.assertTrue("section" in settings) self.assertEqual(settings["section"].get("key"), "value")
def test_include_loop(self): """Directive "include" : boucle.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conffile2 = os.path.join(self.tmpdir, "test-2.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = %s" % conffile2) conf1.close() conf2 = open(conffile2, "w") conf2.write("[include]\ninclude = %s" % conffile1) conf2.close() settings.load_file(conffile1) print settings.filenames self.assertEqual(len(settings.filenames), 2)
def test_include_overload(self): """Directive "include" : surcharge des valeurs.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conffile2 = os.path.join(self.tmpdir, "test-2.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = %s\n[section]\nkey=value1" % conffile2) conf1.close() conf2 = open(conffile2, "w") conf2.write("[section]\nkey=value2\n") conf2.close() settings.load_file(conffile1) self.assertTrue("section" in settings) self.assertEqual(settings["section"].get("key"), "value1")
def test_include_list(self): """Directive "include" : utilisation d'une liste.""" conffile1 = os.path.join(self.tmpdir, "test-1.ini") conffile2 = os.path.join(self.tmpdir, "test-2.ini") conffile3 = os.path.join(self.tmpdir, "test-3.ini") conf1 = open(conffile1, "w") conf1.write("[include]\ninclude = %s, %s" % (conffile2, conffile3)) conf1.close() conf2 = open(conffile2, "w") conf2.write("[section]\nkey=value\n") conf2.close() conf3 = open(conffile3, "w") conf3.write("[section]\nkey2=value2\n") conf3.close() settings.load_file(conffile1) self.assertTrue("section" in settings) self.assertEqual(settings["section"].get("key"), "value") self.assertTrue(conffile2 in settings.filenames) self.assertEqual(settings["section"].get("key2"), "value2") self.assertTrue(conffile3 in settings.filenames)
def test_include_directory_overload(self): """Directive "include" : surcharge lors du chargement d'un dossier.""" conffile0 = os.path.join(self.tmpdir, "test.ini") os.mkdir(os.path.join(self.tmpdir, "conf.d")) conffile1 = os.path.join(self.tmpdir, "conf.d", "test-1.ini") conffile2 = os.path.join(self.tmpdir, "conf.d", "test-2.ini") conf0 = open(conffile0, "w") conf0.write("[include]\ninclude = %s" % os.path.join(self.tmpdir, "conf.d")) conf0.close() conf1 = open(conffile1, "w") conf1.write("[section]\nkey=value1\n") conf1.close() conf2 = open(conffile2, "w") conf2.write("[section]\nkey=value2\n") conf2.close() settings.load_file(conffile0) self.assertTrue("section" in settings) # La valeur correspond à celle indiquée # dans le dernier fichier chargé. self.assertEqual(settings["section"].get("key"), "value2")
def test_include_directory(self): """Directive "include" : chargement d'un dossier.""" conffile0 = os.path.join(self.tmpdir, "test.ini") os.mkdir(os.path.join(self.tmpdir, "conf.d")) conffile1 = os.path.join(self.tmpdir, "conf.d", "test-1.ini") conffile2 = os.path.join(self.tmpdir, "conf.d", "test-2.ini") conf0 = open(conffile0, "w") conf0.write("[include]\ninclude = %s" % os.path.join(self.tmpdir, "conf.d")) conf0.close() conf1 = open(conffile1, "w") conf1.write("[section]\nkey1=value1\n") conf1.close() conf2 = open(conffile2, "w") conf2.write("[section]\nkey2=value2\n") conf2.close() settings.load_file(conffile0) self.assertTrue("section" in settings) self.assertEqual(settings["section"].get("key1"), "value1") self.assertTrue(conffile1 in settings.filenames) self.assertEqual(settings["section"].get("key2"), "value2") self.assertTrue(conffile2 in settings.filenames)
def _prepare_db(options): """ Configure l'accès à la base de données Vigilo. @param options: Options et arguments passés au script sur la ligne de commandes. @type options: C{argparse.Namespace} @return: Un booléen qui indique si la configuration de la base de données s'est bien déroulée ou non. @rtype: C{bool} """ from vigilo.common.conf import settings if options.config: settings.load_file(options.config) else: settings.load_module(__name__) from vigilo.models.configure import configure_db try: configure_db(settings['database'], 'sqlalchemy_') except KeyError: print _('No database configuration found') return False return True
# -*- coding: utf-8 -*- # Copyright (C) 2006-2014 CS-SI # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html> """ Suite de tests du module d'authentification Kerberos""" import unittest from vigilo.common.conf import settings settings.load_file('settings_tests.ini') from vigilo.models.configure import configure_db configure_db(settings['database'], 'sqlalchemy_') from vigilo.common.logging import get_logger LOGGER = get_logger(__name__) from vigilo.turbogears.repoze.plugins.mdldapsync import VigiloLdapSync from vigilo.models.session import DBSession, metadata from vigilo.models import tables from vigilo.models.tables.grouppath import GroupPath from vigilo.models.tables.usersupitem import UserSupItem class FakeLdapConnection(object): """ Classe simulant les objets retournés par la méthode initialize de la classe ldap """ def __init__(self, *args, **kwargs): self._result = [( 'johndoe,dmdName=users,dc=ldap,dc=example,dc=com', {
# -*- coding: utf-8 -*- # Copyright (C) 2011-2014 CS-SI # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html> from vigilo.common.conf import settings settings.load_file("settings_tests.ini") from vigilo.models.configure import configure_db configure_db(settings["database"], "sqlalchemy_")
def main(*args): """ Point d'entrée du script qui ferme les événements en vert dans le bac à événements (VigiBoard). @note: Cette fonction ne rend pas la main, mais quitte l'exécution de Python à la fin de sa propre exécution. Les codes de retour possibles pour le script sont : * 0 : pas d'erreur * 1 : exception levée durant l'exécution * 2 : paramètres / options incorrects pour le script """ parser = OptionParser() parser.add_option("-d", "--days", action="store", dest="days", type="int", default=None, help=_("Close events which are " "at least DAYS old. DAYS must be a positive non-zero integer.")) parser.add_option("-u", "--up", action="store_true", dest="state_up", default=False, help=_("Close events for hosts in the 'UP' state.")) parser.add_option("-k", "--ok", action="store_true", dest="state_ok", default=False, help=_("Close events for services in the 'OK' state.")) parser.add_option("-c", "--config", action="store", dest="config", type="string", default=None, help=_("Load configuration from " "this file.")) (options, args) = parser.parse_args() from vigilo.common.conf import settings if options.config: settings.load_file(options.config) else: settings.load_module(__name__) from vigilo.common.logging import get_logger logger = get_logger(__name__) if args: logger.error(_('Too many arguments')) sys.exit(2) from vigilo.models.configure import configure_db try: configure_db(settings['database'], 'sqlalchemy_') except KeyError: logger.error(_('No database configuration found')) sys.exit(2) # Le script doit être appelé avec au moins une # des deux options parmi -k et -u pour être utile. if not options.state_up and not options.state_ok: parser.error(N_( "Either -k or -u must be used. " "See %s --help for more information.") % sys.argv[0]) sys.exit(2) try: res = close_green(logger, options) transaction.commit() except Exception: # pylint: disable-msg=W0703 # W0703: Catch "Exception" logger.exception(_('Some error occurred:')) transaction.abort() sys.exit(1) logger.info( _("Successfully closed %d events matching the given criteria."), res ) sys.exit(0)
def main(*args): """ Point d'entrée du script qui supprime les événements obsolètes du bac à événements (VigiBoard). @note: Cette fonction ne rend pas la main, mais quitte l'exécution de Python à la fin de sa propre exécution. Les codes de retour possibles pour le script sont : * 0 : pas d'erreur * 1 : exception levée durant l'exécution * 2 : paramètres / options incorrects pour le script """ parser = OptionParser() parser.add_option("-d", "--days", action="store", dest="days", type="int", default=None, help=_("Remove closed events which are " "at least DAYS old. DAYS must be a positive non-zero integer.")) parser.add_option("-s", "--size", action="store", dest="size", type="int", default=None, help=_("Remove closed events, starting " "with the oldest ones, when the Vigilo database starts occupying " "more then SIZE bytes. SIZE must be a positive non-zero integer.")) parser.add_option("-c", "--config", action="store", dest="config", type="string", default=None, help=_("Load configuration from " "this file.")) (options, args) = parser.parse_args() from vigilo.common.conf import settings if options.config: settings.load_file(options.config) else: settings.load_module(__name__) from vigilo.common.logging import get_logger logger = get_logger(__name__) if args: logger.error(_('Too many arguments')) sys.exit(2) from vigilo.models.configure import configure_db try: configure_db(settings['database'], 'sqlalchemy_') except KeyError: logger.error(_('No database configuration found')) sys.exit(2) url = make_url(settings['database']['sqlalchemy_url']) if options.days is None and options.size is None: parser.error(N_( "Either -d or -s must be used. " "See %s --help for more information.") % sys.argv[0]) sys.exit(2) try: clean_vigiboard(logger, options, url) transaction.commit() sys.exit(0) except Exception: # pylint: disable-msg=W0703 # W0703: Catch "Exception" logger.exception(_('Some error occurred:')) transaction.abort() sys.exit(1)
def change_password(*args): """ Change le mot de passe d'un utilisateur dans la base de données de Vigilo. """ from vigilo.common.gettext import translate _ = translate(__name__) usage=_("%prog [options] [username]"), parser = OptionParser( description=_("Changes Vigilo's password for user 'username' " "or the currently logged in user if this argument is omitted."), ) parser.add_option("-c", "--config", action="store", dest="config", type="string", default=None, help=_("Load configuration from " "this file.")) parser.add_option("-f", action="store", dest="passfile", metavar="FILE", type="string", default=None, help=_("Read the new password from " "this file.")) (options, args) = parser.parse_args() from vigilo.common.conf import settings if options.config: settings.load_file(options.config) else: settings.load_module(__name__) from vigilo.common.logging import get_logger logger = get_logger(__name__) if len(args) > 1: print _('Too many arguments') sys.exit(1) from vigilo.models.configure import configure_db try: configure_db(settings['database'], 'sqlalchemy_') except KeyError: print _('No database configuration found') sys.exit(1) from vigilo.models.session import DBSession from vigilo.models import tables current_password = None current_user = pwd.getpwuid(os.getuid()) username = current_user.pw_name if len(args) > 0: username = args[0] msg = _("Changing Vigilo password for user '%s'.") logger.info(msg, username) print msg % username # Si l'utilisateur n'est pas "root" (UID 0), # alors on demande le mot de passe actuel. if current_user.pw_uid != 0: current_password = getpass.getpass(_("Enter current password: "******"Bad login or password.") sys.exit(1) if options.passfile: passfile = open(options.passfile, "r") new_password = new_password2 = passfile.readline().strip() passfile.close() else: new_password = getpass.getpass(_("Enter new password: "******"Confirm new password: "******"Sorry, passwords do not match.") sys.exit(1) # Si le nouveau mot de passe est le même # que l'ancien, il n'y a rien à faire. if current_password == new_password: print _("Password unchanged.") sys.exit(0) user.password = new_password try: DBSession.flush() transaction.commit() except Exception: # pylint: disable-msg=W0703 # W0703: Catch "Exception" msg = _("An exception occurred while updating password for user '%s'.") logger.exception(msg, username) print msg % username sys.exit(1) # Si on arrive ici, c'est que tout s'est bien passé. msg = _("Successfully updated password for user '%s'.") logger.info(msg, username) print msg % username sys.exit(0)