published on in bash IT JVM Weblogic WLST
tags: web

WLST – Scripting para WebLogic vía bash (II)

Pues hace ya algunos días que habíamos dejado macerando en el artículo anterior el script de python getRunningserver.py que nos enseñaba la lista de instancias WebLogic que están corriendo (modo RUNNING). Vamos a ver ahora si podemos integrar este script en otro de bash, de forma que podamos fácilmente ejecutarlo desde la línea de comandos.

Teníamos este comando para ejecutar nuestro script (ojo, acordáos que en en el artículo anterior habíamos definido una serie de variables de entorno!) :

${JAVA_HOME}/bin/java -Dpython.cachedir=/tmp weblogic.WLST \
getRunningservers.py userconfig.properties userkey.properties \
t3://localhost:7001

Vale, la jugada ahora es integrar todos los requisitos que necesitamos para lanzar este script desde otro de bash, a saber:

  • Cargar las variables de entorno de WebLogic vía  setDomainEnv,sh
  • Definir la JVM en caso de que queramos usar otra que la que usa WL
  • Definir los archivos de autorización de WLST
  • Definir la URL de administración de WL

Vamos allá

El archivo de configuración

Crearemos un archivo de configuración para almacenar los datos propios del dominio con el que vamos a trabajar. De esta forma, sólo tendremos que modificar este archivo y no el de la lógica de proceso si queremos usarlo con otro sistema.

El archivo podría quedar así:

#------------------------------------------------------------------------------
# Configuracion  - getRunningServers
#------------------------------------------------------------------------------

#Usuario UNIX que puede ejecutar el script
GOODUSER=weblogic

#nombre de Dominio de WebLogic
DOMAIN_NAME=midominio

#Directorio del dominio de Weblogic
DOMAIN_DIR="/home/weblogic/bea103/user_projects/domains/${DOMAIN_NAME}"

#Path del script para cargar las variables de entorno del dominio
WL_ENV_FILE="${DOMAIN_DIR}/bin/setDomainEnv.sh"

#URL de adminustracion
WL_ADMIN_URL="t3://127.0.0.1:7001"

#Archivos de credenciales
userFile="${HOME}/scripts/userconfig.properties"
userKey="${HOME}/scripts/userkey.properties"

#Localización del script de python
getStuckThreadsScript="${HOME}/scripts/getRunningServers.py"

#Opciones de SSL para el WLST (depende de tu setup pueden variar, para este
#ejemplo, no usamos SSL)
#SSL_OPTS="-Dweblogic.security.SSL.trustedCAKeyStore=${DOMAIN_DIR}/trust.jks -Dweblogic.security.SSL.ignoreHostnameVerification=true"

#Opciones para WLST (incluye las de SSL)
WLST_OPTS="-Dpython.cachedir=/tmp ${SSL_OPTS}"

Nada extraño, ¿verdad? Simplemente un archivo de configuración donde definiremos las variables específicas del dominio.

El archivo de ejecución

Bueno, ahora la cosa es crear un script de bash que amalgame todo lo anterior. Intentaremos hacerlo modular y añadirle algo de elegancia aplicando códigos de escape ANSI.

Ojo:, este script, aunque funcional, carece de alguna funcionalidad bastante útil que más adelante añadiremos.

#!/usr/bin/env bash
#------------------------------------------------------------------------------
# Descripción
#------------------------------------------------------------------------------
#
# Author: Carlos Carus - Kus - kus_at_kus.es
# Name: getRunningServers.sh - borrador 1
#
# Descripcion:
# Obtiene la lista de instancias activas de un dominio de WebLogic
# No es definitivo, le faltan cosas 😉
#
#------------------------------------------------------------------------------
# Listado de cambios
#------------------------------------------------------------------------------
#
# git+ssh://git-url
#
# 2010/09/28
# VERSION 0.01 -
#
#

VERSION=0.01

nombreScript=$(basename $0)
nombreConfig=$(echo ${DefaultMonitorName} | sed 's/\(.*\)\..*/\1/').conf

#------------------------------------------------------------------------------
# Función de Debug
#------------------------------------------------------------------------------
showDebug() {
  if [[ ${MYDEBUG} == "Y" ]];then
    echo -e "\e[1;33m[DEBUG]\e[0m $@"
  fi
}

#------------------------------------------------------------------------------
# Argumentos de entrada
#------------------------------------------------------------------------------
vars=(`echo $@`)
z=0
for option in ${vars[@]}
do
  ((z=z+1)) #apuntamos al siguiente token
  if [[ ${option} == "-h" ]] || [[ ${option} == "--help" ]]; then
    echo -e "${nombreScript}: Obtiene la lista de instancias activas de un dominio de WebLogic"
    echo -e "Uso: ${nombreScript} [OPTION]..."
    echo -e "Las variables pasadas como parámetro tienen preferencia sobre las del archivo de configuración\n"
    echo -e "\t -c, --config FILE:\tArchivo de configuración. Por defecto ${nombreConfig}"
    echo -e "\t -d, --debug:\t\tActiva el modo debug"
    echo -e "\t -h, --help\t\tMuestra esta ayuda"
    echo
    exit 0
  fi

  if [[ ${option} == "-d" ]] || [[ ${option} == "--debug" ]]; then
    MYDEBUG=Y
  fi

  if [[ ${option} == "-c" ]] || [[ ${option} == "--conf" ]]; then
    CONF=${vars[z]}
  fi

done

#------------------------------------------------------------------------------
# Tenemos todo?
#------------------------------------------------------------------------------
if [[ ${CONF} == "" ]];then
    CONF=${nombreConfig}
fi
if [[ -f $CONF ]];then
    source ${CONF}
    showDebug "Main: cargado el archivo de configuracion ${CONF}"
else
    echo "El archvio de configuracion ${CONF} no ha sido encontrado."
    echo "Use $(basename $0) --help para ver las opciones"
    exit 1
fi

#------------------------------------------------------------------------------
# Variables genéricas
#------------------------------------------------------------------------------

#Colores
RED='\e[1;31m'
BLUE='\e[1;34m'
CYAN='\e[1;36m'
YELLOW='\e[1;33m'
GREEN='\e[0;32m'
NC='\e[0m'              # No Color
BOLD='\e[1m'
UNDERLINE='\e[4m'
BLINK='\e[5m'
INVERSE='\e[7m'
NF='\e[m'               # No format
RES_COL=70
RES_CO2=30
MOVE_TO_COL="\\033[${RES_COL}G"

#------------------------------------------------------------------------------
# Funciones
#------------------------------------------------------------------------------
checkID(){
  if [[ ${GOODUSER} != ${LOGNAME} ]];then
    showDebug "checkID: Ejecutado como ${LOGNAME}, esperando ${GOODUSER}"
    echo "[ERROR] Este script debe ser ejecutado como el usuario  ${GOODUSER}"
    exit 1
  fi
}

compruebaCredenciales(){
  showDebug "compruebaCredenciales: Comprobando ${userFile} y ${userKey}"
  if [[ ! -r ${userFile} ]] || [[ ! -r ${userKey} ]];then
    echo -e "${RED}[ERROR]${NF} Los archivos de credenciales ${userFile} o ${userKey} no son accesibles"
    exit 1
  fi
}

compruebaScriptPython(){
  showDebug "compruebaScriptPython: Comprobando el script de python ${getStuckThreadsScript}"
  if [[ ! -r ${getStuckThreadsScript} ]];then
    echo -e "${RED}[ERROR]${NF} El script ${getStuckThreadsScript} no es accesible"
    exit 1
  fi
}

cargaEntornoWLST(){
    showDebug "cargaEntornoWLST: Cargando el entorno ${WL_ENV_FILE}"
    if [[ -r ${WL_ENV_FILE} ]] && [[ -x ${WL_ENV_FILE} ]]; then
        source ${WL_ENV_FILE}
        #JAVA_HOME es cargada por el script de WL
        JAVAWLST="${JAVA_HOME}/bin/java ${WLST_OPTS} weblogic.WLST"
    else
        echo "${RED}[ERROR]${NF} El script de carga el entorno ${WL_ENV_FILE} no es accesible o ejecutable"
        exit 1
    fi
}

getRunningservers(){
  showDebug "getRunningservers: Obteniendo la lista de instacias activas"
  ${JAVAWLST} ${getStuckThreadsScript} ${userFile} ${userKey} ${WL_ADMIN_URL}
}

#------------------------------------------------------------------------------
# Lógica principal
#------------------------------------------------------------------------------

checkID
compruebaCredenciales
compruebaScriptPython
cargaEntornoWLST
getRunningservers

exit 0

La ejecución

Si lo ejecutamos con el modo de DEBUG activo (-d), nos saldría algo como esto:

weblogic@:scripts/> ./getRunningServers.sh -d
[DEBUG] Main: cargado el archivo de configuracion getRunningServers.conf
[DEBUG] compruebaCredenciales: Comprobando /home/weblogic/scripts/userconfig.properties y /home/weblogic/scripts/userkey.properties
[DEBUG] compruebaScriptPython: Comprobando el script de python /home/weblogic/scripts/getRunningServers.py
[DEBUG] cargaEntornoWLST: Cargando el entorno /home/weblogic/bea103/user_projects/domains/midominio/bin/setDomainEnv.sh
[DEBUG] getRunningservers: Obteniendo la lista de instacias activas

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Connecting to http://localhost:7001 with userid admin_user ...
Successfully connected to Admin Server 'admin' that belongs to domain 'midominio'.

Location changed to serverRuntime tree. This is a read-only tree with DomainMBean as the root.
For more help, use help(domainConfig)

Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.
For more help, use help(domainRuntime)

[INFO] The server admin is running
[INFO] The server server1 is running
Disconnected from weblogic server: admin
weblogic:~/scripts>

Vale, parece que funciona, pero para hacerlo más bonito o “reusable”, habría que evitar que salga por pantalla todo esa literatura que los scripts de WLST generan al arranque. No será nada complicado, pero eso lo veremos en el siguiente artículo, donde cambiaremos el script de python para que no genere tanta verborrea y haremos que nuestro script en bash recoja toda esa salida y la “parsee” tal y como queramos!

comments powered by Disqus