diff options
author | Irina Gómez <irinagomez@us.es> | 2020-06-19 10:20:08 +0200 |
---|---|---|
committer | Irina Gómez <irinagomez@us.es> | 2020-06-19 10:20:08 +0200 |
commit | 31d6bf3bc536bf7a66f9824c020e189797f83177 (patch) | |
tree | 2e152a7d04a2ac0c3b3b7cfe2b63e1bc8189b678 | |
parent | f8711cec895c0879632831086be7d8a8e374ed9d (diff) |
#894 Console 'Create Image' Command: Supports disk image.
The form allows you to select the disk image to create.
The interface script checks image type, disk or partition, and uses the appropriate script.
-rwxr-xr-x | admin/Interface/CrearImagen | 19 | ||||
-rw-r--r-- | admin/WebConsole/comandos/CrearImagen.php | 47 | ||||
-rw-r--r-- | admin/WebConsole/includes/pintaTablaConfiguraciones.php | 105 |
3 files changed, 142 insertions, 29 deletions
diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index 2d4acc47..b18fbea0 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -23,6 +23,10 @@ #@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16 #@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos. #@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos. +#@version 1.2 - Soporta imágenes de disco. +#@author Irina Gomez, ETSII Universidad de Sevilla. +#@date 2020/06/19 + #Códigos de error de la funcion ogCreateImage @@ -72,12 +76,21 @@ then [ $RETVAL -gt 0 ] && exit $RETVAL fi +# Distinguimos entre imágenes de disco y de partición. +if [ "$2" == 0 ]; then + PARAMS=( "$1" "$4" "$3" ) + SCRIPTCREATE=createDiskImage +else + PARAMS=( "$1" "$2" "$4" "$3" ) + SCRIPTCREATE=createImage +fi + ogEcho createImage "$1" "$2" "$4" /"$3" # Si existe, ejecuta script personalizado "createImageCustom"; si no, llama al genérico "createImage". -if which createImageCustom &>/dev/null; then - createImageCustom "$1" "$2" "$4" /"$3" &>> $OGLOGCOMMAND +if which ${SCRIPTCREATE}Custom &>/dev/null; then + eval ${SCRIPTCREATE}Custom ${PARAMS[*]} &>> $OGLOGCOMMAND else - createImage "$1" "$2" "$4" /"$3" &>> $OGLOGCOMMAND + eval ${SCRIPTCREATE} ${PARAMS[*]} &>> $OGLOGCOMMAND fi RETVAL=$? diff --git a/admin/WebConsole/comandos/CrearImagen.php b/admin/WebConsole/comandos/CrearImagen.php index fe9412ad..57f1523c 100644 --- a/admin/WebConsole/comandos/CrearImagen.php +++ b/admin/WebConsole/comandos/CrearImagen.php @@ -10,6 +10,9 @@ // Version 1.1.1: Si no existe repositorio asignado al ordenador se muestra un mensaje informativo (ticket-870). // Autora: Irina Gomez, ETSII Universidad de Sevilla // Fecha: 2018-11-08 +// Version 1.2: Soporta imágenes de disco. Nueva función HTMLSELECT_imagenes_disco +// Autora: Irina Gomez, ETSII Universidad de Sevilla +// Fecha: 2020-06-19 // ************************************************************************************************************************************************* include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -123,8 +126,8 @@ function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$disk,$particion, imagenes.idperfilsoft, repositorios.nombrerepositorio, repositorios.ip FROM imagenes INNER JOIN repositorios USING (idrepositorio) WHERE imagenes.tipo=".$IMAGENES_MONOLITICAS." - AND repositorios.idcentro=".$_SESSION["widcentro"]." - ORDER BY imagenes.descripcion"; + AND repositorios.idrepositorio IN (SELECT idrepositorio FROM ordenadores WHERE ordenadores.ip='".$masterip."') + OR repositorios.ip='".$masterip."' ORDER BY imagenes.descripcion"; $rs=new Recordset; $rs->Comando=&$cmd; @@ -145,6 +148,46 @@ function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$disk,$particion, return($SelectHtml); } +/*________________________________________________________________________________________________________ + Crea la etiqueta html <SELECT> de las imágenes de disco con identificador "despleimagen_" +________________________________________________________________________________________________________*/ +function HTMLSELECT_imagenes_disco($cmd,$idordenador) +{ + global $IMAGENES_DISCO; + + // 1.1 Imagenes de todos los repositorios de la UO. + $selectrepo='select repositorios.idrepositorio from repositorios INNER JOIN aulas INNER JOIN ordenadores where repositorios.idcentro=aulas.idcentro AND aulas.idaula=ordenadores.idaula AND idordenador='.$idordenador; + + $SelectHtml=""; + $cmd->texto="SELECT *,repositorios.ip as iprepositorio, repositorios.nombrerepositorio as nombrerepo FROM imagenes + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + + $cmd->texto.=" AND imagenes.idrepositorio>0"; // La imagene debe existir en el repositorio. + $cmd->texto.=" AND imagenes.tipo=".$IMAGENES_DISCO; + $cmd->texto.=" AND repositorios.idrepositorio IN (".$selectrepo.") ORDER BY imagenes.descripcion"; + + + $rs=new Recordset; + $rs->Comando=&$cmd; + $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_" style="WIDTH:220">'; + $SelectHtml.= ' <OPTION value="0"></OPTION>'; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.='<OPTION value="'.$rs->campos["idimagen"]."_".$rs->campos["nombreca"]."_".$rs->campos["iprepositorio"]."_".$rs->campos["idperfilsoft"].'"'; + $SelectHtml.='>'; + $SelectHtml.= $rs->campos["descripcion"].' ('.$rs->campos["nombrerepo"].') </OPTION>'; + + $rs->Siguiente(); + } + $rs->Cerrar(); + } + $SelectHtml.= '</SELECT>'; + return($SelectHtml); +} + + //____________________________________________________________________________________________________ // Devuelve si tiene repositorio asignado o no (true o false) // Param: diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index 41b3d296..d7dc6eaf 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -185,17 +185,31 @@ function tablaConfiguracionesInventarioSoftware($cmd,$idordenador){ } -/*________________________________________________________________________________________________________ - Crea la tabla de configuraciones y perfiles a crear -________________________________________________________________________________________________________*/ +/** + * Crea la tabla de configuraciones y perfiles a crear + * + * @version 1.2 - Permite crear imágenes de disco. + * @author Irina Gomez, ETSII Universidad de Sevilla + * @date 2020/06/19 + */ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) { global $idcentro; global $TbMsg; $tablaHtml=""; + + // Lista de selección de imágenes de disco. + $select_imagenes_disco=HTMLSELECT_imagenes_disco($cmd,$idordenador); + + // Tipos de tabla de particionesa (índice codpar) + $disktable[1]="MSDOS"; + $disktable[2]="GPT"; + $disktable[3]="LVM"; + $disktable[4]="ZPOOL"; + $cmd->texto="SELECT ordenadores.ip AS masterip,ordenadores_particiones.numdisk, ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, - imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, + ordenadores_particiones.idimagen, imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero FROM ordenadores INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador @@ -210,34 +224,77 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) if (!$rs->Abrir()) return($tablaHtml."</table>"); // Error al abrir recordset $rs->Primero(); - $actualDisk = 0; - $columns = 5; + $columns = 6; + $diskcodpar = ""; + $disktamano = ""; while (!$rs->EOF){ - - if($actualDisk != $rs->campos["numdisk"]){ - $actualDisk = $rs->campos["numdisk"]; - $tablaHtml.='<TR><td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;"> <strong>'.$TbMsg["DISK"].' '.$actualDisk.'</strong></td></TR>'.chr(13); + $disk=$rs->campos["numdisk"]; + if($rs->campos["numpar"] == 0){ + + // Información del disco anterior. + if ($diskcodpar != ""){ + $infodisk ='<tr height="16" class="tabla_listados_sin" >'.chr(13); + $infodisk.='<TD> </TD>'.chr(13); + $infodisk.='<TD align=center> '.$diskcodpar.' </TD>'.chr(13); + $infodisk.='<TD> </TD>'.chr(13); + $infodisk.='<TD> </TD>'.chr(13); + $infodisk.='<TD align=center><strong> '.$disktamano.' </strong></TD>'.chr(13); + $infodisk.='<TD> </TD>'.chr(13); + $infodisk.='</TR>'.chr(13); + + $tablaHtml.=$infodisk; + } + + $tablaHtml.='<tr height="16">'.chr(13); + $tablaHtml.= '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">'; + $tablaHtml.='<input type=radio name="particion" value="'.$disk.'_0_'.$rs->campos["codpar"].'"> <strong>'.$TbMsg["DISK"].' '.$disk.chr(13).'</strong>'; + + // Incluimos lista se selección de las imágenes de disco + // con los identificadores del disco y la imagen actual en el disco seleccionada. + $tablaHtml.='<DIV style="float:right;">'.$TbMsg["IMAGE_REPOSITORY"].' '; + $tablaHtml.=str_replace(array("despleimagen_", 'value="'.$rs->campos["idimagen"]), + array("despleimagen_".$disk."_0", ' selected value="'.$rs->campos["idimagen"]) , + $select_imagenes_disco); + $tablaHtml.='</DIV></TD></TR>'.chr(13); + + // Tipo de tabla de particiones + $diskcodpar=isset($disktable[$rs->campos["codpar"]]) ? $disktable[$rs->campos["codpar"]] : ""; + $disktamano=$rs->campos["tamano"]; + } else { + // si tipo partitiones EMPTY no la mostramos + if ($rs->campos["tipopar"] == "EMPTY"){ + $rs->Siguiente(); + continue; } - + // Compruebo si la partición es clonable $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software $swccc=$swcc && $swcc; - $tablaHtml.='<TR>'.chr(13); - if($swccc){ - $tablaHtml.='<TD><input type=radio name="particion" value="'.$rs->campos["numdisk"]."_".$rs->campos["numpar"]."_".$rs->campos["codpar"].'"></TD>'.chr(13); - $tablaHtml.='<TD align=center> '.$rs->campos["numpar"].' </TD>'.chr(13); - $tablaHtml.='<TD align=center> '.$rs->campos["tipopar"].' </TD>'.chr(13); - if(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) // Si el identificador del S.O. no es nulo pero no hay descripción - $tablaHtml.='<TD align=center> '.'<span style="FONT-SIZE:10px; COLOR: red;" >'.$TbMsg[12].'</span></TD>'.chr(13); - else - $tablaHtml.='<TD> '.$rs->campos["nombreso"].' </TD>'.chr(13); - - $tablaHtml.='<TD>'.HTMLSELECT_imagenes($cmd,$idrepositorio,$rs->campos["idperfilsoft"],$rs->campos["numdisk"],$rs->campos["numpar"],$rs->campos["masterip"]).'</TD>'; - } + // Si no existe descripción del S.O. muestro mensaje. + $nombreso=(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) ? '<span style="FONT-SIZE:10px; COLOR: red;">'.$TbMsg[12].'</span>': $rs->campos["nombreso"]; + + $tablaHtml.='<TR class="tabla_listados_sin" >'.chr(13); + // Si es clonable muestro input radio para seleccionarlo. + $tablaHtml.='<TD>'; + if($swccc) $tablaHtml.='<input type=radio name="particion" value="'.$rs->campos["numdisk"]."_".$rs->campos["numpar"]."_".$rs->campos["codpar"].'">'; + $tablaHtml.= '</TD>'.chr(13); + $tablaHtml.='<TD align=center> '.$rs->campos["numpar"].' </TD>'.chr(13); + $tablaHtml.='<TD align=center> '.$rs->campos["tipopar"].' </TD>'.chr(13); + $tablaHtml.='<TD align=center> '.$nombreso.'</TD>'.chr(13); + $tablaHtml.='<TD align=center> '.$rs->campos["tamano"].' </TD>'.chr(13); + // Si es clonable muestro lista de selección de imágenes. + $tablaHtml.='<TD> '; + if($swccc) $tablaHtml.=HTMLSELECT_imagenes($cmd,$idrepositorio,$rs->campos["idperfilsoft"],$rs->campos["numdisk"],$rs->campos["numpar"],$rs->campos["masterip"]); + $tablaHtml.=' </TD>'; $tablaHtml.='</TR>'.chr(13); + } $rs->Siguiente(); } $rs->Cerrar(); + + // Info del último disco + if ($diskcodpar != "") $tablaHtml.=$infodisk; + if ( $tablaHtml == "" ) { // Equipo sin configuracion en base de datos. $tablaHtml='<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">'.chr(13); @@ -253,6 +310,7 @@ function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio) $inicioTabla.=' <TH align=center> '. $TbMsg["PARTITION"] .' </TH>'.chr(13); $inicioTabla.=' <TH align=center> '. $TbMsg["PARTITION_TYPE"] .' </TH>'.chr(13); $inicioTabla.=' <TH align=center> '. $TbMsg["SO_NAME"] .' </TH>'.chr(13); + $inicioTabla.=' <TH align=center> '. $TbMsg["SIZE"] .' </TH>'.chr(13); $inicioTabla.=' <TH align=center> '. $TbMsg["IMAGE_TO_CREATE"].' -- '.$TbMsg["DESTINATION_REPOSITORY"] .' </TH>'.chr(13); $inicioTabla.=' </TR>'.chr(13); @@ -442,7 +500,6 @@ function tablaConfiguracionesCrearSoftIncremental($idordenador) <<<<<<< .mine /**/ - // Devuelve un Array nombres de los sistemas operativos en BD con sus identificadores. function SistemaOperativoBD ($cmd) { $idSistOperativo = array(); // Array nombres de los sistemas operativos |