actions
=======

les actions 'classiques':

    ce sont des ensembles de manipulations qu'il est possible d'executer sur
    le serveur, et sont accessibles via xml-rpc. L'ensemble des actions
    est dans le répertoire par défaut : `ead2.backend.actions`

les actions sont de deux types:
	les actions communes à tous les modules ( restart/stop service, restart/stop server, mise à jour, listing matériel)
	les actions spécifiques à chaque module.

création d'une action
---------------------

placer un nouveau fichier python dans le répertoire des actions,
qui contient les lignes suivantes :

- importation de la librairie des actions::

    from ead2.backend.lib.action import *


- une (ou plusieurs) classes d'actions comme ceci::

    class ServerStop(Action):
        """simulation d'arrêt du serveur"""
    	user_description = Dict(default={}, doc="description de l'éxécutant", keys=['ip', 'name', 'role'])
        name = 'server_stop'
        category = 'system/server'
        description = 'Stop the server'
		libelle = 'Server-stop'
		request = Dict(default={}, keys=['valid'])

        def execute(self):
    	    """commande qui ne fait rien"""
            print "sbin/halt"
		    result = {'template':'server', 'data':{'content':'execution de sbin/halt'}}
            return 0, uni(str(result))


Cette classe

- hérite de la classe `Action` (qui provient de la librairie
  `action`)
- comporte une méthode `execute()`
- est référencée dans le fichier `backend/config/perm_<nomdumodule>.ini`
- le fichier .py doit être pointé depuis le fichier `backend/config/actions_<nomdumodule>.cfg`
- est complétée par un template `server.tpl` placé dans le répertoire backend/template/
- doit comporter au minimum cinq attributs de classe:

  - une variable pour la description de l'appelant: user_description
  - une désignation : `name`
  - une catégorie : `category`
  - une description : `description`
  - un libelle pour le menu: `libelle`
  - une variable pour les requetes : `request`


.. note:: Il n'est pas possible de créer une action dont la  désignation existe déjà,
          c'est-à-dire si une classe d'action dans le répertoire
          des actions a déjà la même désignation
          (l'attribut `name`) alors une exception est levée

- placer un template dans le répertoire `backend/template` permettant de mettre en forme
  l'action.

comportement
------------

Les classes d'actions doivent être enregistrées dans la
liste des actions possibles, et les renseignements (description,
catégorie...) permettent de les ordonner en différents types.
L'attribut request permet de récupérer la requête client et de définir
un statut d'action.
L'ordre dans le menu est basé sur l'attribut name.

C'est donc la méthode `execute` qui sera appelée
lorsque l'action sera sélectionnée et appelée depuis un appel
xml-rpc, qui passe en paramètre la requête venant du client.

Des données sont renvoyées avec un template en Cheetah.
Le template permet de mettre en forme l'action à partir des
variables placées dans `content`.
