summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2020-06-19 10:20:08 +0200
committerIrina Gómez <irinagomez@us.es>2020-06-19 10:20:08 +0200
commit31d6bf3bc536bf7a66f9824c020e189797f83177 (patch)
tree2e152a7d04a2ac0c3b3b7cfe2b63e1bc8189b678
parentf8711cec895c0879632831086be7d8a8e374ed9d (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-xadmin/Interface/CrearImagen19
-rw-r--r--admin/WebConsole/comandos/CrearImagen.php47
-rw-r--r--admin/WebConsole/includes/pintaTablaConfiguraciones.php105
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;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$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>&nbsp;'.$diskcodpar.'&nbsp;</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"].'&nbsp;'.$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>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.chr(13);
- $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["tipopar"].'&nbsp;</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>&nbsp;'.'<span style="FONT-SIZE:10px; COLOR: red;" >'.$TbMsg[12].'</span></TD>'.chr(13);
- else
- $tablaHtml.='<TD>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</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>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.chr(13);
+ $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["tipopar"].'&nbsp;</TD>'.chr(13);
+ $tablaHtml.='<TD align=center> '.$nombreso.'</TD>'.chr(13);
+ $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["tamano"].'&nbsp;</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>&nbsp;'. $TbMsg["PARTITION"] .'&nbsp;</TH>'.chr(13);
$inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["PARTITION_TYPE"] .'&nbsp;</TH>'.chr(13);
$inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["SO_NAME"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["SIZE"] .'&nbsp;</TH>'.chr(13);
$inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["IMAGE_TO_CREATE"].' -- '.$TbMsg["DESTINATION_REPOSITORY"] .'&nbsp;</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