Advertisement
hamacker

Script para aplicar atualizacoes do Xen

Apr 23rd, 2014
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.84 KB | None | 0 0
  1. #!/bin/bash
  2. #####################################################################################
  3. # Nome: xenupdate.sh                                                                #
  4. # Autor: Gladiston (Hamacker) Santana <sirhamacker[em]gmail.com>                    #
  5. # Proposito: Aplicar atualizacoes da citrix em servidores XenServer                 #
  6. #            O script só foi testando em sistemas de pool, mas se mudar a variavel  #
  7. #            do_pool=0 entao funcionaria as atualizacoes apenas para o host em que  #
  8. #            o script fosse executado (isso ainda nao foi testado)                  #
  9. # Instalacao: Coloque este script em /usr/bin ou crie um link simbolico para ele    #
  10. #             de qualquer lugar do disco, porem nunca coloque este script no mesmo  #
  11. #             diretorio que também ficarao as atualizacoes                          #
  12. # Como de usar: Va ate o diretorio onde estao as atualizacoes e digite:             #
  13. # xenupdate.sh XS62E000.zip ou                                                      #
  14. # xenupdate.sh XS62E000.xsupdate                                                    #
  15. # ATENCAO: Depois de aplicada a atualizacao o script remove o arquivo patch         #
  16. #          usado para aplicar a atualizacao. Se deseja que o script mantenha estes  #
  17. #          arquivos entao mude a variavel remove_files_after_sucess=0               #
  18. #####################################################################################
  19. # do_pool=1 (default) para atualizar o pool de servidores ou 0 para apenas este host
  20. do_pool=1
  21. # remove_files_after_sucess=1 (default)  para remover o arquivo de patch quando a
  22. # instalacao terminar bem sucedida ou 0 para manter o arquivo do patch
  23. remove_files_after_sucess=1
  24. # O primeiro parametro deve fornecer o nome do arquivo do patch
  25. xe_file=$1
  26.  
  27. #####################################################################################
  28. # Nao mude nada no script desse ponto em diante                                     #
  29. #####################################################################################
  30. xe_patch_name=${xe_file%%.*}
  31. xe_file_ext="${xe_file##*.}"
  32. host_uuid=""
  33. patch_uuid=""
  34. xe_sucess=0
  35.  
  36.  
  37. #
  38. # Descobrindo o host_uuid
  39. #
  40. host_uuid=`xe host-list name-label=$HOSTNAME|grep 'uuid'|cut -d':' -f2|tr -d ' '`
  41. echo "Formato detectado: $xe_file_ext"
  42. if [ "$xe_file_ext" = "zip" ] ; then
  43.   unzip -u $xe_file
  44.   xe_file=$xe_patch_name.xsupdate
  45.   xe_file_ext=xsupdate
  46. fi
  47.  
  48. if ! [  "$xe_file_ext" = "xsupdate" ] ; then
  49.   echo "Formato incompativel: $xe_file ($xe_file_ext)"
  50.   exit 2
  51. fi
  52.  
  53. if ! [ -f "$xe_file" ] ; then
  54.   echo "Arquivo nao encontrado: $xe_file"
  55.   exit 2
  56. fi
  57. echo "--------------------------------------------------------------------------"
  58. echo "Confira antes:"
  59. echo "- Nunca regrida um patch, se o ultimo foi XS62E012, não tente reinstalar versões anteriores."
  60. echo "- Todas as VMs estão com o CDROM virtualizado ejetado antes de prosseguir"
  61. echo "- Não há nenhum backup em execução neste instante."
  62. echo "Tecle [ENTER] para prosseguir ou CTRL+C para cancelar esta operação"
  63. read espera
  64. echo "--------------------------------------------------------------------------"
  65.  
  66. #
  67. # Se /var/xen/xc-install estiver montado estão desmonta-o...
  68. #
  69.  
  70. #mount_exist=`mount|grep /var/xen/xc-install|wc -l`
  71. #if [ $mount_exist -gt 0 ] ; then
  72. #  umount /var/xen/xc-install
  73. #fi
  74.  
  75. #
  76. # Observando se o patch ja existe e envia-o
  77. #
  78.  
  79. echo "Patch detectado: $xe_file"
  80. echo "Enviando o arquivo $xe_file para o servidor..."
  81. xe_sucess=`xe patch-list name-label=$xe_patch_name|grep "name-label"|grep "$xe_patch_name"|wc -l`
  82. do_upload=1
  83. if [  $xe_sucess -gt 0 ] ; then
  84.    do_upload=0
  85.    echo "Aparentemente o patch já está no servidor e não será necessário fazer o upload novamente."  
  86. fi
  87.  
  88. if [  $do_upload -gt 0 ] ; then
  89.     xe patch-upload file-name=$xe_file
  90.     erro=$?
  91.     if [  $erro -gt 0 ] ; then
  92.        echo "Erro ao executar:"
  93.        echo "xe patch-upload file-name=$xe_file"
  94.        echo "Prosseguir assim mesmo?"  
  95.        echo "Tecle [ENTER] para prosseguir ou CTRL+C para cancelar esta operação"
  96.        read espera
  97.        erro=$?
  98.    fi
  99. fi
  100.  
  101. #
  102. # Verificando se o patch foi enviado
  103. #
  104. xe_sucess=`xe patch-list name-label=$xe_patch_name|grep "name-label"|grep "$xe_patch_name"|wc -l`
  105. if [  $xe_sucess -eq 0 ] ; then
  106.    echo "Patch não foi encontrado no servidor:"
  107.    echo "nome do patch (name-label)=$xe_patch_name"
  108.    echo "Tecle [ENTER] para abandonar."
  109.    read espera
  110.    exit 2;
  111. fi
  112.  
  113. #
  114. # Aplicando o patch
  115. #
  116. patch_uuid=`xe patch-list name-label=$xe_patch_name|grep uuid|cut -d':' -f2|tr -d ' '`
  117. if [ -z $patch_uuid ] ; then
  118.    echo "UUID do patch não foi encontrado:"
  119.    echo "nome do patch (name-label)=$xe_patch_name"
  120.    echo "Tecle [ENTER] para abandonar."
  121.    read espera
  122.    exit 2;
  123. fi
  124.  
  125. echo "Aplicando o patch $xe_patch_name UUID=$patch_uuid "
  126. if [ $do_pool -eq 0 ] ; then
  127.   cmd_exec="xe patch-apply uuid=$patch_uuid host-uuid=$host_uuid"
  128.   xe patch-apply uuid=$patch_uuid host-uuid=$host_uuid
  129.   erro=$?
  130. else
  131.   cmd_exec="xe patch-pool-apply uuid=$patch_uuid"
  132.   xe patch-pool-apply uuid=$patch_uuid
  133.   erro=$?
  134. fi
  135. if [ $erro -gt 0 ] ; then
  136.   echo "Falha ao aplicar patch ($xe_patch_name) UUID=$patch_uuid."
  137.   echo "Comando:"
  138.   echo "$cmd_exec"
  139.   exit 1;
  140. fi
  141.  
  142. # Se deu tudo certo, reiniciar a pilha toolstack
  143. echo "Patch foi aplicado com sucesso!"
  144. echo "Pressione [ENTER] para reiniciar o toolstack"
  145. echo "ou CTRL+C para aborta-la."
  146. read espera
  147. xe-toolstack-restart
  148. erro=$?
  149. if [ $erro -gt 0 ] ; then
  150.    echo "Erro ao aplicar patch ($xe_patch_name) UUID=$patch_uuid."
  151.    exit 1;
  152. fi
  153.  
  154. # Sucesso
  155. echo "Patch $xe_patch_name foi instalado com sucesso."
  156. echo "Quando for conveniente, é recomendavel reiniciar o(s) host(s) envolvidos."
  157. if [ $remove_files_after_sucess -gt 0 ] ; then
  158.   rm -f $xe_patch_name*
  159. fi
  160.  
  161. # Finaliza com sucesso
  162. exit 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement