Your browser doesn't support the features requiredby impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome or Safari browser. Firefox 10 (to be released soon) will also handle it.
Use all scripts i show in this slides or you download from my repositories WITHOUT WARRANTY and on your own risk!
cd /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin
[root@cnxwas1 bin]$ ./wsadmin.sh -lang jython -username wasadmin -password password
WASX7209I: Connected to process "dmgr" on node cnxwas1CellManager01 using SOAP
connector; The type of process is: DeploymentManager
WASX7031I: For help, enter: "print Help.help()"
wsadmin>AdminControl.getCell()
'cnxwas1Cell01'
wsadmin>execfile("connectionsConfig.py")
Connections Administration initialized
wsadmin>LCConfigService.checkOutConfig('/tmp','cnxwas1Cell01')
# Edit /tmp/LotusConnections-config.xml and save your changes
wsadmin>LCConfigService.checkInConfig('/tmp','cnxwas1Cell01')
Loading schema file for validation: /tmp/LotusConnections-config.xsd
Loading schema file for validation: /tmp/service-location.xsd
/tmp/LotusConnections-config.xml is valid
Connections configuration file successfully checked in
wsadmin>execfile("newsAdmin.py")
Connecting to NewsMemberServiceName: News Configuration Environment initialized
wsadmin>NewsMemberService.syncMemberExtIdByEmail("cstoettner@stoeps.local")
syncMemberExtIdByEmail request processed
wsadmin>execfile("blogsAdmin.py")
Connecting to {...} Blogs Administration initialized
wsadmin>BlogsMemberService.syncMemberExtIdByEmail("cstoettner@stoeps.local")
WASX70115E: Exception running command:
"BlogsMemberSErvice.syncMemberExtIdByEmail("cstoettner@stoeps.local")";
exception information:
There is no member associated with this email address or login name:
cstoettner@stoeps.local
wsadmin>BlogsMemberService.syncMemberExtIdByEmail("CStoettner@stoeps.local")
syncMemberExtIdByEmail request processed
cd {WAS_HOME}/profiles/Dmgr01/bin./wsadmin.sh -lang {jython | jacl} -username wasadmin -password passwordwsadmin.bat -lang {jython | jacl} -username wasadmin -password password
export WAS_HOME=/opt/IBM/WebSphere/AppServer
export DMGR=Dmgr01
export APPSRV=AppSrv01
alias dmgrBin='cd $WAS_HOME/profiles/$DMGR/bin'
alias wsadmin='cd $WAS_HOME/profiles/$DMGR/bin;./wsadmin.sh -lang jython'
alias nodeBin='cd $WAS_HOME/profiles/$APPSRV/bin'
alias startNode='$WAS_HOME/profiles/$APPSRV/bin/startNode.sh'
alias startDmgr='$WAS_HOME/bin/startManager.sh'
alias stopNode='$WAS_HOME/profiles/$APPSRV/bin/stopNode.sh'
alias stopDmgr='$WAS_HOME/bin/stopManager.sh'
alias nodeLog='tail -f $WAS_HOME/profiles/$APPSRV/logs/nodeagent/SystemOut.log'
alias InfraClusterLog='tail -f $WAS_HOME/profiles/$APPSRV/logs/InfraCluster_server1/SystemOut.log'
alias Cluster1Log='tail -f $WAS_HOME/profiles/$APPSRV/logs/Cluster1_server1/SystemOut.log'
alias Cluster2Log='tail -f $WAS_HOME/profiles/$APPSRV/logs/Cluster2_server1/SystemOut.log'
edit {WAS_HOME}/profiles/Dmgr01/properties/wsadmin.properties{WAS_HOME}/profiles/Dmgr01/properties/soap.client.propsPropFilePasswordEncoder.sh soap.client.props com.ibm.SOAP.loginPassword
cd WAS_HOME
java/jre/bin/java \
-Djava.ext.dirs=deploytool/itp/plugins/com.ibm.websphere.v8_1.0.201.v20111031_1843/wasJars \
-cp securityimpl.jar:iwsorb.jar com.ibm.ws.security.util.PasswordDecoder \
"{xor}Lz4sLCgwLTs="
encoded password == "{xor}Lz4sLCgwLTs=", decoded password == "password"
execfile("connectionsConfig.py") execfile("loadAll.py"){WAS_HOME}/profiles/Dmgr01/properties/wsadmin.properties./wsadmin.sh -lang jython -profile loadAll.py
execfile('connectionsConfig.py')
execfile("activitiesAdmin.py")
execfile("blogsAdmin.py")
execfile("communitiesAdmin.py")
execfile("dogearAdmin.py")
execfile("filesAdmin.py")
execfile("forumsAdmin.py")
execfile("homepageAdmin.py")
execfile("newsAdmin.py")
execfile("profilesAdmin.py")
execfile("wikisAdmin.py")
cd {WAS_HOME}/profiles/Dmgr01/binCaution: In multinode cluster environments you're asked on which server you want to work
# Defining a String
x = 'Hello World'
x = "Hello World Two"
# Defining an integer
y = 10
# Float
z = 8.75
# Complex
i = 1 + 8.07j
# Multiple assignment
x, y, z = 1, 2, 3
wsadmin>range(7)
[0, 1, 2, 3, 4, 5, 6]
# Include a step in the range
wsadmin>range(0,10,3)
[0, 3, 6, 9]
# Good base for loops
wsadmin>range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
wsadmin>range(20,27)
[20, 21, 22, 23, 24, 25, 26]
#List
wsadmin>dbs = ['activities','blogs','communities','dogear','files','forum']
wsadmin>dbs[1]
'blogs'
# Dictionary with Performance Data
wsadmin>minConnections = {'activities':1,'blogs':1,'communities':10,'dogear':1}
wsadmin>maxConnections = {'activities':50,'blogs':250,'communities':200}
wsadmin>maxConnections
{'communities': 200, 'activities': 50, 'blogs': 250}
wsadmin>maxConnections.keys()
['communities', 'activities', 'blogs']
wsadmin>maxConnections.values()
[200, 50, 250]
wsadmin>maxConnections['blogs']
250
# Basic
if condition :
# print or do something
elif other condition :
# print or do something other
else :
# print or do completely different
# Example
if value.find( 'CLFWY0217E' ) > -1 :
print "\t\tuser already converted"
elif value.find( 'CLFWY0212E' ) > -1 :
print "\t\tuser not found in database"
elif value.find( ' CLFWY0209E' ) > -1 :
print "\t\tnew identifier '" + data[1] + "' does not exist."
else :
print '\t\tException value: ' + value
# For Loops
dbs = ['activities','blogs','communities','dogear','files','forum','homepage']
for db in dbs: #loop through databases
print "Database %s" % db
# While
x = 0
y = 3
while x <= y :
print 'Value of x is: %d' %(x)
x += 1
else:
print 'Completed!'
Value of x is: 0
Value of x is: 1
Value of x is: 2
Value of x is: 3
Completed!
# List of databases you want to check:
dbs = ['activities','blogs','communities','dogear','files','forum','homepage']
for db in dbs: #loop through databases
ds = AdminConfig.getid('/DataSource:' + db + '/')
checkDS = AdminControl.testConnection(ds)
if checkDS == "WASX7217I: Connection to provided datasource was successful." :
print 'Connect to %s was successful' % db
else :
print 'Error: %s is not available' % db
Connect to activities was successful
Connect to blogs was successful
Connect to communities was successful
[...]
#Define a dictionary with database names and parameters
perf = {'activities':{'minConnections':1,'maxConnections':50},
'blogs':{'minConnections':1,'maxConnections':250},
'communities':{'minConnections':10,'maxConnections':200},
'dogear':{'minConnections':1,'maxConnections':150},
'files':{'minConnections':10,'maxConnections':100},
'forum':{'minConnections':50,'maxConnections':100},
'homepage':{'minConnections':20,'maxConnections':100},
...
'wikis':{'minConnections':1,'maxConnections':100}}
statementCacheSize = 100 #change to 50 for oracle
# perf.keys() gives a list of all databases in perf
for db in perf.keys(): # Looping through databases, first values in dictionary
# db.upper() convert the database name to capitals
print 'Change DataSource parameters for: %s' % db.upper()
t1=AdminConfig.getid('/DataSource:' + db + '/')
print ' statementCacheSize: ' + str(statementCacheSize)
print ' minConnections: ' + str(perf[db]['minConnections'])
print ' maxConnections: ' + str(perf[db]['maxConnections'])
AdminConfig.modify(t1,'[[statementCacheSize "' + str(statementCacheSize) + '"]]')
AdminConfig.modify(t1,'[[connectionPool [[minConnections "' + str(perf[db]['minConnections']) + '"][maxConnections "' + str(perf[db]['maxConnections']) + '"]]]]')
AdminConfig.save()
MAILADDRESS = sys.argv[0]
print "Syncing MemberService for " + MAILADDRESS
execfile("/opt/install/scripts/loadAll.py")
ActivitiesMemberService.syncMemberExtIdByEmail(MAILADDRESS)
BlogsMemberService.syncMemberExtIdByEmail(MAILADDRESS)
CommunitiesMemberService.syncMemberExtIdByEmail(MAILADDRESS)
DogearMemberService.syncMemberExtIdByEmail(MAILADDRESS)
FilesMemberService.syncMemberExtIdByEmail(MAILADDRESS)
ForumsMemberService.syncMemberExtIdByEmail(MAILADDRESS)
NewsMemberService.syncMemberExtIdByEmail(MAILADDRESS)
WikisMemberService.syncMemberExtIdByEmail(MAILADDRESS)
./wsadmin.sh –lang jython –f "memberSyncByEmail.py" "cstoettner@stoeps.local"
EmailMatch = sys.argv[0]
# Loading Connections Administration Commands
execfile("activitiesAdmin.py")
execfile("blogsAdmin.py")
execfile("communitiesAdmin.py")
execfile("dogearAdmin.py")
execfile("filesAdmin.py")
execfile("forumsAdmin.py")
execfile("homepageAdmin.py")
execfile("newsAdmin.py")
execfile("profilesAdmin.py")
execfile("wikisAdmin.py")
apps = ['Activities','Blogs','Communities','Dogear','Files','Forums','News','Wikis']
def memService(appname,EmailMatch):
if("Activities" == appname) :
print "\tActivitiesMemberService.syncAllMembersByExtId"
ActivitiesMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Blogs" == appname) :
print "\tBlogsMemberService.syncAllMembersByExtId"
BlogsMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("News" == appname) :
print "\tNewsMemberService.syncAllMembersByExtId"
NewsMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Dogear" == appname) :
print "\tDogearMemberService.syncAllMembersByExtId"
DogearMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Communities" == appname) :
print "\tCommunitesMemberService.syncAllMembersByExtId"
CommunitiesMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Files" == appname) :
print "\tFilesMemberService.syncAllMembersByExtId"
FilesMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Forums" == appname) :
print "\tForumsMemberService.syncAllMembersByExtId"
ForumsMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
elif("Wikis" == appname) :
print "\tWikisMemberService.syncAllMembersByExtId"
WikisMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": EmailMatch } )
else :
print "\tUnknown application name '" + appname + "'"
for app in apps:
print "Sync all Members by EXTID for " + app
memService(app, EmailMatch)
apps = AdminApp.list()
appsList = apps.split(lineSeparator) #List of all applications
path = '/opt/install/backup' # must exist!
for app in appsList:
filename = app + ".txt"
my_file = open(path + '/' + filename,'w')
my_file.write (AdminApp.view(app,"-MapRolesToUsers"))
my_file.flush
my_file.close()
./wsadmin.sh –lang jython –f "{path}/securityrolebackup.py" 'backuppath'
import os
import sys
# Restore Security Role from Textfile (created with j2eerolebackup
path = sys.argv[0]
if path == '':
path='../temp/j2eebackup' # path where Backup is stored
print "Setting path to %s!" % path
if not os.path.exists(path):
print "Path does not exists, please provide directory with your backup files!"
sys.exit()
def convertFile2Dict(appname):
# function to convert backup txt files of Security Role Backup to a dictionary
filename = path + '/' + appname + ".txt"
myfile = open(filename,'r')
count = 0
dict = {}
for line in myfile.readlines():
# for loop through file to read it line by line
if (':' in line) and (count > 12):
value = line.split(':')[0]
# cred = line.split(':')[1].strip('\n')
cred = line.split(':')[1]
# cred = cred.strip(' ')
cred = cred.strip()
if value == "Role":
role = cred
dict[role] = {}
dict[role][value] = cred
count += 1
return dict
def setSecurityRoles(dictionary,appName):
strRoleChange = '['
for role in dictionary.keys():
# Loop through Roles
strRoleChange += '[\"' + role + '\" '
strRoleChange += dictionary[role]['Everyone?'] + ' '
strRoleChange += dictionary[role]['All authenticated?'] + ' '
strRoleChange += '\"' + dictionary[role]['Mapped users'] + '\" '
strRoleChange += '\"' + dictionary[role]['Mapped groups'] + '\"] '
strRoleChange += ']]'
AdminApp.edit(appName, '[-MapRolesToUsers' + strRoleChange +']')
print "Setting Roles and Users for %s" % appName
AdminConfig.save()
apps = AdminApp.list()
appsList = apps.split(lineSeparator)
# Test with some Apps:
# appsList = ['Blogs','Activities','Wikis']
# or Single App:
# appsList = ['Blogs']
for app in appsList:
# For testing: set app to example applicatio
setSecurityRoles(convertFile2Dict(app),app)
print "Restore of Security Roles finished!"
connwasadmin='wasadmin'
connadmin='Admin1|Admin2'
connmoderators='Moderator1|Moderator2'
connmetrics='Metrics1|Metrics2'
connmobile='Mobile1|Mobile2'
appName='Activities'
AdminApp.edit(appName, '[-MapRolesToUsers [["person" No Yes "" ""] ["everyone" Yes No "" ""] ["reader" Yes No "" ""] ["metrics-reader" No Yes "" ""] ["search-admin" No No "'+connwasadmin+'|'+connadmin+'" ""] ["widget-admin" No No "'+connwasadmin+'|'+connadmin+'" ""] ["admin" No No "'+connwasadmin+'|'+connadmin+'" ""] ["bss-provisioning-admin" No No "" ""] ]]')
print "Setting Roles and Users for Activities"
AdminConfig.save()
db2 list database directory | grep alias | awk '{print $4}' | sortdb2cmd -i -c -w "db2 list database directory | where {$_ -match "alias"}\
| %{ $_.Split('=')[1]; }"
db2 list active databases
#!/bin/bash
databases=$(db2 list database directory | grep alias | awk '{print $4}' | sort)
for database in ${databases[@]}
do
echo $database
db2 "connect to $database"
db2 -tvf automaint.sql
db2 "connect reset"
done
if [ -z "$1" ]; then
echo "USAGE: `basename $0` mailaddress"
exit ;
fi
MAIL=$1
db2 -x "connect to peopledb" | grep alias | awk '{print $5}'
db2 -x "SELECT PROF_GUID, PROF_MAIL FROM EMPINST.EMPLOYEE WHERE PROF_MAIL_LOWER = '${MAIL,,}'"
db2 -x "connect reset" > /dev/null
while true; do
printf "Which email address should be used for Lookup?\n"
read MAIL
break
done
db2 -x "connect to OPNACT"| grep alias | awk '{print $5}'
db2 -x "select EXID from activities.oa_memberprofile where email = '$MAIL'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to BLOGS"| grep alias | awk '{print $5}'
db2 -x "select EXTID from blogs.rolleruser where EMAILADDRESS = '$MAIL'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to SNCOMM"| grep alias | awk '{print $5}'
db2 -x "select DIRECTORY_UUID from SNCOMM.MEMBERPROFILE where email = '${MAIL,,}'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to dogear"| grep alias | awk '{print $5}'
db2 -x "select MEMBER_ID from DOGEAR.PERSON where email = '${MAIL,,}'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to files"| grep alias | awk '{print $5}'
db2 -x "select DIRECTORY_ID from FILES.USER where email = '$MAIL'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to forum" | grep alias | awk '{print $5}'
db2 -x "select EXID from FORUM.DF_MEMBERPROFILE where email = '$MAIL'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to Homepage"| grep alias | awk '{print $5}'
db2 -x "select EXID from HOMEPAGE.PERSON where USER_MAIL = '$MAIL'"
db2 -x "connect reset" > /dev/null
db2 -x "connect to wikis"| grep alias | awk '{print $5}'
db2 -x "select DIRECTORY_ID from WIKIS.USER where email = '$MAIL'" | grep "-"
db2 -x "connect reset" > /dev/null
TMP1=`mktemp -d`
trap "rm -rf $TMP1" EXIT
while getopts h:p:f:?: option
do
case "${option}"
in
h) SERVERNAME=${OPTARG};;
p) SERVERPORT=${OPTARG};;
f) STORECACERTS=${OPTARG};;
?) echo "USAGE: `basename $0` -h hostname -p port -f Certfile\n"
echo "You have to type a password for keyfile twice and set\n"
echo "the key to trusted!"
exit
;;
esac
done
if [ -z "$SERVERNAME" ] | [ -z "$SERVERPORT" ] | [ -z "$STORECACERTS" ] ; then
echo "USAGE: `basename $0` -h hostname -p port -f Certfile"
echo "You have to type a password for keyfile twice and set\n"
echo "the key to trusted!"
exit
fi
openssl s_client -showcerts -connect $SERVERNAME:$SERVERPORT < /dev/null > $TMP1/cst-key.out
openssl x509 -outform DER < $TMP1/cst-key.out > $TMP1/cst-key.der
openssl x509 -inform der -in $TMP1/cst-key.der -out $TMP1/cst-key.pem
keytool -import -alias Selfsigned -keystore $STORECACERTS -file $TMP1/cst-key.pem