Tabla de contenidos
La clase EBox::Global ofrece varias
funciones para la administración de módulos. Las funciones utilizadas
más comúnmente son las que hacen referencia a la instanciación de
módulos. EBox::Global funciona como una factoría
de módulos, obtienes una instancia suya usando la función estática
getInstance y después usar esa instancia para
crear módulos. La factoría puede tener dos formas, una de sólo lectura
y otra de lectura-escritura.
Llamar a getInstance sin argumentos
producirá una factoría de lectura-escritura, la cual crea módulos que
le permiten hacer llamadas para cambiar la configuración. Un detalle
muy importante de los módulos lectura-escritura es que devuelven la
información de su última configuración, incluso si no se ha guardado
todavía (lo que significa que podría ser revocada más tarde por el
usuario). Esta idea es importante, ya que la configuración que nos
ofrece el módulo lectura-escritura no debe ser tratada como
definitiva, a no ser que el módulo no tenga cambios esperando a ser
guardados. Puede ver si un módulo tiene cambios sin guardar llamando
a la función modIsChanged en la clase
EBox::Global.
La idea subyacente en el comportamiento de los módulos lectura-escritura es tener un front-end para construir una configuración. Por ejemplo, si el usuario crea un nuevo objeto de red en el módulo objetos, el nuevo objeto mostrará instantáneamente la configuración del firewall y se podrá crear nuevas reglas del firewall que lo usen. Después de realizar todos los cambios deseados, el usuario guarda la configuración. Si decide cancelar los cambios que acaba de hacer, tanto el nuevo objeto como las reglas del firewall serán borradas.
Hay una situación en la que no desea recoger la información que
no ha sido guardada todavía. Ésta es cuando se está generando el
fichero de configuración de un demonio, configurando las reglas del
firewall, configurando la dirección de un interfaz de red, o cualquier
otra actividad que necesita la configuración real y definitiva. Esta
situación se encuentra en los scripts del sistema (el script de
arranque, trabajos de cron, etc). En estos casos necesita lo que se
denominan módulos de sólo-lectura, que sólo ofrecen la información
almacenada y no permiten hacer llamadas a funciones que cambiarían la
configuración del módulo. Para obtener módulos de sólo-lectura
necesita crear una instancia de EBox::Global
configurando su parámetro readonly como
true. Las instancias del módulo devueltas por una
factoría creada de esta forma serán de sólo-lectura. Este script
muestra como obtener una instancia del módulo squid y le pide que se
reinicie:
Ejemplo 2.1. Creando una instancia de un módulo de sólo-lectura
#!/usr/bin/perl
use strict;
use warnings;
use EBox;
use EBox::Global;
use Error qw(:try);
EBox::init();
my $global = EBox::Global->getInstance(1);
my $squid = $global->modInstance('squid');
try {
$squid->restartService();
} catch EBox::Exceptions::Base with {
print STDERR "El módulo Squid falló al reiniciarse.\n";
};Hay dos funciones que hacen más sencillo realizar dos tareas muy
comunes: obtener una instancia de cada módulo y obtener una instancia
de cada módulo que implemente alguna clase abstracta. Éstas son
modInstances y
modInstancesOfType. Usarlas es muy
sencillo:
Ejemplo 2.2. Funciones para instanciar más de un módulo
my $global = EBox::Global->getInstance(1);
# se reinician todos los módulos
foreach my $mod (@{$global->modInstances()}) {
$mod->restartService();
}
# se reinician todos los módulos que implementen la clase NetworkObserver
foreach my $mod (@{$global->modInstancesOfType('EBox::NetworkObserver')}) {
$mod->restartService();
}Reiniciar todos los módulos es todavía más sencillo que
eso. EBox::Global nos provee de la función
restartAllModules justamente para eso. Éste
es uno de los métodos que realiza una operación en todos los módulos
instalados:
restartAllModulesLlama a la función
restartService de
todos los módulos. Reinicia todos los
servicios manejados por eBox. Los ficheros de
configuración son regenerados cada vez que un
servicio es reiniciado.
stopAllModulesLlama a la función
stopService en todos
los módulos, esto incluye la interfaz web de
administración, por lo que hay que ser
cauteloso.
revokeAllModulesCancela los cambios de configuración que se han hecho en todos los módulos desde la última vez que la configuración se guardó.
saveAllModulesGuarda los cambios de la configuración en todos los módulos.