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=" + pv
Example 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.'