Description de l’API

Initialisation de la base de données

Gaspacho offre une API permettant à l’utilisateur d’automatiser ou de scripter certaines tâches. Tout ce qu’il est possible de faire par l’interface, peut être fait dans un script python.

Avant tout, il faut importer les fonctions Gaspacho et ouvrir la base de données :

from gaspacho import *

#variable avec la langue
lang='fr'

#initialisation de la base de données
initialize_database()

#importation de confcomputer et confuser
from gaspacho.conflevel import confcomputer, confuser

Attention, il ne faut pas importer confcomputer et confuser avant l’initiation de la base de données.

Les règles

Les règles sont rangées dans des catégories et dans des tags. Il faut donc les lister pour trouver la règle voulue :

#lister les catégories
for category in get_categories():
    print category.get_name(lang)

#retrouver une catégorie particulière
category = get_category('Configuration', lang)

#lister les tags d'un catégorie
for tag in category.get_tags():
    print tag.get_name(lang)

#retrouver un tag particulier
tag = category.get_tag('Ecran de veille', lang)

#lister les règles d'un tag
for rule in tag.get_rules():
    print rule.get_name(lang)

#récupérer deux règles
rule = tag.get_rule("Activer l'écran de veille", lang, confuser)
value_rule = tag.get_rule("Durée d'inactivé avant activation de l'écran de veille", lang, confuser)

Les groupes et les templates

Les groupes

Le groupe est un élément important de Gaspacho. C’est pour un groupe particulier que l’administrateur fera un choix.

Les groupes peuvent hériter d’autres groupes :

#obtenir la liste des groupes de la racine
for group in get_groups():
    print group.get_name()

#ajouter un nouveau groupe
new_group = add_group('new')

#ajouter deux groupes hérités
herited = add_group('herited', parent=new_group)
herited2 = add_group('herited2', parent=new_group)

#afficher les groupes hérités
for group in get_groups(parent=new_group):
    print group.get_name()

#afficher tous les groupes
for group in get_all_groups():
    print group.get_name()

#renommer un groupe
herited2.mod_name('new name')

#supprimer le groupe
del_group(herited2)

Les templates

En plus des groupes, Gaspacho ajoute la notion de template. Il n’y a pas de notion d’héritage avec les templates, mais un groupe peut être lié à un ou des groupes :

#ajouter deux templates
template1 = add_template('tmpl')
template2 = add_template('tmpl2')

#lister les templates
for template in get_templates():
    print template.get_name()

#récupérer un template particulier
template2 = get_template('tmpl2')

#renommer un template
template2.mod_name('tmpl3')

#supprimer un template
del_template(template2)

#lier un template à un groupe
herited.add_template(template1)

#connaître le template lié
herited.get_templates()

#supprimer le lien
herited.del_template(template1)

Les machines

Un groupe, pour être utile, doit être lié à un ou des groupes de machines. Les choix seront appliqués aux machines du groupe.

Les templates ne supportent pas l’héritage, mais surtout les templates ne peuvent pas être liés à un groupe de machines.

Les machines sont de deux types : IP ou DNS :

#ajouter une machine à un groupe
herited.add_computer('*', type='dns')
herited.add_computer('192.168.1.*')

#supprimer une machine d'un groupe
herited.del_computer('192.168.1.*')

#lister les machines d'un groupe
herited.get_computers()

Les utilisateurs

Un choix peut être lié à un utilisateur ou à un groupe d’utilisateur. Cela permet de différencier les configurations suivant la personne qui s’enregistre sur la machine :

#ajouter deux utilisateurs
add_user('user1')
user_group = add_user('user2', type=u'usergroup')

#lister l'ensemble des utilisateurs
print get_users()

#retrouver un utilisateur
user = get_user('user1')

#lier un groupe et un utilisateur
herited.add_user(user)
herited.add_user(user_group)

#supprimer le lien entre le groupe et l'utilisateur
herited.del_user(user_group)

#connaître les utilisateurs liés à un groupe
herited.get_users()

#supprimer un utilisateur
del_user(user_group)

Les managers

Par défaut, seul l’administrateur peut modifier les choix d’un groupe. Il est possible qu’une autre personne puisse administrer le groupe. Ce sont les managers.

Bien évidement, les managers ne sont utiles que depuis l’interface web, pas pour l’API :

#ajouter des managers
herited.add_manager(user)
template1.add_manager(user)

#supprimer un manager
template1.del_manager(user)

Les systèmes et les logiciels

Les groupes et les templates peuvent être liés à un système ou à un logiciel. Cela permet de limiter le nombre de règles disponibles au strict nécessaire :

#lister l'ensemble des OS
for os in get_oses():
    print os.get_name()

#retrouver une OS particulier
os = get_os('fedora')

#lister l'ensemble des logiciels
for software in get_softwares():
    print software.get_name()

#retrouver un logiciel particulier
software = get_software('gnome')

#ajouter un OS et un logiciel à un groupe
new_group.add_os(os)
new_group.add_software(software)

Les choix

Une fois les règles choisies et les groupes récupérés, il est possible de faire des choix.

Le choix est en deux parties :

  • le choix du groupe ;
  • le choix hérité ou le choix par défaut.

Lorsqu’on modifie un choix, cela ne concerne que le choix du groupe. Sur le poste utilisateur, seul le choix du groupe ou le choix hérité (ou le choix par défaut) est appliqué :

#lister les choix d'un groupe
print rule.get_choice(herited)

#faire un choix
rule.set_choice(herited, state=u'on')

#vérifier ce choix
print rule.get_choice(herited)[0].state

#supprimer un choix
rule.del_choice(herited)

#faire un choix pour un template
rule.set_choice(template1, state=u'on')
rule_valeur.set_choice(new_group, state=u'on', value=10)

#lister les choix du groupe
print rule_valeur.get_choice(herited)

#tous les choix (avec ceux par défaut) pour un groupe
for rule, choices in get_choices(herited).items():
    print "pour la regle %s :"%rule.get_name(lang)
    print choices

Enregistrer et appliquer les choix

Une fois les modifications faites, il faut soit enregistrer les modifications soit les annuler :

#enregistrer les changements
commit_database()

#ne pas enregistrer les changements
rollback_database()

Enfin, pour que les nouvelles règles soient appliquées sur la machine de destination il faut “appliquer” les choix :

#appliquer les changements
apply_choices()