37
Deep Dive into CIM Client Development with SBLIM Brian Mason Erik Johannes ABPU - App Aware Net App 1

Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

Embed Size (px)

Citation preview

Page 1: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Deep Dive into CIM Client Development

with SBLIM

Brian MasonErik Johannes

ABPU - App AwareNet App

1

Page 2: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

2

Page 3: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Who am I ?

Brian Mason [email protected] I work for NetApp App Aware Group / APBU E-Series StorageWhat happen to LSI?

20+ Years in Software Development Last 10 focusing on Managing hardware devices MSCS U of IL

3

Page 4: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Disclaimers

Used CIM for vCenter Plugin Code samples pulled from real project Code run against LSI Eagle 2 Provider on Open

Pegasus However –Code Samples heavily tweaked for Power PointPresentation code may have syntax errors

4

Page 5: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

What is SBLIM

From their Web Site“SBLIM (pronounced "sublime") is an umbrella project for a

collection of systems management tools to enable WBEMon Linux.”

This talk focuses on the Java WBEM Client Is it just for Linux?No. We are talking Java so it works everywhereOur product runs on Windows

5

Page 6: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Why use a client package? Isn't CIM XML designed so we can just code it by hand?

SBLIM handles XML marshalling /de-marshalling

Handles HTTP(s) Details

Relieves the programmer of a lot of Error Prone Grunt programming

Tested by lots of folks6

Page 7: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Which Library Stream to use

There are two active streams 1.x and 2.x They are NOT source code compatible 2.x stream is JSR 48 compliant Use 2.x for all new work Version 2.1 requires Java 5 Generics

7

Page 8: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

8

Page 9: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Classes, Associations and attributes O My

9

ss

Foo

Bar

Frank

Alice

Association A

Association B

AssociationAttribute

Page 10: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Query Capabilities

Class OperationsEnumerate Names and DefinitionsCreate, Modify and Delete ClassesEnumerate Association Classes

Instance OperationsCreate, Modify and Delete instancesQuery Instance Names, Paths and properties Invoke Methods

10

Page 11: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Primary Classes

Primary Classes follow CIM AbstractionCIMObjectPathCIMClassCIMInstanceCIMPropertyCIMArugment

Properties are Key/Value Pairs

11

Page 12: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Let jump into some code – Enumerating Object Instances

1. WBEMClient client=getClient();2. String cls=“CIM_ComputerSystem”;3. String ns=“root/LsiArray13”;4. CIMObjectPath path;5. path = new CIMObjectPath(cls,ns);6. CloseableIterator<CIMInstance> it;7. it=client.enumerateInstances(path, true,

true, true, null);8. while (it.hasNext()){9. //do stuff10.}

12

Page 13: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Working with an iterator

1. while (it.hasNext()){2. final CIMInstance inst=

it.next(); 3. CIMProperty<?> prop;4. prop=inst.getProperty("name");5. String name;6. name=prop.getValue().toString();7. System.out.printn(name);8. }9. it.close();

13

Page 14: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

CIMProperty

Properties have:A NameA TypeA Value

Values are Objects.

14

Page 15: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

CIM Data Type

15

CIM Data Type Java Representationuint8 UnsignedInteger8

sint8 Byte

uint16 UnsignedInteger16

sint16 Short

uint32 UnsignedInteger32

sint32 Integer

int64 UnsignedInteger64

sint64 Long

string String

boolean Boolean

real32 Float

real64 Double

datetime CIMDataTimeAbsoluteCIMDataTimeInterval

<classname> ref CIMObjectPath

char16 Character

Page 16: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Making a WBEM Client

Make an CIMObjectPath instance with:Protocol - http(s)HostPort

Make a Subject instances with:User IdPassword

Get an instance WBEMClientFactory Initialize the instance with Path, Subject and locale

16

Page 17: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Making a client - Code

1. WBEMClient client = WBEMClientFactory.getClient(WBEMClientConstants.

PR OTOCOL_CIMXML);

2. final CIMObjectPath path = new 3. CIMObjectPath(“host”,”http”, 5988,null,null,null);4. final Subject subject = new Subject();5. subject.getPrincipals().add(new

UserPrincipal(“user”));6. subject.getPrivateCredentials().add(

new PasswordCredential(“passwd”));7. client.initialize(path, subject, new Locale[]{“US”

Locale.US});

17

Page 18: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

WQL For Query

Provides a SQL Like Syntax Allows for Filtering on CIM Server Maybe more natural for some developers Need to make sure its supported by CIM Server Supported in SBLIM via execQuery

18

Page 19: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

WQL Example 1

1. String sql="select * from CIM_ComputerSystem";2. CIMObjectPath rootPath = new CIMObjectPath("",

"root/LsiArray13");3. CloseableIterator<CIMInstance> it =

client.execQuery(rootPath, sql, "WQL");4. CIMProperty<?> nameProp;5. while (it.hasNext()){6. final CIMInstance inst = it.next();7. nameProp=inst.getProperty("name");8. System.out.println(nameProp.getValue());9. }10. it.close();

19

Page 20: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

WQL Example 2

1. String sql="select name,OperationalStatus from CIM_ComputerSystem where name=\"600A0B800029ECD6000000004D3E8BC8\"";

2. CIMObjectPath rootPath = new CIMObjectPath("", "root/LsiArray13");

3. CloseableIterator<CIMInstance> it = client.execQuery(rootPath, sql, "WQL");

4. while (it.hasNext()){5. final CIMInstance inst = it.next();6. final CIMProperty<?> nameProp

=inst.getProperty("name");7. System.out.println(nameProp.getValue().toString());8. }9. it.close();

20

Page 21: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Associations

Use SBLIM to follow assocations You can specify Starting Instance (As a Object Path)Association ClassTarget ClassRoleProperties of target to retrieve

Result is an Closeable Iterator of CIM Instances (Sound familiar ?)

21

Page 22: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Association Example (Storage System to Controllers)

final CIMObjectPath sysPath = systemInst.getObjectPath();

CloseableIterator<CIMInstance> it;it=client.associatorInstances(

sysPath,“CIM_ComponentCS","LSISSI_StorageProcessorSystem","GroupComponent",null, true, null);

22

Page 23: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

23

Page 24: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Function Calling

Intrinsic are built inNew, delete, modify, query

Extrinsic / User Defined take more workMust declare In and Out parametersNeed Object Path to call methodHandle Return Codes

Lets look at an example ….

24

Page 25: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Function Example (Delete Volume)

1. CIMArgument[] in = new CIMArgument[1];2. CIMArgument[] out = new CIMArgument[1];3. UnsignedInteger32 rc = null;4. CIMDataType type=new

CIMDataType(CIMDataType.REFERENCE,1);5. in[0]=new CIMArgument(“TheElement”,type,path);6. CIMInstance scs =

getConfigurationService(sysPath);7. CIMObjectPath servicePath= scs.getObjectPath();8. rc = (UnsignedInteger32)

getClient().invokeMethod(servicePath,”ReturnToStoragePool”,in,out);

25

Page 26: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

26

Page 27: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Performance Tuning In General

The key is Reduce Network Traffic Not an absoluteCIM Providers have their quirks Sometimes client side processing is fasterAssociation Processing on client maybe better

Need to profile your hotspots Primary focus is optimizing client response, but a

secondary goal may be reducing server workload

27

Page 28: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Reduce Network Traffic

Reduce Round Trips Grab what you need in one call If looping instances and following associations grab the

associations once CIM XML is VERBOSE

Reduce Instances ReturnedQuery on Concrete Classes Specify Concrete Classes on Associations

Reduce PropertiesNULL for props gets them all Specify only the properties you need

28

Page 29: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Limit Instances Example

String cls="CIM_ComputerSystem";String cls="LSISSI_StorageSystem";String ns="root/LsiArray13";CIMObjectPath path;path = new CIMObjectPath(cls,ns);String [] props=new String[]{"name"};client.enumerateInstances(path, true, true, true,props);

29

ss

Page 30: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Limit Properties Example

client.enumerateInstances(path, true, true, true, null);

Instead limit properties

String [] props=new String[]{"name"};it=client.enumerateInstances(path, true, true, true,props);

30

Page 31: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

How big is a blank property?

<PROPERTY NAME=“PropName”><VALUE></VALUE></PROPERTY>

That’s 52 characters for a blank This adds up

31

Page 32: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Querying Volume Name

0

5000

10000

15000

20000

25000

30000

Time (ms)

Time (ms)

239Volumes Client and CIM Server

on same LAN All Properties – 24,085

ms Name Only 1,695ms

32

Page 33: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

33

Page 34: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

.NET Solutions

On Windows .NET might be required No good WBEM Client for .NET that we found IKVM to the RescueConverts Java Byte Code to CLRProvides assemblies for standard runtime classes

Can pre-convert or run interpreted .NET code looks just like the Java Code Disclaimer: We have not shipped a .net solution using

IKVM. Lab only

34

Page 35: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

Agenda

What is SBLIM Querying Models with SBLIM Making Function Calls Performance Tuning .NET Solution Q&A

35

Page 36: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.

URLs

SBLIM Home Pagehttp://sourceforge.net/apps/mediawiki/sblim/index.php?t

itle=Main_Page Java Client Pagehttp://sourceforge.net/apps/mediawiki/sblim/index.php?t

itle=CimClient IKVMhttp://www.ikvm.net/ JSR-48http://www.jcp.org/en/jsr/detail?id=48

36

Page 37: Deep Dive into CIM Client Development with SBLIM - … Dive into CIM Client Development with SBLIM Brian Mason ... Used CIM for vCenter Plugin ... Presentation code may have syntax

2011 Storage Developer Conference. © NetApp. All Rights Reserved.37