diff options
author | Irina Gómez <irinagomez@us.es> | 2020-06-22 14:26:24 +0200 |
---|---|---|
committer | Irina Gómez <irinagomez@us.es> | 2020-06-22 14:26:24 +0200 |
commit | eabb7bdb6699201db39fee3049e0bb7dcce94ab4 (patch) | |
tree | 21418b1b929f66c45a730c93170d01471791a017 | |
parent | 31d6bf3bc536bf7a66f9824c020e189797f83177 (diff) |
#894 Console 'Restore Image' Command: Supports disk image.disk-image
The form allows you to select the disk image to restore.
The interface script checks image type, disk or partition, and uses the appropriate script.
-rwxr-xr-x | admin/Interface/RestaurarImagen | 9 | ||||
-rw-r--r-- | admin/WebConsole/comandos/RestaurarImagen.php | 54 | ||||
-rw-r--r-- | admin/WebConsole/comandos/jscripts/RestaurarImagen.js | 6 | ||||
-rw-r--r-- | admin/WebConsole/includes/pintaParticiones.php | 93 |
4 files changed, 127 insertions, 35 deletions
diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen index 6f9ae244..58b418ed 100755 --- a/admin/Interface/RestaurarImagen +++ b/admin/Interface/RestaurarImagen @@ -8,8 +8,15 @@ # $4 Dirección IP del repositorio # $5 Protocolo UNICAST MULTICAST TORRENT # $6 Opciones del protocolo +#@version 1.2 - Soporta imágenes de disco. +#@author Irina Gomez, ETSII Universidad de Sevilla. +#@date 2020/06/22 #_______________________________________________________________________________________________________________________________ # Llamar al script de despliegue "deployImage". -deployImage "$4" "$3" "$1" "$2" "$5" "$6" "$7" "$8" || exit $? +if [ $2 -eq 0 ]; then + deployDiskImage "$4" "$3" "$1" "$5" "$6" "$7" "$8" || exit $? +else + deployImage "$4" "$3" "$1" "$2" "$5" "$6" "$7" "$8" || exit $? +fi diff --git a/admin/WebConsole/comandos/RestaurarImagen.php b/admin/WebConsole/comandos/RestaurarImagen.php index 21fdda46..21c5bf77 100644 --- a/admin/WebConsole/comandos/RestaurarImagen.php +++ b/admin/WebConsole/comandos/RestaurarImagen.php @@ -11,6 +11,9 @@ // HTMLSELECT_imagenes: Imagenes de todos los repositorios de la UO - Cambia parametro idordenadores por idambito // autor: Irina Gomez, Universidad de Sevilla // fecha 2015-06-17 +// Version 1.2: Soporta imágenes de disco. Nueva función HTMLSELECT_imagenes_disco +// Autora: Irina Gomez, ETSII Universidad de Sevilla +// Fecha: 2020-06-22 // ************************************************************************************************************************************************* include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -201,6 +204,57 @@ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idambito,$ return($SelectHtml); } /*________________________________________________________________________________________________________ + Crea la etiqueta html <SELECT> de las imágenes de disco +________________________________________________________________________________________________________*/ +function HTMLSELECT_imagenes_disco($cmd,$idambito,$ambito) +{ + global $IMAGENES_DISCO; + + $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; + + // 1.1 Imágenes de todos los repositorios de la UO. + switch ($ambito) { + case 16: + // ambito ordenador + $selectrepo='select repositorios.idrepositorio from repositorios INNER JOIN aulas INNER JOIN ordenadores where repositorios.idcentro=aulas.idcentro AND aulas.idaula=ordenadores.idaula AND idordenador='.$idambito; + break; + case 8: + // ambito grupo ordenadores + $selectrepo='select idrepositorio from repositorios INNER JOIN aulas INNER JOIN gruposordenadores where repositorios.idcentro=aulas.idcentro AND aulas.idaula=gruposordenadores.idaula AND idgrupo='.$idambito; + break; + case 4: + // ambito aulas + $selectrepo='select idrepositorio from repositorios INNER JOIN aulas where repositorios.idcentro=aulas.idcentro AND idaula='.$idambito; + break; + } + $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); +} + +/*________________________________________________________________________________________________________ Crea la etiqueta html <SELECT> de los repositorios ________________________________________________________________________________________________________*/ function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion){ diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js index 36705236..fb5785d8 100644 --- a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js +++ b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js @@ -31,7 +31,7 @@ var protoclonacion=document.getElementById("protoclonacion_"+idradio); if(despleimagenizda.selectedIndex>0) despleimagen=despleimagenizda; - if(despleimagendrcha.selectedIndex>0) despleimagen=despleimagendrcha; + if (!!despleimagendrcha && despleimagendrcha.selectedIndex>0) despleimagen=despleimagendrcha; var imgcanrepo=despleimagen.value.split("_"); atributos+="idi="+imgcanrepo[0]+RC; // Identificador de la imagen atributos+="nci="+imgcanrepo[1]+RC; // Nombre canónico @@ -94,9 +94,9 @@ var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda. var despleimagendcha=document.getElementById("despleimagen_"+idradio+"_0"); // Desplegable derecha. - + var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado - var p2=despleimagendcha.selectedIndex; // Toma índice seleccionado + var p2=(!!despleimagendcha) ? despleimagendcha.selectedIndex : 0; // Toma índice seleccionado if (p1===0 && p2===0){ alert(TbMsg[0]); diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 3db46818..f49d3679 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -210,6 +210,9 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) // version 1.1: cliente con varios repositorios - HTMLSELECT_imagenes: cambia parametros idordenadores por idambito // autor: Irina Gomez, Universidad de Sevilla // fecha 2015-06-17 +// version 1.2 - Permite crear imágenes de disco. +// autor: Irina Gomez, Universidad de Sevilla +// fecha 2020/06/22 //________________________________________________________________________________________________________ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito) { @@ -221,9 +224,37 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c // Separamos las configuraciones segun el disco al que pertenezcan $diskConfigs = splitConfigurationsByDisk($configuraciones); - $columns=10; + // Clonación + $metodos="UNICAST=UNICAST-CACHE".chr(13); + $metodos.="UNICAST-DIRECT=UNICAST-DIRECT".chr(13); + $metodos.="MULTICAST " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-CACHE".chr(13); + $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13); + $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE"; + + $TBmetodos["UNICAST-CACHE"]=1; + $TBmetodos["UNICAST-DIRECT"]=2; + $TBmetodos["MULTICAST-CACHE"]=3; + $TBmetodos["MULTICAST-DIRECT"]=4; + $TBmetodos["TORRENT-CACHE"]=5; + $idxc=$_SESSION["protclonacion"]; + if ($idxc == "UNICAST") { + $idxc = "UNICAST-DIRECT"; + } + + // Lista de selección de métodos + $select_metodos= HTMLCTESELECT($metodos,"protoclonacion_","estilodesple","",$TBmetodos[$idxc],100); + + // Lista de selección de imágenes (igual para todos los discos) + $select_imagenes=HTMLSELECT_imagenes_disco($cmd,$idambito,$ambito); + + // Tipos de tabla de particiones (índice codpar) + $disktable[1]="MSDOS"; + $disktable[2]="GPT"; + $disktable[3]="LVM"; + $disktable[4]="ZPOOL"; + + $columns=8; echo '<TR>'; - echo '<TH align=center> </TH>'; echo '<th align="center"> '.$TbMsg["DISK"].' </th>'; // Número de disco echo '<TH align=center> '.$TbMsg["PARTITION"].' </TH>'; echo '<th align="center"> '.$TbMsg["PARTITION_TYPE"].' </th>'; // Tipo de partición @@ -235,27 +266,37 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c echo '<TH align=center> '.$TbMsg["RESTORE_METHOD"].' </TH>'; echo '</TR>'; - // Recorremos todas las configuraciones encontradas para cada disco - foreach($diskConfigs as $disk => $diskConfig){ $disk = (int)$disk; - echo'<tr height="16">'.chr(13); - echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;"> '.$TbMsg["DISK"].' '.$disk.'</td>'.chr(13); - $auxCfg=explode("@",$diskConfig); // Crea lista de particiones for($i=0;$i<sizeof($auxCfg);$i++){ $auxKey=explode(";",$auxCfg[$i]); // Toma clave de configuracion // Para particiones EFI desabilitamos el selector $disabled=''; + for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas - if($tbKeys[$k]["numpar"]!=0){ // No es info. del disco (part. 0) + if($tbKeys[$k]["numpar"]==0){ // Info. del disco (part. 0) + + echo'<tr height="16">'.chr(13); + echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;"> '; + $icp=$cc."_".$tbKeys[$k]["numdisk"]."_0"; // Identificador de la configuración-partición + echo '<input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].' '.$disabled.'>'.chr(13); + echo $TbMsg["DISK"].' '.$disk.chr(13); + echo '<DIV style="float:right;">'.$TbMsg["IMAGE_REPOSITORY"]." ".str_replace("despleimagen_","despleimagen_".$icp."_1",$select_imagenes).' </DIV> '.chr(13); + echo '</td>'.chr(13); + echo '<TD style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">'.str_replace("protoclonacion_","protoclonacion_".$icp,$select_metodos).'</TD>'.chr(13); + + // Tipo de tabla de particiones y tamaño. + $diskcodpar=isset($disktable[$tbKeys[$k]["codpar"]])? $disktable[$tbKeys[$k]["codpar"]] : ""; + $disksize=tomaTamano('0',$idordenadores,$tbKeys[$k]["numdisk"]); + + } else { $swcc=$tbKeys[$k]["clonable"]; if($swcc){ if ($tbKeys[$k]["tipopar"] == 'EFI') $disabled='disabled'; echo '<TR>'.chr(13); - echo '<TD align=center> </TD>'; $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].' '.$disabled.'></TD>'.chr(13); echo '<TD align=center> '.$tbKeys[$k]["numpar"].' </TD>'.chr(13); @@ -264,28 +305,11 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c echo'<TD align=center> '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]).' </TD>'.chr(13); echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).' </TD>'.chr(13); if ($tbKeys[$k]["tipopar"] == 'EFI') { - echo "<TD></TD>\n<TD></TD>\n<TD></TD>\n"; + echo "<TD></TD><TD></TD><TD></TD>".chr(13); } else { - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idambito,$ambito).'</TD>'; - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idambito,$ambito).'</TD>'; - - //Clonación - $metodos="UNICAST=UNICAST-CACHE".chr(13); - $metodos.="UNICAST-DIRECT=UNICAST-DIRECT".chr(13); - $metodos.="MULTICAST " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-CACHE".chr(13); - $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13); - $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE"; - - $TBmetodos["UNICAST-CACHE"]=1; - $TBmetodos["UNICAST-DIRECT"]=2; - $TBmetodos["MULTICAST-CACHE"]=3; - $TBmetodos["MULTICAST-DIRECT"]=4; - $TBmetodos["TORRENT-CACHE"]=5; - $idxc=$_SESSION["protclonacion"]; - if ($idxc == "UNICAST") { - $idxc = "UNICAST-DIRECT"; - } - echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>'; + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idambito,$ambito).'</TD>'.chr(13); + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idambito,$ambito).'</TD>'.chr(13); + echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>'.chr(13); } echo '</TR>'.chr(13); } @@ -293,8 +317,15 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c } } } + echo '<TR>'; + echo '<TD></TD>'; + echo '<TD align=center> '.$diskcodpar.' </TD>'; + echo '<TD></TD><TD></TD><TD></TD>'; + echo '<TD align=center><strong> '.$disksize.' </strong></TD>'; + echo '<TD></TD><TD></TD><TD></TD>'; + echo '</TR>'.chr(13); } - echo '<TR><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF; height:5px;"> </TD></TR>'; + echo '<TR><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF; height:5px;"> </TD></TR>'.chr(13); } /*________________________________________________________________________________________________________ |