enterprise manager: write powerful scripts with emcli

46
ENTERPRISE MANAGER: WRITE POWERFUL SCRIPTS WITH EMCLI GOKHAN ATIL

Upload: gokhan-atil

Post on 16-Apr-2017

2.659 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Enterprise Manager: Write powerful scripts with EMCLI

ENTERPRISE MANAGER: WRITE POWERFUL SCRIPTS WITH EMCLI

GOKHAN ATIL

Page 2: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION

GOKHAN ATIL

▸ DBA Team Lead with 15+ years of experience

▸ Oracle ACE (since 2011)

▸ 10g/11g and R12 OCP

▸ Founding Member and Vice President of TROUG

▸ Co-author of Expert Oracle Enterprise Manager 12c

▸ Blogger (since 2008) gokhanatil.com

▸ Twitter: @gokhanatil

2

Page 3: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION

AGENDA

▸ Introduction to EM CLI

▸ EM CLI Verbs

▸ Sample Verbs

▸ Fundamentals of Python

▸ EM CLI and Python

▸ Sample Scripts

▸ Summary

3

Page 4: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

4

Page 5: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

WHAT IS EM CLI?

EMCLI is an alternative for the web interface. It enables you to access OEM functionality from a text-based console.

Repository

EM CLI

Agent

OMS

Web Console

5

Page 6: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

ALREADY INSTALLED

EM CLI is already installed and configured on OMS server:

cd $MIDDLEWARE_HOME/bin

./emcli (or emcli.bat on Windows servers)

6

Page 7: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

YOU CAN INSTALL EM CLI TO YOUR PC

▸ Requires Java version 1.7.0_80 or greater

▸ Supported Operating Systems: Windows, Linux, Solaris, HPUX, Tru64, AIX

▸ Go to “command line interface” page under “setup” page to download the installation JAR file.

▸ Login is not required to download, so it’s possible to download the JAR file with “wget”.

To run EM CLI on Java 1.8 or higher, you need apply patch 17555224 to the weblogic server. Use"-no-check-certificate" parameter with wget.

7

Page 8: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

EM CLI DOWNLOAD PAGE

8

Page 9: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

EM CLI STANDARD KIT VS ADVANCED KIT

There are two different installation kits for EM CLI:

▸ EM CLI Standard Kit: This kit supports only the Standard (command line) mode.

▸ EM CLI with Scripting mode (option): This “advanced” kit supports Interactive and Script modes in addition to standard mode.

9

Page 10: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

3 MODES OF EM CLI:

▸ Standard mode: This mode provides a simple command-line interface to Enterprise Manager, and supports the execution of one verb at a time from the command line.

emcli get_targets

▸ Interactive mode: This mode enables you to create a single interactive session with OMS. It is a Jython shell.

emcli

▸ Scripting mode: In Scripting mode, EM CLI runs Jython scripts containing EM CLI verbs.

emcli @scriptname.py

10

Page 11: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

SOMEONE SAID JYTHON?

Jython is an implementation of the Python programming language designed to run on the Java platform.

11

Page 12: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

SO WHAT’S PYTHON?

▸ Widely used general-purpose, high-level programming language

▸ Supports multiple programming paradigms, including OOP, imperative and functional programming

▸ Dynamic type system and automatic memory management

▸ Batteries Included (!)

12

Page 13: Enterprise Manager: Write powerful scripts with EMCLI

INTRODUCTION TO EM CLI

INSTALL AND CONFIGURE:

▸ After you download, set JAVA_HOME and install the JAR file:

java -jar emcliadvancedkit.jar -install_dir=<home>

▸ Configure EM CLI:

emcli help setup

emcli setup -url="https://host:port/em" -username=<emuser> -dir=<instancedir> -trustall

13

Page 14: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI VERBS

14

Page 15: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI VERBS

400+ VERBS IN 75+ CATEGORIES

▸ Add Host Verbs

▸ Agent Administration Verbs

▸ Agent Upgrade Verbs

▸ BI Publisher Reports Verbs

▸ Blackout Verbs

▸ Credential Verbs

▸ Incident Rules Verbs

▸ Job Verbs

▸ Metric Extension Verbs

▸ Monitoring Templates Verbs

▸ Oracle Cloud Verbs

▸ Provisioning Verbs

▸ Self Update Verbs

▸ User Administration Verbs

15

Page 16: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI VERBS

GET QUICK HELP

You can get the list of available verbs using “help”:

emcli help

emcli help get_targets

16

Page 17: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI VERBS

EM CLI VERBS IN STANDARD MODE

In standard mode, EM CLI expect you enter a verb as the first parameter. Verbs may take zero or more arguments as input.

emcli verb -1st_argument="value" [ -2nd_ argument="value" ] [ -3rd_ argument="value" ] [ -4th_ argument ]…

17

Page 18: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI VERBS

EM CLI VERBS IN SCRIPTING MODE

▸ Verbs are defined as Python functions

▸ Arguments are entered as function parameters

verb( argument_name="value", 2nd_ argument="value")

▸ Results of verbs are formatted as JSON

18

Page 19: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

LOGIN

Login verb is used to log into Enterprise Manager with the given credentials.

login( username="SYSMAN", password="123456", force=true)

login( username="SYSMAN", password="123456" )

login( username=“SYSMAN" )

The EM CLI client should be logged in to OMS before other EM CLI verbs are executed.

19

Page 20: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

GET_TARGETS

get_targets verb lists the targets (their names and their types) which are discovered or monitored by Enterprise Manager.

get_targets()

get_targets( targets="targetname:targettype" )

get_targets( targets="targetname:%" )

get_targets( targets="targettype" )

get_targets( "unmanaged", targets="targettype" )

Target names, target types and even “verbs” are case sensitive, so be sure that you use the exact name of a target and target type!

20

Page 21: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

ADD_TARGET

add_target verb adds a target to Enterprise Manager.

add_target( name="TESTDB", type="oracle_database", host="testdb.gokhanatil.com", credentials="...", properties="..." )

You must specify any required properties of a target type when adding a new target of this type

21

Page 22: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

CLEAR_STATELESS_ALERTS

clear_stateless_alerts verb clears the stateless alerts associated with the specified target. Stateless alerts are not cleared automatically by the Enterprise Manager.

clear_stateless_alerts( target_name="TESTDB", target_type="oracle_database", metric_internal_name="...", older_than="0" )

To find the metric internal name associated with a stateless alert, use the get_metrics_for_stateless_alerts verb.

22

Page 23: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

UPDATE_DB_PASSWORD

update_db_password verb updates the target database password stored in the Enterprise Manager Credential sub-system and can change the password on the target database as well.

update_db_password (target_name="TESTDB", user_name="DBSNMP", target_type="oracle_database", change_at_target="yes", old_password="oldone", new_password="newone", retype_new_password="newone" )

23

Page 24: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

LIST

▸ Although there are more than 85+ verbs to help you fetch a specific information from OMS such as list of targets, list of jobs etc, you may still need a more powerful verb which can fetch information from the repository database.

▸ This command will show all resources that you can query:

emcli list -help

24

Page 25: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

LIST

▸ The following command will list the users defined in EM:

emcli list -resource="Administrators"

▸ This command shows the columns of the specified resource:

emcli list -resource="Administrators" -help

25

Page 26: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

LIST

▸ This command will list the EM users and their last logins:

emcli list -resource="Administrators" -columns="USER_NAME,LAST_AUTHENTICATED_TS"

▸ The following command will list the EM users which are logged in at least one time:

emcli list -resource="Administrators" -columns="USER_NAME,LAST_AUTHENTICATED_TS" -search=“LAST_AUTHENTICATED_TS IS NOT NULL"

26

Page 27: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE VERBS

LIST

Latest version of the “list” verb can query 30+ resources. If you can not find the data you need among these resources, you can even run SQL on repository database using list verb:

emcli list -sql="<query>"

You need ACCESS_EMCLI_SQL_LIST_VERB privilege to be able to run query using “the list verb”.

27

Page 28: Enterprise Manager: Write powerful scripts with EMCLI

FUNDAMENTALS OF PYTHON

28

Page 29: Enterprise Manager: Write powerful scripts with EMCLI

FUNDAMENTALS OF PYTHON

VARIABLES

Python supports dynamic type variables. You don’t need to declare a variable but you need to initialise it before you use:

▸ myvar = "TESTDB"

▸ myvar = myvar + ":oracle_database"

▸ myvar = 10

▸ myvar = myvar + 10

▸ myvar = 10 + "10"

TYPE ERROR: UNSUPPORTED OPERAND TYPE(S) FOR +: 'INT' AND 'STR'

29

Page 30: Enterprise Manager: Write powerful scripts with EMCLI

FUNDAMENTALS OF PYTHON

CONVERSIONS

You can convert numbers to string using “str” function, and string variables to numbers using “int” function:

‣ myvar = int("2")

‣ myvar = int("5") + 10

‣ myvar = str(2)

‣ myvar = str(2) + "nd century"

30

Page 31: Enterprise Manager: Write powerful scripts with EMCLI

FUNDAMENTALS OF PYTHON

CONDITIONAL STATEMENTS AND CODE BLOCKS

The indented block of code is executed if the condition is true. You should use indents to create code blocks.

myvar = int("2")myvar = myvar + 10myvar = "2"

if ( myvar >= 10 ): print "myvar is " + str(myvar)else: print "lower than 10" CODE BLOCKS ARE IDENTIFIED

BY “INDENTATION”

THE COLON (:) SIGN

31

Page 32: Enterprise Manager: Write powerful scripts with EMCLI

FUNDAMENTALS OF PYTHON

DICTIONARY AND LIST OBJECTS

Dictionary objects, list objects and iterations:

mydict = { 'Name':'Gokhan', 'Age':40 }mydict['Name'] = "Gokhan"

mylist = ["Joe","William","Jack","Averell"] mylist[0] = "Joe"

for i in mylist: print i

SIMILAR TOJSON. KEY=VALUE

IT WILL PRINT ALL ELEMENTS IN “MYLIST”

ARRAY. USE INDEX TO REACH VALUE

32

Page 33: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

33

Page 34: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

EM CLI RESPONSE OBJECT

emcli.response represents the response object which returned from invocation of a emcli verb from python script.

emcli.response.Response

error() error textexit_code() error code (0=success)isJson() is JSON? true/falseout() JSON or text

34

Page 35: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

EM CLI RESPONSE OBJECT

In scripting mode, default output format type is JSON. In interactive mode, to change the output format to JSON, you need to run the following command:

set_client_property('EMCLI_OUTPUT_TYPE', 'JSON')

It’s recommended to use JSON format because it directly matches with Python “dictionary” object. There’s no need for extra effort to parse the output.

35

Page 36: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

EM CLI RESPONSE OBJECT

Let’s get the response from a verb:

mytargets = get_targets( target="oracle_database" )

type(mytargets.out()) <type 'dict'>

mytargets.out()

{'data': [{'Status': 'Up', 'Warning': '6', 'Status ID': '0', 'Target Type': 'oracle_database', 'Critical': '64', 'Target Name': 'TESTDB'}, {…}, {…}, {…}] }

36

Page 37: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

EM CLI RESPONSE OBJECT

A response always contain a “data” item which is a list object:

type(mytargets.out()['data']) <type ‘list'>

mytargets.out()['data']

[ {'Status': 'Up', 'Warning': '6', 'Status ID': '0', 'Target Type': 'oracle_database', 'Critical': '64', 'Target Name': 'TESTDB'},{…}, {…}, {…} ]

type(mytargets.out()['data'][0]) <type 'dict'>

37

Page 38: Enterprise Manager: Write powerful scripts with EMCLI

EM CLI AND PYTHON

EM CLI RESPONSE OBJECT

We can iterate over the items of the list:

for DB in mytargets.out()['data']: print DB['Target Name'], DB['Status']

DICT / JSON

LIST (DATA)

DICT

DICT

DICT

DICT

DICT

38

Page 39: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE SCRIPTS

39

Page 40: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE SCRIPTS

CLEAR STATELESS ALERTS

Save the following code in a file (clearalerts.py) and run it as “emcli @clearalerts.py”:

if login( username="GOKHAN" ).exit_code()==0:

mytargets=get_targets( targets="oracle_database" )

for DB in mytargets.out()['data']: clear_stateless_alerts( target_name=DB['Target Name'], target_type=DB['Target Type'], older_than="0" )

40

Page 41: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE SCRIPTS

CHANGE DBSNMP PASSWORDS

if len(sys.argv) <> 2: print "Usage: emcli @change_dbsnmp_passwords.py oldpwd newpwd" exit()if login( username="GOKHAN" ).exit_code()==0: mytargets=get_targets( targets="%_database" ) for DB in mytargets.out()['data']: try: update_db_password (target_name=DB['Target Name'], target_type=DB['Target Type'] , change_at_target="yes",user_name="dbsnmp", old_password=sys.argv[0], new_password=sys.argv[1], retype_new_password=sys.argv[1]) except emcli.exception.VerbExecutionError, e: print e.error()

41

Page 42: Enterprise Manager: Write powerful scripts with EMCLI

SAMPLE SCRIPTS

PROMOTE UNMANAGED DATABASES

lg = login( username="SYSMAN" )

if lg.exit_code() <> 0: print lg.error() exit()

utargets=get_targets( "unmanaged", properties=True, targets="oracle_database" )

for target in utargets.out()['data']: add_target( name=target['Target Name'], type=target['Target Type'], host=target['Host Info'].split(';')[0].split(':')[1], credentials="UserName:dbsnmp;password:xyz;Role:Normal", properties=target['Properties'] )

POSITIONAL PARAMETERS

42

Page 43: Enterprise Manager: Write powerful scripts with EMCLI

SUMMARY

43

Page 44: Enterprise Manager: Write powerful scripts with EMCLI

SUMMARY

WHY NOT BASH SCRIPTING WITH EM CLI STANDARD KIT?

▸ BASH scripting supports environment variables, if conditions, loops

▸ Linux tools (grep, awk etc…) to parse output of EM CLI

▸ Python is cross-platform

▸ Python scripts are easy to be read and maintain

▸ Python scripts perform better

44

Page 45: Enterprise Manager: Write powerful scripts with EMCLI

SUMMARY

FURTHER READING

▸ OEM 12c Command-Line Interface

▸ My blog:http://www.gokhanatil.com

▸ Kellyn Pot'Vin-Gormanhttp://dbakevlar.com

▸ Ray Smith https://oramanageability.wordpress.com

▸ Seth Miller http://sethmiller.org

▸ The Definitive Guide to Jythonhttp://www.jython.org/jythonbook/en/1.0/

45

Page 46: Enterprise Manager: Write powerful scripts with EMCLI

THANK YOU FOR ATTENDING! ANY QUESTIONS?

46