Script Python pour WLST : « Un script pour les redémarrer tous »
Cet article fait suite à un premier article que vous pouvez retrouver => ici <=.
A l'origine, il était question de vous présenter un "framework" afin de rendre scriptable le redémarrage de WebLogic.
Ici, nous allons aller un peu plus loin pour nous confronter au cas d'un environnement clustérisé.
Pour manipuler les serveurs WebLogic des différentes machine nous allons utiliser le langage Python.
Nous ferons ainsi appel à "Node Manager" via la console WLST pour atteindre les différents nœuds à partir d'une seule machine.
Schéma d'architecture
Voici le schéma d'architecture de notre exemple :
Script "master"
Ci-dessous, le script qui assure l'arrêt et redémarrage de tous les serveurs à partir de l'endroit unique (a.domaine.name.fr) où il sera lancé.
#=========================================================================================
#Import necessary classes/interfaces
#=========================================================================================
from java.io import FileInputStream
import java.lang
import os
import string
import socket;
#=========================================================================================
#=========================================================================================
# CONNECT TO ADMIN SERVER (WLST)...
# => configuration server
#=========================================================================================
print 'CONNECT TO ADMIN SERVER';
admin_server_listen_address = "a.domaine.name.fr";
admin_server_listen_port="8080";
admin_server_url = 't3://' + admin_server_listen_address + ':' + admin_server_listen_port;
admin_username="userAdminWeblogic"
admin_password="passwordAdminWeblogic"
admin_server_name="nameAdminServer"
#=========================================================================================
# ...CONNECT TO ADMIN SERVER (WLST)
# => Stopping servers with "running" status
# => Launch Sleep Thread until all servers are 'shutdown' or 'failed_not_restartable'
#=========================================================================================
try:
connect(admin_username, admin_password, admin_server_url);
print 'STOPPING SERVERS';
domainRuntime();
server_lifecycles = cmo.getServerLifeCycleRuntimes();
for server_lifecycle in server_lifecycles:
if (server_lifecycle.getState() == 'RUNNING' and server_lifecycle.getName() != admin_server_name):
print 'STOP SERVER ' + server_lifecycle.getName();
task = server_lifecycle.shutdown(1000, java.lang.Boolean('true'));
java.lang.Thread.sleep(1000);
print task.getStatus() + ', ' + server_lifecycle.getState();
else:
print 'SERVER ' + server_lifecycle.getName() + ' is in ' + server_lifecycle.getState() + ' state and will not be stopped';
all_stoped="false";
while all_stoped != "true" :
all_stoped="true";
for server_lifecycle in server_lifecycles:
if (server_lifecycle.getState() != 'SHUTDOWN' and server_lifecycle.getName() != admin_server_name and server_lifecycle.getState() != 'FAILED_NOT_RESTARTABLE'):
all_stoped = "false";
print 'SERVER ' + server_lifecycle.getName() + ' is ' + server_lifecycle.getState();
java.lang.Thread.sleep(30000);
else:
print 'SERVER ' + server_lifecycle.getName() + ' is ' + server_lifecycle.getState();
try:
for server_lifecycle in server_lifecycles:
if (server_lifecycle.getState() == 'RUNNING' and server_lifecycle.getName() == admin_server_name):
print 'STOP SERVER ' + server_lifecycle.getName();
task = server_lifecycle.shutdown(1000, java.lang.Boolean('true'));
java.lang.Thread.sleep(10000);
java.lang.Thread.sleep(10000);
except:
print 'AdminStop'
except:
print 'Unable to stop'
print 'DISCONNECT FROM THE ADMIN SERVER';
disconnect();
#=========================================================================================
#=========================================================================================
# CONNECT TO THE NODEMANAGER A...
# => configuration server
# => nmType generally is "ssl" or "plain" (check your configuration)
#=========================================================================================
print 'CONNECT to the NodeManager A to start servers...';
Username="userNodemanagerA"
Password="passwordNodemanagerA"
nmType="ssl"
Host="a.domain.name.fr"
nmPort="5555"
domainName="domainName"
domainDir="/domainPath/domainDir"
#=========================================================================================
# ...CONNECT TO THE NODEMANAGER A
# => nmConnect() to connect to the nodemanager with defined configuration
# => nmStart() to start each node present on the defined configuration server
#=========================================================================================
nmConnect(Username,Password,Host,nmPort,domainName,domainDir,nmType)
nmStart('AdminServer')
nmStart('ManagedServer1')
nmStart('ManagedServer2')
nmDisconnect()
#=========================================================================================
#=========================================================================================
# CONNECT TO THE NODEMANAGER B
# => configuration server
# => nmType generally is "ssl" or "plain" (check your configuration)
#=========================================================================================
print 'CONNECT to the NodeManager B to start servers...';
Username="userNodemanagerB"
Password="passwordNodemanagerB"
nmType="ssl"
Host="b.domain.name.fr"
nmPort="5555"
domainName="domainName"
domainDir="/domainPath/domainDir"
#=========================================================================================
# ...CONNECT TO THE NODEMANAGER B
# => nmConnect() to connect to the nodemanager with defined configuration
# => nmStart() to start each node present on the defined configuration server
#=========================================================================================
nmConnect(Username,Password,Host,nmPort,domainName,domainDir,nmType)
nmStart('ManagedServer3')
nmStart('ManagedServer4')
nmDisconnect()
#=========================================================================================
#=========================================================================================
# RESUME SERVER IF NEEDED (WLST)...
# => configuration server
#=========================================================================================
print 'CONNECT TO ADMIN SERVER';
admin_server_listen_address = "a.domaine.name.fr";
admin_server_listen_port="8080";
admin_server_url = 't3://' + admin_server_listen_address + ':' + admin_server_listen_port;
admin_username="userAdminWeblogic"
admin_password="passwordAdminWeblogic"
admin_server_name="nameAdminServer"
connect(admin_username, admin_password, admin_server_url);
print 'RESUME SERVERS';
domainRuntime();
server_lifecycles = cmo.getServerLifeCycleRuntimes();
#=========================================================================================
# ... RESUME SERVER IF NEEDED (WLST)
# => Check if servers with "ADMIN" status exists
# => Launch Sleep Thread until all servers are "RUNNING"
#=========================================================================================
for server_lifecycle in server_lifecycles:
if (server_lifecycle.getState() == 'ADMIN' and server_lifecycle.getName() != admin_server_name):
print 'RESUME SERVER ' + server_lifecycle.getName();
task = server_lifecycle.resume();
java.lang.Thread.sleep(1000);
print task.getStatus() + ', ' + server_lifecycle.getState();
else:
print 'SERVER ' + server_lifecycle.getName() + ' is in ' + server_lifecycle.getState() + ' state and will not be RESUME';
all_stoped="false";
while all_stoped != "true" :
all_stoped="true";
for server_lifecycle in server_lifecycles:
if (server_lifecycle.getState() != 'RUNNING' and server_lifecycle.getName() != admin_server_name):
all_stoped = "false";
java.lang.Thread.sleep(30000);
else:
if (server_lifecycle.getName() != admin_server_name):
print 'SERVER ' + server_lifecycle.getName() + ' is in ' + server_lifecycle.getState() + ' state';
java.lang.Thread.sleep(10000);
print 'DISCONNECT FROM THE ADMIN SERVER';
disconnect();
#=================================================================================
#=================================================================================
exit()
Afin de lancer le script "restartAll.py", il va falloir se placer dans le répertoire de la commande "wlst.sh", puis lancer la commande suivante :
cd $WELOGIC_HOME/common/bin/wlst.sh restartAll.py
Nous aurions pu également créer, pour aller plus loin, différents scripts modulables supplémentaires (par exemple : purges de fichiers ou clean des caches) dans des fichiers Python séparés que nous aurions appelé via ce même mécanisme avec la bonne pratique de les ajouter via crontab pour assurer une maintenance automatisée.
Partage
Gardez un oeil sur tout
Recevez des notifications dès la publication d’un nouvel article et restez informé de l’actualité Cloud !
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
Fonctionnel
Toujours activé
L’accès ou le stockage technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’utilisateur, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
L’accès ou le stockage technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou l’internaute.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques.Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
L’accès ou le stockage technique est nécessaire pour créer des profils d’internautes afin d’envoyer des publicités, ou pour suivre l’utilisateur sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.