A Sample Scripts
This appendix provides the sample scripts that were discussed in Using EM CLI in a format that you can use to copy the desired lines into your Jython code.
Sample Scripts
Example A-1 Script That Retrieves All Targets and Prints Their Names
#emcli_get_targets.py
#Import all emcli verbs to current program
from emcli import *
def print_target_details(target):
'''
print the target name and target type given a target tuple.
'''
print target['Target Name'] + ' ' + target['Target Type']
#Set the OMS URL to connect to
set_client_property('EMCLI_OMS_URL','https://host1.example.com:1234/em')
#Accept all the certificates
set_client_property('EMCLI_TRUSTALL','true')
#Login to the OMS
login(username='adminuser')
#Invoke get_targets and loop over the targets array
targets_array = get_targets().out()['data']
for target in targets_array:
#Call print_target_details function to print the target details
print_target_details(target)Example A-2 Script that Incorporates Functions in the get_targets Verb
#emcli_introspect_response.py
#Import all emcli verbs to current program
from emcli import *
#Set the OMS URL to connect to
set_client_property('EMCLI_OMS_URL','https://host1.example.com:1234/em')
#Accept all the certificates
set_client_property('EMCLI_TRUSTALL','true')
#Login to the OMS
login(username='sysman')
res = get_targets()
print 'Number of targets:'+str(len(res.out()['data']))
print 'Errors :'+res.error()
print 'Exit code :'+str(res.exit_code())
print 'IsJson :'+str(res.isJson())Example A-3 Script that Incorporates Custom SQL with the list() Function
#emcli_json_processing.py
#Import all EM CLI verbs to current program
from emcli import *
def format(str):
'''
Given a string argument returns it back or returns
a blank string if it is of None type
'''
if str is None:
return ""
return str
def get_targets_with_props(p_prop_name, p_prop_val):
'''
Returns targets with given property name and its value. Uses list verb.
'''
l_sql = "select target_name, target_type, property_value " \
"from mgmt$target_properties " \
"where property_name = '" + p_prop_name + "' " + " " \
"and property_value like '" + p_prop_val + "'"
obj = list(sql=l_sql)
return obj
#Set the OMS URL to connect to
set_client_property('EMCLI_OMS_URL','https://host1.example.com:1234/em')
#Accept all the certificates
set_client_property('EMCLI_TRUSTALL','true')
#Log in to the OMS
login(username='sysman')
#Find all the targets that have Version property set to release 12
l_targets = get_targets_with_props('Version', '12%')
for target in l_targets.out()['data']:
tn = target['TARGET_NAME']
tt = target['TARGET_TYPE']
pv = target['PROPERTY_VALUE']
print "Name "+tn + " Type =" + tt + " value=" + pvExample A-4 Script that Incorporates Exception Handling
#emcli_error_exception_handling.py
#import all emcli verbs to current program
from emcli import *
#import the verbexecutionerror
from emcli.exception import VerbExecutionError
#Set the OMS URL to connect to
set_client_property('EMCLI_OMS_URL','https://host1.example.com:1234/em')
#Accept all the certificates
set_client_property('EMCLI_TRUSTALL','true')
#Login to the OMS
login(username='sysman')
#Create a group
res = create_group(name='Jan_Doe_Group')
print res.out()
#Try to create the same group again
try:
#This will trigger an exception as the group exist already
create_group(name='Jan_Doe_Group')
except VerbExecutionError , e:
print e.error()
print 'Exit code:'+str(e.exit_code())Example A-5 LifeCyclePropertyChange.py
#Disclaimer
#EXCEPT WHERE EXPRESSLY PROVIDED OTHERWISE, THE SITE, AND ALL CONTENT PROVIDED ON
#OR THROUGH THE SITE, ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. ORACLE
#EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED,
#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
#FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT WITH RESPECT TO THE SITE AND ALL
#CONTENT PROVIDED ON OR THROUGH THE SITE. ORACLE MAKES NO WARRANTY THAT: (A) THE
#SITE OR CONTENT WILL MEET YOUR REQUIREMENTS; (B) THE SITE WILL BE AVAILABLE ON AN
#UNINTERRUPTED, TIMELY, SECURE,OR ERROR-FREE BASIS; (C) THE RESULTS THAT MAY BE
#OBTAINED FROM THE USE OF THE SITE OR ANY CONTENT PROVIDED ON OR THROUGH THE SITE
#WILL BE ACCURATE OR RELIABLE; OR (D) THE QUALITY OF ANY CONTENT PURCHASED OR
#OBTAINED BY YOU ON OR THROUGH THE SITE WILL MEET YOUR EXPECTATIONS.
#ANY CONTENT ACCESSED, DOWNLOADED OR OTHERWISE OBTAINED ON OR THROUGH THE USE OF
#THE SITE IS USED AT YOUR OWN DISCRETION AND RISK. ORACLE SHALL HAVE NO
#RESPONSIBILITY FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT
#RESULTS FROM THE DOWNLOAD OR USE OF CONTENT.
#ORACLE RESERVES THE RIGHT TO MAKE CHANGES OR UPDATES TO, AND MONITOR THE USE OF,
#THE SITE AND CONTENT PROVIDED ON OR THROUGH THE SITE AT ANY TIME WITHOUT NOTICE.
from emcli import *
search_list = ['PROPERTY_NAME=\'DBVersion\'','TARGET_TYPE= \'oracle_database\'','PROPERTY_VALUE LIKE \'11.2%\'']
if len(sys.argv) == 2:
print login(username=sys.argv[0])
l_prop_val_to_set = sys.argv[1]
l_targets = list(resource="TargetProperties", search=search_list, columns="TARGET_NAME,TARGET_TYPE,PROPERTY_NAME")
for target in l_targets.out()['data']:
t_pn = 'LifeCycle Status'
print "INFO: Setting Property name " + t_pn + " to value " + l_prop_val_to_set
print set_target_property_value(property_records=target['TARGET_NAME']+":"+target['TARGET_TYPE']+":"+t_pn+":"+l_prop_val_to_set)
else: ]
print "\n ERROR: Property value argument is missing"
print "\n INFO: Format to run this file is filename.py <username> <Database Target LifeCycle Status Property Value>"
Example A-6 dbPasswordChange.py
#Disclaimer
#EXCEPT WHERE EXPRESSLY PROVIDED OTHERWISE, THE SITE, AND ALL CONTENT PROVIDED ON
#OR THROUGH THE SITE, ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. ORACLE
#EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED,
#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
#FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT WITH RESPECT TO THE SITE AND ALL
#CONTENT PROVIDED ON OR THROUGH THE SITE. ORACLE MAKES NO WARRANTY THAT: (A) THE
#SITE OR CONTENT WILL MEET YOUR REQUIREMENTS; (B) THE SITE WILL BE AVAILABLE ON AN
#UNINTERRUPTED, TIMELY, SECURE,OR ERROR-FREE BASIS; (C) THE RESULTS THAT MAY BE
#OBTAINED FROM THE USE OF THE SITE OR ANY CONTENT PROVIDED ON OR THROUGH THE SITE
#WILL BE ACCURATE OR RELIABLE; OR (D) THE QUALITY OF ANY CONTENT PURCHASED OR
#OBTAINED BY YOU ON OR THROUGH THE SITE WILL MEET YOUR EXPECTATIONS.
#ANY CONTENT ACCESSED, DOWNLOADED OR OTHERWISE OBTAINED ON OR THROUGH THE USE OF
#THE SITE IS USED AT YOUR OWN DISCRETION AND RISK. ORACLE SHALL HAVE NO
#RESPONSIBILITY FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT
#RESULTS FROM THE DOWNLOAD OR USE OF CONTENT.
#ORACLE RESERVES THE RIGHT TO MAKE CHANGES OR UPDATES TO, AND MONITOR THE USE OF,
#THE SITE AND CONTENT PROVIDED ON OR THROUGH THE SITE AT ANY TIME WITHOUT NOTICE.
from emcli import *
from emcli.exception import VerbExecutionError
import sys
import time
def check_job_status(job):
count=0
while (count < 10):
count = count + 1
obj = emcli.get_jobs(job_id=job)
#print obj.out()
for entry in obj.out()['data']:
l_status = entry['Status ID']
l_exec_id = entry['Execution ID']
#print entry['Status ID']
if (l_status == '5'):
print "Job completed successfully"
count=100
elif (l_status == '4'):
l_resp = get_job_execution_detail(execution=l_exec_id, showOutput=True, xml=True)
print "Job failed, error details "
print "Output " + str(l_resp.out())
count=100
else:
time.sleep(2)
def update_db_pwd_for_target(p_target_name, p_target_type, p_old_password, p_new_password):
l_target_name = p_target_name
l_target_type = p_target_type
print "Changing the password for member : name = " + l_target_name + " type = " + l_target_type
try :
l_resp = update_db_password (target_name=l_target_name,
target_type = l_target_type,
change_at_target="yes",
user_name="dbsnmp",
old_password=p_old_password,
new_password=p_new_password,
retype_new_password=p_new_password)
l_job_submitted = l_resp.out()['JobId']
check_job_status(l_job_submitted)
except emcli.exception.VerbExecutionError, e:
print "ERROR : Change Password failed for name = " + l_target_name + " type = " + l_target_type
print "ERROR : " + e.error()
def update_db_pwd_for_group(p_group, p_old_password, p_new_password):
print "Changing the password for group - " + p_group + " from " + p_old_password + " to " + p_new_password
members = get_group_members(name=p_group).out()['data']
for member in members:
l_target_name = member['Target Name']
l_target_type = member['Target Type']
update_db_pwd_for_target(l_target_name, l_target_type, p_old_password, p_new_password)
#Set the OMS URL to connect to
set_client_property('EMCLI_OMS_URL','https://myoms.com/em')
#Accept all the certificates
set_client_property('EMCLI_TRUSTALL','true')
login(username=sys.argv[0])
l_grp_name = 'maurGroup'
l_group_members = ['db1:oracle_database','db2:oracle_database','db3:rac_database']
res = create_group(name = l_grp_name, add_targets = l_group_members)
print "Listing members for group " + l_grp_name
for member in get_group_members(name=l_grp_name).out()['data']:
print member
y_n_input = raw_input('Now lets change the password for all the members in this group(y/n)')
if y_n_input != 'y':
exit(0)
l_tgt_username = "dbsnmp"
l_old_password = "secret1"
l_new_password = "secret2"
update_db_pwd_for_group(l_grp_name, l_old_password, l_new_password)
Example A-7 promote_discovered_dbs.py
#Disclaimer
#EXCEPT WHERE EXPRESSLY PROVIDED OTHERWISE, THE SITE, AND ALL CONTENT PROVIDED ON
#OR THROUGH THE SITE, ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. ORACLE
#EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED,
#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
#FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT WITH RESPECT TO THE SITE AND ALL
#CONTENT PROVIDED ON OR THROUGH THE SITE. ORACLE MAKES NO WARRANTY THAT: (A) THE
#SITE OR CONTENT WILL MEET YOUR REQUIREMENTS; (B) THE SITE WILL BE AVAILABLE ON AN
#UNINTERRUPTED, TIMELY, SECURE,OR ERROR-FREE BASIS; (C) THE RESULTS THAT MAY BE
#OBTAINED FROM THE USE OF THE SITE OR ANY CONTENT PROVIDED ON OR THROUGH THE SITE
#WILL BE ACCURATE OR RELIABLE; OR (D) THE QUALITY OF ANY CONTENT PURCHASED OR
#OBTAINED BY YOU ON OR THROUGH THE SITE WILL MEET YOUR EXPECTATIONS.
#ANY CONTENT ACCESSED, DOWNLOADED OR OTHERWISE OBTAINED ON OR THROUGH THE USE OF
#THE SITE IS USED AT YOUR OWN DISCRETION AND RISK. ORACLE SHALL HAVE NO
#RESPONSIBILITY FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT
#RESULTS FROM THE DOWNLOAD OR USE OF CONTENT.
#ORACLE RESERVES THE RIGHT TO MAKE CHANGES OR UPDATES TO, AND MONITOR THE USE OF,
#THE SITE AND CONTENT PROVIDED ON OR THROUGH THE SITE AT ANY TIME WITHOUT NOTICE.
from emcli.exception import VerbExecutionError
import sys
alltargets=False
targetparms=0
uname=''
pword=''
url=''
monitor_pw=''
def helpUsage():
print 'Usage: promote_discovered_dbs.py [-help]'
print '[-all] Add all discovered Single Instance DBs'
print '[-targets <target1:target2:...] Add only targets listed'
sys.exit()
for i in range(len(sys.argv)):
if sys.argv[i] in ("-help"):
helpUsage()
elif sys.argv[i] in ("-targets"):
if i+1 < len(sys.argv):
targetparms = sys.argv[i+1]
else:
print 'Usage: promote_discovered_dbs.py [-help]'
print '[-all] Add all discovered Single Instance DBs'
print '[-targets <target1:target2:...] Add only targets listed'
sys.exit()
elif sys.argv[i] in ("-url"):
if i+1 < len(sys.argv):
url = sys.argv[i+1]
elif sys.argv[i] in ("-username"):
if i+1 < len(sys.argv):
uname = sys.argv[i+1]
elif sys.argv[i] in ("-password"):
if i+1 < len(sys.argv):
pword = sys.argv[i+1]
elif sys.argv[i] in ("-monitor_pw"):
if i+1 < len(sys.argv):
monitor_pw = sys.argv[i+1]
elif sys.argv[i] in ("-all"):
alltargets = True
# Make sure user did not specify target list and all targets.
if alltargets<>0 and targetparms <>0:
print 'Cannot specify target list and all switch'
print 'Usage: promote_discovered_dbs.py -url <EM URL> -username <username> -password <password> -monitor_pw <password>'
print '[-all] Add all discovered SI Databses'
print '[-targets <target1:target2:...] Add only list targets'
print '[-help]'
sys.exit()
if len(uname)==0 or len(pword)==0 or len(url)==0:
print 'Missing required arguments (-url, -username, -password)'
print 'Usage: promote_discovered_dbs.py -url <EM URL> -username <username> -password <password> -monitor_pw <password>'
print '[-all] Add all discovered SI Databses'
print '[-targets <target1:target2:...] Add only list targets'
print '[-help]'
sys.exit()
# Set Connection properties and logon
set_client_property('EMCLI_OMS_URL',url)
set_client_property('EMCLI_TRUSTALL','true')
login(username=uname,password=pword)
cred_str = "UserName:dbsnmp;password:" + monitor_pw + ";Role:Normal"
if targetparms <> 0:
targetparms = targetparms.replace(":",":oracle_database;")+":oracle_database"
target_array = get_targets(unmanaged=True,properties=True,targets=targetparms).out()['data']
elif alltargets:
target_array = get_targets(targets="oracle_database",unmanaged=True,properties=True ).out()['data']
else:
print 'Missing required arguments (-targets or -all)'
helpUsage()
if len(target_array) > 0:
for target in target_array:
print 'Adding target ' + target['Target Name'] + '...',
for host in str.split(target['Host Info'],";"):
if host.split(":")[0] == "host":]
print host.split(":")[1]
try:
res1 = add_target(type='oracle_database',name=target['Target Name'],host=host.split(":")[1], credentials=cred_str,properties=target['Properties'])
print 'Succeeded'
except VerbExecutionError, e:
print 'Failed'
print e.error()
print 'Exit code:'+str(e.exit_code())
else:
print 'INFO: There are no targets to be promoted. Please verify the targets in Enterprise Manager webpages.'