[[TOC(heading=Índice)]] = API de funciones = == Introducción == Para el desarrollo de la interfaz de programación del proyecto deben seguirse estas reglas de estilo: * Las reglas de la API se cumplirán independientemente del lenguaje de programación utilizado. * La documentación del código debe se r compatible con [http://www.stack.nl/~dimitri/doxygen/ Doxygen]. * Debe incluirse toda la información necesaria en las cabeceras de las funciones (descripción, formato, salidas, notas, etc.). * Deben incluirse comentarios descriptivos en los bloques de código. * Las funciones devolverán un código de salida al estilo Unix, que indique si se ha ejecutado correctamente o se ha producido alguno de los tipos de errores definidos. En caso de error, también mostrará el mensaje correspondiente. * Todos los nombres de funciones y variables deben estar escritos en inglés, deben ser descriptivos y fáciles de recordar. * Nombres de funciones al estilo Rembo-C (sólo con las iniciales en mayúsculas), pero sin copiarlos de Rembo-C. Según se estime oportuno, los nombres de funciones podrán tener un prefijo indicativo del proyecto o del componente del proyecto al que pertenece. * Las constantes y variables globales deben ir escritas en mayúsculas. == Variables y constantes globales == OPENGNSYS="/opt/opengnsys[[BR]] export OGBIN=$OPENGNSYS/bin[[BR]] export OGETC=$OPENGNSYS/etc[[BR]] export OGLIB=$OPENGNSYS/lib[[BR]] export OGAPI=$OGLIB/engine/bin[[BR]] export OGIMG=$OPENGNSYS/images[[BR]] export OGCAC=$OPENGNSYS/cache -------propuesta 2 ->>>- OGCAC=`ogMountCache` [[BR]] export OGLOG=$OPENGNSYS/log [[BR]] export OG_ERR_FORMAT=1 # Formato de ejecucion incorrecto. [[BR]] export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. [[BR]] export OG_ERR_PARTITION=3 # Error en particion de disco. [[BR]] export OG_ERR_LOCKED=4 # Particion o fichero bloqueado. [[BR]] export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. [[BR]] export OG_ERR_NOTOS=6 # Sin sistema operativo. [[BR]] export OG_ERR_NOTEXEC=7 # Programa o funcion no ejecutable. [[BR]] OGCLIENTREGISTERED # Si el cliente está registrado o no en la web [[BR]] OGCLIENTTYPE # tipo de cliente, iniciado desde "cdrom", "pxeram2, "pxenfs", o desde la misma "cache".[[BR]] OGIPREPO # IP del repositorio de imagenes asignado al equipo (mcast, torrent) [[BR]] OGIPADMIN # IP del servidor de administracion (hidra) [[BR]] CLONETOOLSNTFS # Herramienta de clonación para los sistemas de archivos NTFS. [[BR]] CLONETOOLSEXT # Herramienta de clonación para los sistemas de archivos EXT2 EXT3 EXT4 [[BR]] CLONETOOLSCOMPRESOR # compresor a utilizar al generar una imagen. [[BR]] CLONEMEMORYSIZE # Tamaño de memoria RAM para utilizarlo de buffer para las distintas E/S [[BR]] UNICASTSESSION # informacion de sesión para una conexion unicast. protocolo:usuario:password eje1. smb:user:pass ssh:user:pass nfs:: [[BR]] MULTICASTSESSION # informacion de sesión multicas: IP-puerto:NumeroEquipos:TiempoMaximoEspera [[BR]] == Parámetros == Los parámetros de las funciones deben estar unificados, ésto es, deben ser comprensibles según su tipo y su contexto. Tipos de parámetros: * Disco: identificado por su número de orden. * Partición: número de orden de la partición. * Identificador de partición: dupla de valores formada por disco y partición (2 parámetros). * Sistema de archivos: mnemónico predefinido identificador del tipo de sistema de archivos. * Tamaño: número entero con el tamaño de la partición en KB. * Definición de partición: pareja de valores formada por sistema de archivos y tamaño, separados por ":" (1 parámetro compuesto). * Repositorio: dirección IP del repositorio de imágenes. * Caché local: dirección IP del cliente local o {{{localhost}}} * Camino: camino de un fichero relativo a su partición, a su repositorio o su caché local. * Camino completo: parámetro compuesto por identificador de partición o repositorio y el camino relativo de un fichero (2 o 3 parámetros). * Fichero de imagen: ... * ... == Parámetros futuras versión == Los actuales sistemas de los que parte !OpenGnsys (Hidra, Brutalix, EAC) comparten los parámetros indicados en el apartado anterior. Con dichos parámetros ciertas funcionalidades no podrán ser implementadas, o deben de realizarse de una manera no muy clara. Un ejemplo claro es !RestorePartitionFromPartition (EAC), donde ambas particiones pueden ser locales, o pueden ser remotas, es decir un equipo envia por multicast su partión a multiples particiones remotas. Siguiendo en nuevo formato de particiones se podrían unificar tanto RestorePartitionFromPartition y RestorePartitionFromImage en una sola: La sintaxis podría set tal como {{{RecursoOrigen RecursoDestino}}}. Donde cada Recurso estaría compuesto por unos valores que lo identifiquen. De esta manera tendríamos los siguientes recursos simples: (,) {{{ * DISK (disco local) DISK:int_disk,int_partition * DISKREMOTE (disco remoto) DISKREMOTE:str_IP,int_disk,int_partition * CDROM (cdrom,dvd) CDROM: * USB (dispositivos usb) USB: * RAM (particiones en ram) RAM: * LOOP (dispositivos loop LOOP: }}} y los siguientes recursos compuestos: (;) {{{ * FILE (archivo) FILE//DISK|diskRemote|crdrom|usb|ram|loop|variables$REPO$CACHE;subdirectorio;fichero }}} Algunos ejemplos: {{{ *RestorePartition Disk:1,1 Disk:1,2 *RestorePartition DiskRemote:1,2:172.16.72.242 DISK:1,2 *RestorePartition Disk:1,1 File://$GLOBAL:hdimages/curso0809/:xpbase0.lzop1 *UpdateCache File//$GLOBAL:hdimages/curso0809/:xpbase0.lzop1 *RestoreImageToPartition File//$CACHE;hdimages/curso0809/;xpbase0.lzop1 Disk:1,1 *DeployImageToPartition File//$GLOBAL;hdimages/curso0809/;xpbase0.lzop1 Disk:1,1 *CapturePartitionToImage Disk:1,1 File//$GLOBAL;hdimages/curso0809/;xpbase0.lzop }}} == Errores y mensajes == Las funciones deben realizar una comprobación y un tratamiento adecuados de posibles errores y fallos, evitando realizar operaciones innecesarias o incorrectas. Se generarán mensajes de error comprensibles y adecuados que ofrezcan información para detectar y corregir el problema, además de devolver un código de error que pueda ser tratado por otras funciones de la API. Asimismo, se deben presentar mensajes informativos normalizados sobre el estado y la evolución de las operaciones realizadas. La implementación de las funciones de la API tendrá en cuenta técnicas de internacionalización, para poder presentar los mensajes y los errores en el idioma del usuario. ''(definir lista de errores y formatos de mensajes)'' == Funciones del motor de clonación == Las funciones de la API se agrupan lógicamente en librerías o clases (según el lenguaje de programación utilizado), con unas características comunes. Lista de librerías o clases (en orden alfabético): * [doxygen:Boot Boot] - funciones de postconfiguración y arranque de sistemas de archivos * [doxygen:Disk Disk] - funciones de gestión de discos * [doxygen:File File] - funciones de control de ficheros y directorios * [doxygen:FileSystem FileSystem] - funciones de administración de sistemas de archivos * [doxygen:Image Image] - funciones de creación y clonación de imágenes de sistemas de archivos * [doxygen:Install Install] - funciones de instalación del sistema * [doxygen:Inventory Inventory] - funciones de inventario de clientes * [doxygen:String String] - funciones de tratamiento de cadenas de caracteres * [doxygen:System System] - funciones básicas del sistema ''(lista de funciones para clonar "a mano" o desde scripts)'' == Funciones del gestor web == ''(lista de funciones ejecutadas por el gestor web)''