Redpaper Axel Buecker Eddie Hartman Eduardo Patrocinio Jan Erik Hoel Creating IDML Discovery Books with IBM Tivoli Directory Integrator Overview IBM® Tivoli® Application Dependency Discovery Manager (TADDM) is a powerful tool for discovering and classifying information about hardware and software assets, along with their relationships and dependencies. In spite of automatic discovery features, you may find yourself having to extract additional data from files, databases, and other sources, reformatting it and writing it out as Identity Markup Language (IDML)1 files that Tivoli Application Dependency Discovery Manager can import. IDML is the Extensible Markup Language (XML) dialect used to describe Configuration Items (CIs) and their relationships according to the Common Data Model (CDM)2. Processes that create these IDML import files are called Discovery Library Adapters (DLA) and the fastest way to create a DLA is by using IBM Tivoli Directory Integrator (TDI). IBM Tivoli Directory Integrator is an integration toolkit that lets you visually assemble data flow rules (called AssemblyLines) that control how data moves and is transformed between any number of systems, transports, and data stores. Each AssemblyLine can perform data filtering and re-formatting to fit output schemas. The purpose of this IBM Redpapers publication is to show you how to create an AssemblyLine that produces IDML import files for Tivoli Application Dependency Discovery Manager. Along the way you can gain some skills that help you meet other integration challenges as well. 1 2 To enable data import into IBM Tivoli Change and Configuration Management Database (CCMDB) from virtually any source, IBM developed the Identity Markup Language. The CDM is a hierarchy of classes that describe types of assets, their properties, and their relationships to one another. It is a data model shared by several IBM products, including Tivoli Application Dependency Discovery Manager. CDM is based on the unified modeling language (UML). For more information refer to the IBM Redpaper publication IBM Tivoli Common Data Model: Guide to Best Practices, REDP-4389. © Copyright IBM Corp. 2009. All rights reserved. ibm.com/redbooks 1 Prerequisites: What you already should know You will need an understanding of how information is organized in Tivoli Application Dependency Discovery Manager, for example, CIs and relationships, since you will be writing these objects out to your own IDML import files. If you are unsure which CDM CI types or relationships to use, here are some options: The Tivoli Application Dependency Discovery Manager development team has created a set of examples to illustrate how the IDML should look for several common types of Configuration Items, both hardware and software CIs. This document is available via the Tivoli Opal Web site at the following location: http://www.ibm.com/software/brandcatalog/portal/opal/details?catalog.label=1TW10CC22 See “Understanding IDML and the CDM” on page 29 for more information about how to leverage this document to make your own DLAs. You can also drop a question in the Tivoli Directory Integrator user forum: http://groups.google.com/group/ibm.software.network.directory-integrator Tivoli Directory Integrator users use the forum to exchange advice, lessons learned, and code for a wide variety of scenarios. Chances are that someone else has already done something similar to what you plan to do. Or you can search the Tivoli OPAL Web site for relevant solutions and documents: http://www.ibm.com/software/tivoli/opal In addition, you must download and install Tivoli Directory Integrator. Note that Tivoli Directory Integrator is very lightfooted, so the installation only takes a few minutes and you should simply accept the default installation settings. If you decide not to, then make a note of where the Tivoli Directory Integrator program files are kept, as well as which path you chose for your Solution Directory. The Solution Directory is where your project files are kept, and this area should be included in your backup routine. Be sure to keep your Tivoli Directory Integrator installation at the latest patch level. Updates, readme information, and download links can be found here: http://www.ibm.com/support/docview.wss?rs=697&context=SSCQGF&dc=DA400&uid=swg27010509&loc=en _US&cs=UTF-8&lang=en&rss=ct697tivoli Also, there is no need to worry about the Tivoli Directory Integrator installer adversely affecting your machine. It simply lays down files into a self-contained directory structure, including its own private Java™ environment. In fact, you can actually zip up a Tivoli Directory Integrator installation and unzip elsewhere to move it. Once Tivoli Directory Integrator is installed, spend at least an hour working through the IBM Tivoli Directory Integrator 6.1.1:Getting Started Guide, GI11-64803: http://publib.boulder.ibm.com/infocenter/tivihelp/v2r1/topic/com.ibm.IBMDI.doc_6.1.1/getting started.htm After completing the Getting Started exercises, spend another couple of hours on the first seven video tutorials found here: http://www.tdi-users.org/twiki/bin/view/Integrator/LearningTDI Once completed, these exercises should give you enough familiarity with the Tivoli Directory Integrator interface to enable you to follow the remainder of this guide. 3 2 Each Tivoli Directory Integrator manual is available as a PDF download to facilitate offline usage. Creating IDML Discovery Books with IBM Tivoli Directory Integrator Specifically, you will be familiar with Tivoli Directory Integrator concepts like AssemblyLines (abbreviated as AL here and in other Tivoli Directory Integrator literature), Attribute Maps, and AL components like Connectors, Functions, Parsers, and Loops. You also need a copy of the IDML and Tivoli Application Dependency Discovery Manager components for Tivoli Directory Integrator. Links to the necessary files are included in the following sections. Finally, in order to load and test your finished IDML Discover Book, you need access to a running Tivoli Application Dependency Discovery Manager server. Tivoli Directory Integrator interface setup If you want your Tivoli Directory Integrator screens to look just like those in this document (and avoid some less attractive side-effects of the default Java Swing settings) then execute the following steps in the Tivoli Directory Integrator Config Editor (Figure 1): 1. Select File → Edit Preferences. 2. In the Appearance → General tab: a. Change View Type to Tabbed from the drop-down list. b. Check the top two check boxes. 3. In the Appearance → Look & Feel tab change Look & Feel4 to Metal from the drop-down list. This is a cleaner and easier-to-navigate option. 4. In the misc settings tab set Execute Task Lines5 to 40000. This is a Java Swing buffer that should be bigger than just 400. Figure 1 Tivoli Directory Integrator interface setup 4 5 The Metal Look & Feel is a better implementation, at least under Windows®. This is a Java Swing buffer size that should be increased. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 3 Creating a DLA to load data into Tivoli Application Dependency Discovery Manager You mission is to load the data in Example 1 with computers (host names) and their associated operating systems into Tivoli Application Dependency Discovery Manager (Example 1). Example 1 Example data sets machine,op_sys troosevelt.my.com,Windows XP taft.my.com,Red Hat Linux wilson.my.com,Red Hat Linux harding.my.com,AIX coolidge.my.com,Windows XP hoover.my.com,AIX froosevelt.my.com,AIX truman.my.com,AIX eisenhower.my.com,AIX kennedy.my.com,AIX johnson.my.com,Windows XP nixon.my.com,Red Hat Linux ford.my.com,Windows XP carter.my.com,AIX reagan.my.com,Red Hat Linux bush.my.com,AIX clinton.my.com,AIX You will do this by creating a Tivoli Directory Integrator AssemblyLine (AL) to transform the above input information into an IDML file. Preparation To prepare for this exercise, you will need to do a couple of things: 1. Create a new folder in your Tivoli Directory Integrator Solution Directory named TADDM. Next prepare the input data file for the exercise by downloading the file in the link below to the new TADDM folder: http://dl.getdropbox.com/u/375185/TADDM_IDML/MachineAndOS.csv If for some reason you cannot reach the above link, simply create a text file and call it MachineAndOS.csv and then copy-paste in the example data shown above. 2. Install the IDML components, downloading the package (complete with installation instructions) from the Tivoli OPAL Web site here: http://www.ibm.com/software/brandcatalog/PA_1_30000H0028BPF02BJ9MORU0000/Download Redirector?u=null&i=1TW10CC16 Follow the steps listed in the release notes file to perform the installation. 4 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Note: Instead of copying .jar files into the <TDI-install-folder>/jar sub-folders as instructed in the release notes, we recommend that you create your own folder where you can keep these separated from the standard installed Tivoli Directory Integrator .jar files. However, this technique does not apply to files that must be copied to the <TDI-install-folder>/jvm area. To do this, create a directory called CustomJars under your Solution Directory and then add a sub-folder called TADDM_IDML, placing the IDML .jar files here (again, except for those that must go to the jvm/jre/lib/ext area). Now edit the solution.properties text file found in your Solution Directory and remove the number sign (#) that comments out the com.ibm.di.loader.userjars property. This property line should appear near the beginning of the file. Set this property to point to your CustomJars folder: com.ibm.di.loader.userjars=CustomJars Save the file and restart the Config Editor. Tivoli Directory Integrator is now able to find the IDML library files. Read the installation instructions thoroughly, since sometimes you also have to copy files to folders like <TDI InstallDir>/jvm/jre/lib/ext (like DB server license files) or include particular folders in the system path (for example, adding C:\Notes; to the SET PATH command at the top of ibmditk.bat when you are integrating to Domino® through your Local Notes client). Creating the DLA AssemblyLine Now we can begin to create our first AssemblyLine. 1. Once the components are in place, start the Tivoli Directory Integrator Config Editor and create a new Tivoli Directory Integrator project, also known as a Config, by clicking the Create new Config button (Figure 2). Figure 2 Create new Config Creating IDML Discovery Books with IBM Tivoli Directory Integrator 5 2. Call this project myDLA.xml (Figure 3). Note that you must type in the .xml extension yourself. Click OK to confirm. Figure 3 Name your Config You should now see the standard layout of a Tivoli Directory Integrator project, as displayed in the Config Browser tree-view in the left part of the panel. There is a Config node for controlling project-wide settings followed by one named AssemblyLines. This is where your DLA ALs will appear as you implement them. Below AssemblyLines are five more folders where the project library resources are kept, with one folder for each type of Tivoli Directory Integrator component: – – – – – Connectors Functions Parsers AttributeMaps Scripts There are four different Tivoli Directory Integrator IDML components, two Connectors, and two Function Components (FCs): IDMLConfigurationItem IDMLReln OpenIDML CloseIDML Connector used to create Configuration Items Connector used to add relationships between CIs FC used to open a new Discovery Book (IDML doc) FC for closing an open Discovery Book As you can see from the above list, the IDML FCs are for opening (creating) and closing IDML Discovery Books, while the Connectors are what you use to write information to an open Book. Your AL will be using all four of these components. 6 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 3. Right-click the AssemblyLines folder and select New AssemblyLine (Figure 4). Figure 4 New AssemblyLine 4. Name your new AssemblyLine MyFirstDLA and click OK (Figure 5). Figure 5 New AssemblyLine: Step 2 You now see an empty AssemblyLine details panel (Figure 6). Figure 6 New AssemblyLine: Step 3 The Feeds section is typically the data pump of an AssemblyLine, containing an Iterator mode Connector that reads in one entry at a time, driving data to the Flow section components for processing. In other words, the Feeds section serves as an implicit Creating IDML Discovery Books with IBM Tivoli Directory Integrator 7 for-each loop that cycles the Flow section component for each entry read. You will have seen this in the Getting Started and video tutorial exercises. However, before your AL can start reading in data and writing to your Discovery Book, it must first open it using the OpenIDML FC. Since there is no way to get the OpenIDML FC to do this before the looping behavior of the Feeds section kicks in, you will not be able to use this convenient feature. Instead, you must implement similar for-each logic inside the Flow section using a Tivoli Directory Integrator Loop component. Creating an IDML Discovery Book As noted above, the first thing your AL must do is create and open your Discovery Book. Do this by adding the OpenIDML FC to your AssemblyLine: 1. Right-click the Flow section folder and select Add Function Component. Choose the idml.OpenIDML Function component (at the bottom of the selection list) and call it OpenBook (Figure 7). Figure 7 Creating an IDML Discovery Book 8 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 2. Click OK to confirm this and you will be presented with the configuration panel for the OpenIDML Function component (Figure 8). Figure 8 Creating an IDML Discovery Book: Step 2 Note: If for some reason you do not get the above Config panel it means that you did not successfully install the required .jar files or that you did not restart the Tivoli Directory Integrator Config Editor after performing the installation. Make sure that you follow the ReleaseNotes.txt instructions precisely, and if the problem persists then contact the Tivoli Directory Integrator support team at 1-800-IBM-SERV. Table 1 is an overview of the OpenIDML FC parameters, along with the values, that you will use6. Table 1 OpenIDML FC parameter list Open IDML FC parameter Value Application Code This is the Application Code of the Management Software System (MSS), consisting of an acronym for the source application and its version number (for example, TDI6.1.1). For this example use the value App1.0. Refresh Select this check box if the IDML that you are creating represents new data or a full refresh, in which case Tivoli Application Dependency Discovery Manager will create new entries in its data store. If you leave this check box unchecked then you are telling Tivoli Application Dependency Discovery Manager to modify existing CIs and relationships using this IDMLa. You can leave this open for the exercise. 6 One of these parameters is shared between all IDML components: Book Name. Each pair of OpenIDML and CloseIDML FCs must refer to the same Book, just as the Connectors used to write to a particular Book must be configured with that Book’s name. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 9 Open IDML FC parameter Value Validate Selecting this check box invokes the IDML validation feature of this component. Leave this unchecked for the time being. Directory Name Here you enter the full path to the directory where you want your IDML Book file created. Enter a valid folder on your machine. For example, write your Book to C:\temp if this directory exists. Book Name The name that you give this Book and that all other components associated with the same IDML must share. Enter the value MyBook here. Manufacturer Name This parameter value is used in the creation of the Management Software System name and should reflect the source of the integration. Use IBM for this example exercise. Product Name This parameter value is used in the creation of the Management Software System name and should reflect the source of the integration. Use MyProduct for this example exercise. Hostname This parameter value is used in the creation of the Management Software System name and should reflect the source of the integration. Enter host.ibm.com for this example exercise. Detailed Log All Tivoli Directory Integrator components have this flag. Enabling it will result in verbose log output, facilitating troubleshooting, and providing vital information for Tivoli Directory Integrator support personnel. Leave this check box open. a. Note that if TADDM cannot find assets that match the incoming IDML, it will create new entries anyway, as long as adequate information is included in the IdML. 3. Before adding any more logic to this solution, test that your component is working by pressing the Run AL button located at the top right-hand corner of the AssemblyLine details panel (Figure 9). Figure 9 Test the AL This causes the Tivoli Directory Integrator Config Editor to launch a new server, connect through the API, and pipe across your Config. Furthermore, it instructs the Tivoli Directory 10 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Integrator Server to run your AssemblyLine and then captures log output for display on panel. Once your AssemblyLine has completed, the server shuts down. Your AL should produce output similar to that shown in Example 2. Example 2 AL test log output [4:35:26 AM EDT] CTGDIC126I Waiting for incoming connection to ServerSocket[addr=IBM-2AEEE2FCCF4/192.168.89.1,port=0,localport=2932]. Command Line Parameters: [javaw.exe, -classpath, C:\Program Files\IBM\TDI\V6.1.1_GA\IDILoader.jar, -Dlog4j.configuration=file:///C:\Program Files\IBM\TDI\V6.1.1_GA/etc/executetask.properties, -Dos.name=Windows XP, -Djava.library.path=C:\Program Files\IBM\TDI\V6.1.1_GA\jvm\jre\bin;.;C:\Program Files\IBM\TDI\V6.1.1_GA\jvm\jre\bin;C:\Program Files\IBM\TDI\V6.1.1_GA\libs;C:\Python24;C:\Program Files\Support Tools\;C:\Program Files\ThinkPad\Utilities;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\IBM\Infoprint Select;C:\Notes;C:\Program Files\XLView;C:\Utilities;C:\Program Files\IBM\Personal Communications\;C:\Program Files\IBM\Trace Facility\;C:\WINDOWS\Downloaded Program Files;C:\Program Files\ObjREXX;C:\Program Files\ObjREXX\OODIALOG; C:\Program Files\Stardock\Object Desktop\Object Edit;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\ThinkPad\ConnectUtilities;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\Common Files\Lenovo;C:\Program Files\WinSCP3\;C:\PROGRA~1\IBM\SQLLIB\BIN;C:\PROGRA~1\IBM\SQLLIB\FUNCTION;C:\PROGRA~1\IBM\SQLLIB\SAMPLES\RE PL;C:\Program Files\cvsnt;C:\Program Files\Rational\common;C:\IDWBWIN\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\IBM\CMVCDC50;C:\Program Files\GnuWin32\bin;C:\Program Files\IBM\CMVCDC50;C:\Program Files\Rational\Common, -jar, C:\Program Files\IBM\TDI\V6.1.1_GA\IDILoader.jar, com.ibm.di.server.RS, -BAssemblyLines/MyFirstDLA, -SC:\Documents and Settings\no010196\My Documents\TDI_pre7.0\myDLA.xml, -Ycom.ibm.di.config.xml.MetamergeConfigXML, -D, -R, -Q2932, -b192.168.89.1] 04:35:31 CTGDIS232I Server is running in standard mode. 04:35:32 CTGDIS236I The stash file has been successfully read. 04:35:32 CTGDIS237I The key password is not present in the stash file. The keystore password will be used. 04:35:32 CTGDIS238I Server security has been successfully initialized. 04:35:33 CTGDKD445I Custom method invocation is set to false. 04:35:33 CTGDKD460I Generated configuration id 'C__Documents and Settings_no010196_My Documents_TDI_pre7.0_myDLA.xml' for a configuration instance loaded from file 'C:\Documents and Settings\no010196\My Documents\TDI_pre7.0\myDLA.xml'. 04:35:33 CTGDIS229I Register server: C:\Documents and Settings\no010196\My Documents\TDI_pre7.0\myDLA.xml. 04:35:33 Version : 6.1.1 - 2008-05-15 04:35:33 OS Name : Windows XP 04:35:33 Java Runtime : IBM Corporation, 2.3 04:35:33 Java Library : C:\Program Files\IBM\TDI\V6.1.1_GA\jvm\jre\bin 04:35:33 Java Extensions : C:\Program Files\IBM\TDI\V6.1.1_GA\jvm\jre\lib\ext 04:35:33 Working directory : C:\Documents and Settings\no010196\My Documents\TDI_pre7.0 04:35:33 Configuration File: <stdin> 04:35:33 CTGDIS785I --04:35:33 CTGDIS040I Loading configuration from stdin. 04:35:33 CTGDIS029I Starting AssemblyLine AssemblyLines/MyFirstDLA for debug. CTGDIS589I Connect to 192.168.89.1: 2932 [4:35:33 AM EDT] CTGDIC127I Connection from Socket[addr=/192.168.89.1,port=2937,localport=2932]. [4:35:33 AM EDT] Remote Task Name: Thread-4 04:35:33 CTGDIS034I Wait for completion of AssemblyLine: AssemblyLines/MyFirstDLA. 04:35:33 CTGDIS255I AssemblyLine AssemblyLines/MyFirstDLA is started. 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option appCode = App1.0 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option dirName = C:\temp 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option bookName = MyBook 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option manufacturerName = IBM 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option productName = MyProduct 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option hostName = host.ibm.com 04:35:33 [OpenBook] Initalizing the Open IDML Function Component option validate = false Creating IDML Discovery Books with IBM Tivoli Directory Integrator 11 04:35:34 [OpenBook] Initializing Open IDML Function Component parameters done. 04:35:34 CTGDIS087I Iterating. 04:35:34 CTGDIS086I No iterator in AssemblyLine, will run single pass only. 04:35:34 CTGDIS092I Using runtime provided entry as working entry (first pass only). 04:35:34 CTGDIS088I Finished iterating. 04:35:34 [OpenBook] Closed IdML book App1.0.host.ibm.com.2008-09-26T08.35.34.031Z.xml 04:35:34 CTGDIS100I Printing the Connector statistics. 04:35:34 [OpenBook] CallReply:1 04:35:34 CTGDIS104I Total: CallReply:1. 04:35:34 CTGDIS101I Finished printing the Connector statistics. 04:35:34 CTGDIS080I Terminated successfully (0 errors). 04:35:34 CTGDIS079I AssemblyLine AssemblyLines/MyFirstDLA terminated successfully. [4:35:34 AM EDT] AssemblyLines/MyFirstDLA 04:35:34 CTGDIS036I Exit after auto-run requested. 04:35:34 CTGDIS174I Config Instance C:\Documents and Settings\no010196\My Documents\TDI_pre7.0\myDLA.xml exited with status 2. 04:35:34 CTGDIS228I Unregister server: C:\Documents and Settings\no010196\My Documents\TDI_pre7.0\myDLA.xml. 04:35:34 CTGDIS627I TDI Shutdown. ************************ Process exit code = 0 Did you notice that even though you have not added the CloseIDML FC yet, the Book is closed when the AL completes. In fact, there is no need to explicitly close the Discovery Book unless the AssemblyLine is going to do something with it after it is closed, such as automatically transfer it to the Tivoli Application Dependency Discovery Manager server, as yours will soon be doing. Note: Running your solution from the CE (particularly in the Debugger, as covered later) is how you interactively build, test, and refine your AssemblyLines. For deployment, the AssemblyLines will most like be started from the command line. We will revisit this in “Running the DLA from the command line” on page 28. Adding CIs Now it is time to write data to your Discovery Book. To do this you first need to implement some AL logic to loop through the input file. As mentioned before, since you cannot use standard Feeds-Flow looping behavior, you must create your own. 1. Start by right-clicking the Flow folder again. This time select Add loop and call it FOR EACH machine read. Once you click OK, the Loop details panel appears on panel. 12 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Here you can see that there are three types of loop, as indicated by the radio buttons across the top of the details panel. Keep the default setting of Connector Loop and attach the Connector to use by clicking the Inherit from button (Figure 10). Figure 10 Add a Connector Loop 2. Select the FileSystem Connector from the resulting selection drop-down (Figure 11). Figure 11 Add a Connector Loop: Step 2 Once you have chosen it and clicked OK, the FileSystem Connector parameters are shown in the Config tab of the Connector Loop. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 13 3. Enter the file path to the exercise data that you set up earlier in this section. Note that this can be a relative path based on your Solution Directory, as shown in Figure 12. Figure 12 Add a Connector Loop: Step 3 4. The FileSystem Connector needs a parser to interpret the structure of the incoming byte stream. Configure this by clicking the Parser tab and then the Inherit from button at the bottom right-hand corner of this tab. Choose CSV parser (Figure 13). Figure 13 Add a Connector Loop: Step 4 14 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 5. By default, the delimiter for the Character Separated Value (CSV) parser is a semi-colon (;). You must change the field separater to a comma so that it matches the format of your exercise data7 (Figure 14). Figure 14 Add a Connector Loop: Step 5 6. Now you can select the Input Map tab and click the Quick discovery button to read and parse the file, which presents you with the list of available attributes (Figure 15). Figure 15 Add a Connector Loop: Step 6 7 Since your data file already contains a first line specifying field names, you do not need to enter these yourself in the Field Names parameter. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 15 7. Drag the attributes from the Connector Schema into the Input Map area. As you know, these Input Map rules dictate which attributes the Loop Connector brings into the AssemblyLine on each cycle—a fact that is also visible on panel since these attributes now appear in the AL Work Entry list (Figure 16). Figure 16 Add a Connector Loop: Step 7 8. The Connector Loop now cycles once for each line read and parsed from the CSV file. It is time to add a Connector under the loop to write CIs that correspond to the input data. Do this by right-clicking the loop and then selecting Add Connector component. Choose the idml.IDMLConfigurationItem Connector from the list and call this new Connector AddMachineCI8, as shown in Figure 17. Figure 17 Add a Connector Loop: Step 8 8 16 The IDML Connectors only support AddOnly mode so you can leave this drop-down as it is. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 9. The IDMLConfigurationItem Connector has only two required parameters (Figure 18): – The Class Type, where you specify the type of CI that you are creating. Enter the value cdm:sys.ComputerSystem here for this exercise. Note: In order to get Tivoli Application Dependency Discovery Manager to visually categorize the these CIs, you would need to dynamically change the Class Type parameter of the ConfigurationItem Connector to reflect the correct sub-class of ComputerSystem, like LinuxUnitaryComputerSystem or WindowsComputerSystem. Note that these sub-classes have been deprecated and will be removed from a future release of the Common Data Model. However, in the meantime you control visual organization of CIs in Tivoli Application Dependency Discovery Manager by using these qualifying CDM Class Types. Note that in order to implement this in Tivoli Directory Integrator, simply change the Initialize drop-down at the top of the Connector Config tab to Initialize and terminate each time and then click the label of the Class Type parameter and enter the following into the Expression® field: {work.ClassType} Of course, prior to this you will need an Attribute map where you compute the value of this ClassType Attribute, for example with a JavaScript™ map like this: opsys = work.getString(“op_sys”); if (opsys.startsWith(“Red Hat”)) ret.value = “cdm:sys.LinuxUnitaryComputerSystem” else if (opsys.startsWith(“Windows”)) ret.value = “cdm:sys.WindowsComputerSystem” else ... – The Book Name, which must have the same value that you specified for the OpenIDML Function component: MyBook. Figure 18 Add a Connector Loop: Step 9 10.Now you must set up the Output Map for this Connector in order to transform the CSV exercise data into the CI fields id, cdm:Signature, and cdm:Fqdn (fully qualified distinguished name). Creating IDML Discovery Books with IBM Tivoli Directory Integrator 17 Starting with id, select the Output Map tab and drag in the machine attribute from the Work Entry list into the Output Map. Double-click it in order to rename the attribute to id so that it conforms to the IDML schema (Figure 19). Figure 19 Add a Connector Loop: Step 10 As you can see from Figure 19, even though the attribute is written to the Discovery Book with the name id, it still gets its value from the Work Entry Attribute called machine. 11.Drag machine again into the Output Map and this time rename it to cdm:Signature. Now drag it over once more and this time call it cdm:Fqdn (Figure 20). Figure 20 Add a Connector Loop: Step 11 Even though this is an example scenario, it is not uncommon that the same source attribute is mapped to multiple output attributes. Validating the IDML Book It is time to test your work again. But before you do, select the OpenBook FC (OpenIDML) and enable the Validate check box. Now that there is data in the Discovery Book, you will want it validated. Do this now by clicking the Run button to test your AL again. 18 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Your AssemblyLine produces output similar to what you saw in the previous test, with the addition of a validation report, as shown in Example 3. Example 3 Output from test AL IBM Discovery Library Certification Tool Version 2.4.4 =============================================================================== File: C:\temp\App1.0.host.ibm.com.2008-09-24T22.55.54.140Z.xml =============================================================================== . Certification tool found: 18 Managed elements 0 Relationships [PASS] [PASS] [PASS] [PASS] [PASS] [PASS] [PASS] - TEST TEST TEST TEST TEST TEST TEST 00 01 02 03 04 05 06 (XML Parse) (All MEs have a valid ID) (superior reference IDs in book) (Attributes are valid) (All managed elements have a valid naming rule) (All managed elements are valid) (All relationships are valid) Book passed all certification tests Elapsed time: 4.2 seconds You should also be able to find your newly created Discovery Book and open it in a browser window to examine the contents. There should be one <cdm:sys.ComputerSystem> node entry for each machine read from the input file. Adding CI relationships In addition to host names, the input data also contains information about each machine’s operating system. This data must also be captured in your Discovery Book, as well as the relationships between each machine and its OS. 1. Add another Connector by right-clicking the Loop and selecting Add Connector component. Choose the idml.IDMLConfigurationItem Connector from the list and call this new Connector AddOS, as shown in Figure 21. Figure 21 Adding CI relationships Creating IDML Discovery Books with IBM Tivoli Directory Integrator 19 2. Operating systems are represented by a separate CI class in the Common Data Model called cdm:sys.OperatingSystem, so set the Class Type parameter to cdm:sys.OperatingSystem. The book name must, of course, be MyBook (Figure 22). Figure 22 Adding CI relationships: Step 2 3. The cdm:sys.OperatingSystem class also needs an id value. Use the same Work Entry Attribute that you did for the ComputerSystem by bringing up the Output Map for your AddOS Connector, and dragging in the machine attribute and renaming it to id. Since every CI must have a unique ID, you must modify the mapping rule slightly so that the ID of the OperatingSystem is different from that of the associated ComputerSystem. The simplest way to do this is by selecting the id Output Attribute and then changing the Mapping Type from Simple to Expression (Figure 23). Figure 23 Adding CI relationships: Step 3 4. Expression maps allow you to enter a literal text value, optionally including one ore more substitution tokens. As soon as you select Expression mapping, Tivoli Directory Integrator presents you with an Expression containing a token that is equivalent to the original Simple map: {work.machine} 20 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Now you can ensure a unique OperatingSystem CI ID value by appending the text _os (Figure 24) after the right-most curly brace of the substitution token: {work.machine}_os Figure 24 Adding CI relationships: Step 4 Note: This could also be done using the JavaScript Mapping Type option and then entering the following snippet in the assignment editor: ret.value = work.getString(”machine”) + "_os"; 5. Now drag the op_sys Attribute from the Work Entry list into the Output Map and rename it as cdm:OSName. Click the eyeball button above the Output Map and switch to List View mode. This gives you a quick overview of your mapping assignments. The AddOS Connector is now complete (Figure 25). Figure 25 Adding CI relationships: Step 5 Note: You can run your AssemblyLine now and verify your work if you like, or you can proceed with adding the installedOn relationship first. That is the beauty of Tivoli Directory Integrator: You can continually test your solution as you incrementally build and improve the logic of your AL. Remember: Periodically save your Config with either the Ctrl+S keyboard shortcut, by selecting the File → Save menu option, or by clicking the Save button in the main button bar. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 21 6. Now that both CIs have been added, your AL can now write the relationship between them. Do this by right-clicking the Loop again and selecting Add Connector component. This time choose the idml.IDMLReln Connector. Call it AddRelationship and click OK to confirm (Figure 26). Figure 26 Adding CI relationships: Step 6 The IDMLReln Connector is similar to the IDMLConfigurationItem Connector that you have been using already, with the exception that the ClassType parameter has been replaced with Relationship Class Type. 7. The Relationship Class Type value that you should use here is cdm:installedOn. And, once again, set the book name to MyBook (Figure 27). Figure 27 Adding CI relationships: Step 7 Note: See whether you figure out how to add the other relevant relationship as well: cdn:runsOn. Hint: You will need another idml.IDMLReln Connector. 8. Your last step here is to set up the two property values for this relationship: – Source – Target The source of the relationship will be the OS and the target is the machine that it is installed on. Select the Output Map of your AddRelationship Connector and then drag in machine from the Work Entry list. Double-click it and call it target. Now the value assigned to the target attribute will be the same as the id of the ComputerSystem. 22 Creating IDML Discovery Books with IBM Tivoli Directory Integrator To specify the source for this relationship, drag in machine once more and rename it as source. Now apply the same change to the mapping assignment as you did for the OperatingSystem ID, in other words, this Expression map: {work.machine}_os If you use the eyeball button to switch to List View then your assignments should look like Figure 28. Figure 28 Adding CI relationships: Step 8 9. Now run your AssemblyLine again. If all goes well then your AL will create a new IDML Book complete with CIs and their relationships, validating it as well. Once this is achieved you are ready to transfer your Discovery Book to the Tivoli Application Dependency Discovery Manager server. Transferring the IDML file to the Tivoli Application Dependency Discovery Manager Server To securely transfer an IDML Book to the Tivoli Application Dependency Discovery Manager server, another Tivoli Directory Integrator component is required. You can download the package from OPAL at the following Web link: http://www.ibm.com/software/brandcatalog/portal/opal/details?catalog.label=1TW10DI0C Unpack the asset, place the FileTransferFC.jar in the same directory as the jar files from the previously added FCs, and then restart the Tivoli Directory Integrator Configuration Editor. Be sure to consult the release notes for any last-minute changes or notices. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 23 Once these preparations are complete, you can continue with your AssemblyLine. 1. The first thing that you must do is explicitly close the IDML Book. To do this, add a new Function component to the Flow section, making sure that it appears after your Loop and not under it. Choose the CloseIDML FC and call it CloseBook. This component has only a single parameter, Book Name, which you set to MyBook (Figure 29). Figure 29 Transferring the IDML file The CloseIDML FC closes the Book and performs validation if this option is enabled in the OpenIDML FC. It furthermore returns the filepath to the newly created XML document. You need this in the final step when you pass the file to Tivoli Application Dependency Discovery Manager for import. 2. To retrieve the book filepath, select the Input Map of your CloseBook FC and click the Add new attribute button, as shown in Figure 30. Figure 30 Transferring the IDML file: Step 2 24 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 3. Name this Attribute idml.bookName and click OK to confirm. Then double-click this attribute and rename it as FileName so that it can easily be referenced in a Tivoli Directory Integrator Expression9 (Figure 31). Figure 31 Transferring the IDML file: Step 3 Because FileName is found in an Input Map, an Attribute called FileName now appears in the Work Entry list. You are ready to add the FC that will transfer this file to Tivoli Application Dependency Discovery Manager. 4. Right-click the Flow section folder and select Add Function Component. Choose ibmdi.FileTransferFC and call it SendBook2TADDM. In the Config tab, set the parameters to suit your Tivoli Application Dependency Discovery Manager environment, as shown in Figure 32. Figure 32 Transferring the IDML file: Step 4 Note that the Source file (local) parameter is left blank. This is because the IDML file name is generated at run time by your OpenBook FC. Fortunately, the Source file parameter value can be passed to the FC by mapping it out in a specially named attribute, source.file. 5. Go to the Output Map of the SendBook2TADDM FC and drag in the FileName attribute from the Work Entry list. Now rename it to source.file, which is the name that the FC is expecting. 9 If you click this attribute you see that it is still mapping its value from idml.bookName, which is what the CloseIDML FC returns. You can rename the resulting Work Entry Attribute as desired, and in this case the goal is to make the attribute name usable in a Tivoli Directory Integrator Expression. (The extra dot (.) in the original name would not work.) Creating IDML Discovery Books with IBM Tivoli Directory Integrator 25 Since the Filename Attribute contains only the file name instead of its full path, you must change the Map Type to Expression and include the path that you set for the OpenBook FC10: C:/temp/{work.FileName}, as shown in Figure 33. Figure 33 Transferring the IDML file: Step 5 6. Save your work. If the FC has been correctly configured, when you click Run to test the AssemblyLine it creates the IDML Book, validates it, and then transfers it to the Tivoli Application Dependency Discovery Manager server. Loading the IDML file into Tivoli Application Dependency Discovery Manager The last element to be added to the AssemblyLine is the function to import the IDML into Tivoli Application Dependency Discovery Manager. This is done by the execution of a command on the Tivoli Application Dependency Discovery Manager server and can be automated by adding the Remote Command Line Function Component to your AssemblyLine. 1. Right-click the Flow section folder and select Add Function Component (Figure 34). Figure 34 Loading the IDML file 10 26 Tivoli Directory Integrator lets you use forward or backwards slashes as you please, regardless of the platform that your system is running on. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 2. Select the ibmdi.RemoteCmdLineFC Function Component, enter UpdateTADDM as the name, and click OK. The parameters must be configured as shown in Table 2. Table 2 RemoteCmdLineFC parameters and values RemoteCmdLineFC parameter Value Target Machine Hostname The server running Tivoli Application Dependency Discovery Manager. Target Machine Hostname The server running Tivoli Application Dependency Discovery Manager. Remote User The ID of a user with the necessary access rights to run the loadidml command on the Tivoli Application Dependency Discovery Manager server. Password Password for the user ID specified above. Connection Protocol This selection is based on your environment and the platform that Tivoli Application Dependency Discovery Manager is running on, for example, WIN for a Windows Tivoli Application Dependency Discovery Manager server. Command The full path to the loadidml command, including the –f option and a path to the directory where the IDML file is located (as set in the previous section on transferring the IDML Book). Using the example of Tivoli Application Dependency Discovery Manager running on a Windows server again: c:\ibm\cmdb\dist\bin\loadidml.bat -f c:\ibm\cmdb\dla Note: Since the loadidml command will process all files found in the directory where the command is run, a file name is not needed as part of the command syntax. 3. Now when you click Run to test the full assembly line, the log output should look similar to that in Figure 35. Figure 35 Loading the IDML file: Step 3 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 27 4. In addition, you are able to see the new entries in the Tivoli Application Dependency Discovery Manager GUI, as shown in Figure 36. Figure 36 Loading the IDML file: Step 4 If you have the Tivoli Application Dependency Discovery Manager GUI open when you run your AssemblyLine, you see the following status message at the bottom of the panel. Click the message to update the view to see the added components. Note: Although the servers that you just added will include the OS name as specified in the CSV file, they will not be categorized correctly in Tivoli Application Dependency Discovery Manager. To get correct placement in the Tivoli Application Dependency Discovery Manager database, additional fields would have to be available in the CSV file, or joined into the AL from other sources. Running the DLA from the command line As noted earlier, running the AssemblyLine from the GUI is the best way to test and debug. However, in a production setup you would normally run the AssemblyLine from the command line. As an example of doing this under Windows, open a command prompt and navigate to your Tivoli Directory Integrator folder (for example, C:\Program Files\IBM\TDI\V6.1.1). To run your AssemblyLine, enter the following command: ibmdisrv –c myDLA.xml –r MyFirstDLA 28 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Note that if you run the ibmdisrv command with no arguments then you get a complete usage message outlining the various options available to you, as shown in Example 4. Example 4 ibmdiserv arguments C:\Program Files\IBM\TDI\V6.1.1>ibmdisrv Usage: ibmdisrv [OPTION]... Allowable options are: -c <file ...> Configuration files. -d Run in daemon mode -e Start the Server in secure mode. -f <extProp1=file1,extProp2=file2 ...> External property files. -i Ignore global properties file and read from solution properties file. -l <file ...> Redirect Console output to specified log file. -n <encoding> Encoding to be used when writing configuration files. -p Dump java properties on startup. -q <mode> mode=1 Run in record mode, mode=2 Run in playback mode -r <al ...> List of AssemblyLine names to start. To start AssemblyLine a and b, use the command -r a b. -s <dir> Specifies the working directory where the solution is located. Must be first option. -t <eh ...> List of EventHandler names to start. To start EventHandler a and b, use the command -t a b. -v Show version information and exit. This is logged only in the logfile. -w Wait for each AssemblyLine or EventHandler to complete before starting the ne xt. -D Disable startup of auto-started EventHandlers. -P <password> Password if configuration file is encrypted. -R Disable Remote API, ignoring the setting in global.properties. -T Enable Performance logging -W Never terminate the server -Z Zero out checkpoint information and start checkpointed AssemblyLine from begg inning -? This message -0 to -9 for user-defined parameters Understanding IDML and the CDM As its name implies, the Common Data Model is a shared model designed to allow easier integration of the different systems that deliver service and asset management functionality for the same services and assets. Once connectivity to the source data is no longer an issue, your challenge will be to choose the correct class and relationship types for your IDML output, as well as which property values to set and how to compute these. Examining samples of IDML based on real-world data can help you in setting up these data mapping rules. There are also JavaDocs available (and linked below) that document the various CDM classes. These can provide the insight that you need to build your DLA. Reading IDML samples The Tivoli Application Dependency Discovery Manager development team has collected several common examples into a single document entitled Using the Data Model to display data in TADDM: http://www.ibm.com/software/brandcatalog/portal/opal/details?catalog.label=1TW10CC22 Creating IDML Discovery Books with IBM Tivoli Directory Integrator 29 This is where you start on your quest to pick the correct CDM CI and relationship types, as well as discover their associated property values11. Every example in this guide includes a sample IDML preceded by a brief description of what is modeled. Turn to the first example, entitled Linux® Computer System and take a close look at the xml shown there. The start of all Discovery Book XML defines the various IDML Book values like hostName and manufacturerName. Skip down past all this to the XML nodes that represent CIs and relationships. Here you see what the Output map of your IDMLConfigurationItem Connectors will be creating (Example 5). Example 5 XML example for a Linux-based system ... <cdm:CDM-ER-Specification> <cdm:sys.linux.LinuxUnitaryComputerSystem id="1" sourceToken="cs1"> <cdm:Label>computer1.austin.ibm.com</cdm:Label> <cdm:SerialNumber>87BG943</cdm:SerialNumber> <cdm:Model>IBM eserver xSeries 230 -[86464AX]-</cdm:Model> <cdm:Manufacturer>IBM</cdm:Manufacturer> <cdm:PrimaryMACAddress>000218ZZF223</cdm:PrimaryMACAddress> <cdm:fqdn>tempo.us.ibm.com</cdm:fqdn> </cdm:sys.linux.LinuxUnitaryComputerSystem> <cdm:OperatingSystem id="2" sourceToken="os1"> <cdm:OSName>Red Hat ES 6</cdm:OSName> <cdm:OSVersion>1.2.3.4.5</cdm:OSVersion> </cdm:OperatingSystem> <cdm:installedOn source="2" target="1"/> <cdm:runsOn source="2" target="1"/> ... From Example 5 you can see which attributes a CI-like LinuxUnitaryComputerSystem has, for example, PrimaryMACAddress and Manufacturer. The relationships shown have only source and target. Although these examples provide a great guideline for your DLA work in Tivoli Directory Integrator, also consult the CDM JavaDocs. The CDM JavaDocs All CI and relationship class types are described in the CDM JavaDocs, linked here: http://dl.getdropbox.com/u/375185/TADDM_IDML/model-javadoc.tar.gz Just unzip this to a drive and then click the index.html file in the root folder. You can tell much about which properties a class has by the get methods defined for it. For example, the presence of a getFqdn() method indicates that there is an Fqdn property that you can map out to. Unique identifier (id) The tutorial exercise in the preceding sections had you mapping out an id value for each CI and relationship. As you can see from the sample, this becomes the xml attribute that uniquely identifies a Configuration Item or relationship. The other attributes like cdm:fdqn and cdm:OSName provide property values as required and defined for each class type. 11 30 Note that this document is updated periodically by the Tivoli Application Dependency Discovery Manager development team. Creating IDML Discovery Books with IBM Tivoli Directory Integrator This leads to an interesting topic: Deciding what input value is to become the id of your CIs. The id must uniquely identify each CI, and in the tutorial exercise you used the machine attribute for the computer system and {work.machine}_os for its operating system. If the input data had not provided you with a unique attribute, you could have used a snippet of JavaScript in a map to make a unique value yourself, perhaps combining several input values. Another approach is to use counters, for example, adding the first CI with an id mapping of ret.value = counter and the next one with ret.value = counter+1. The above IDML looks like it was created this way, with the first CI identified as 1, the second as 2, the third as 3, and so forth. It is important to remember that this id value is not the actual identifier of the CI that Tivoli Application Dependency Discovery Manager created based on your IDML. Each CI has its own internal unique identifier assigned to by Tivoli Application Dependency Discovery Manager when it was imported. So the question comes to mind: What happens if I load the same import file twice? Will this update the CIs created during the first import, or will it create duplicates? Naming rules To answer this question, you first must understand the concept of naming rules in the CDM. Look at the JavaDoc page of LinuxUnitaryComputerSystem. This page describes what is special about a LinuxUnitaryComputerSystem CI, in addition to all the methods and properties that it inherits from other more generic CI classes. Since the header of this page does not contain a section called Naming Rules, you will need to look at its direct ancestor to see if naming rules are defined here instead. public interface LinuxUnitaryComputerSystem extends UnitaryComputerSystem Clicking the UnitaryComputerSystem link brings up its JavaDoc page. As you can see, there are no naming rules listed here either. Continue up the hierarchy. public interface UnitaryComputerSystem extends ComputerSystem Finally, at the ComputerSystem level you find the naming rules that apply to this class and all its descendants, along with a bit more information that will come in handy: public interface ComputerSystem extends CIMSystem, ConfigurationItem Naming rules: – 0="signature" 1="-VMID,manufacturer,model,serialNumber" 2="systemBoardUUID" – 3="primaryMACAddress" 4="hostSystem,VMID" 5="managedSystemName" – 6="VMID,manufacturer,model,serialNumber" Persistable: true Table Name: COMPSYS Top Level: true Display Name: fqdn The naming rules above state that first Tivoli Application Dependency Discovery Manager looks for a signature property value in this CI. If found, it is used to uniquely identify this CI. Otherwise, the next naming rule is applied (#1). It states that if no VMID property is defined (-VMID) then the manufacturer, model, and serialNumber will be used combined for identification. If one or more of these attributes is missing then rule #2 is applied, and so forth. Creating IDML Discovery Books with IBM Tivoli Directory Integrator 31 You must determine which naming rules you can satisfy with the input data that you must work with, especially if you plan to trick-feed Tivoli Application Dependency Discovery Manager with updates as the source data changes. Conclusion Congratulations. You have just created your first Tivoli Directory Integrator DLA. Once in Tivoli Application Dependency Discovery Manager, information about CIs and their relationships can be moved to CCMDB to enable ISM services like Tivoli Service Request Manager (TSRM). There are also additional Tivoli Directory Integrator components available on OPAL for searching and extracting Tivoli Application Dependency Discovery Manager data in order to drive it to, or synchronize it with, targets like reporting systems, databases, and even text files, or simply to augment data in other AL flows. And this is only the beginning. As mentioned in the introduction, Tivoli Directory Integrator is part of a growing number of IBM products and offerings, and you will find the skills that you just gained invaluable across a wide range of development and deployment scenarios. There are a number of resources available to help you build your Tivoli Directory Integrator expertise, and a good place to start is with this video tutorial on the AssemblyLine Debugger12: http://www.ibm.com/software/brandcatalog/portal/opal/details?catalog.label=1TW10DI06 This uniquely powerful feature lets you interactively step through the execution of your AssemblyLines, visually controlling your transformation and flow-control logic, and both viewing and modifying data in-flight—even if the AL is running on a remote platform. You will also want to understand how to make your ALs more robust by through error handling: http://www.ibm.com/software/brandcatalog/portal/opal/details?catalog.label=1TW10DI0B The team that wrote this IBM Redpaper This paper was produced by a team of specialists from around the world working with the International Technical Support Organization, Austin Center. Axel Buecker is a Certified Consulting Software IT Specialist at the International Technical Support Organization (ITSO), Austin Center. He writes extensively and teaches IBM classes worldwide on areas of software security architecture and network computing technologies. He holds a degree in Computer Science from the University of Bremen, Germany. He has 22 years of experience in a variety of areas related to workstation and systems management, network computing, and e-business solutions. Before joining the ITSO in March 2000, Axel worked for IBM in Germany as a Senior IT Specialist in Software Security Architecture. Eddie Hartman is part of the Tivoli Direcory Integrator development team and has worked with the tool since its inception. In addition to design, documentation, community outreach, and enablement, Eddie writes extensively on how to integrate many types of IBM products. You can read his thoughts on TDI at http://tdiingoutloud.blogspot.com/. 12 32 All video tutorials, including exercise data files, presentations and sample Configs can be found in the Tivoli Directory Integrator community Web site: http://www.tdi-users.org. Creating IDML Discovery Books with IBM Tivoli Directory Integrator Eduardo Patrocinio is a Senior IT Architect in the IBM Tivoli Advanced Technology Group in the USA. He has over 15 years of software development experience, with expert-level credentials in the areas of database design and warehousing, network management, service desk tools, service level management, and CMDB design. He is a principal consultant to internal IBM development groups on CMDB and ITIL® process-management requirements. Over the last three years he has implemented IT service management solutions for more than 50 customers in over 20 countries. His current focus is on the practical application of CMDB and configuration management to IT service management and ITIL-based initiatives. His academic credentials include his selection as Engineering Student of the Year 1993 for the country of Brazil, based on country-wide testing and interviewing of students throughout the country. Jan Erik Hoel is a Senior IT Specialist with IT experience back to the late seventies, currently working in IBM Tivoli Software Services in Norway. For the last 12 years he has been working with software distribution, remote control, and inventory. One of his major projects recently was the distribution solution developed for the Norwegian State Lottery (Norsk Tipping) including a Web-based front-end to the base Tivoli solution (Tivoli Configuration Manager). In recent years, Tivoli Provisioning Manager, Tivoli Application Dependency Discovery Manager, Tivoli Directory Integrator, and IBM Tivoli Monitoring have been added to the skill set. Thanks to the following people for their contributions to this project: Julie O’Shea, Editor International Technical Support Organization, Poughkeepsie Center Creating IDML Discovery Books with IBM Tivoli Directory Integrator 33 34 Creating IDML Discovery Books with IBM Tivoli Directory Integrator Notices This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. COPYRIGHT LICENSE: This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. © Copyright International Business Machines Corporation 2009. All rights reserved. Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 35 This document REDP-4492-00 was created or updated on January 19, 2009. Send us your comments in one of the following ways: Use the online Contact us review Redbooks form found at: ibm.com/redbooks Send your comments in an email to: redbooks@us.ibm.com Mail your comments to: IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 U.S.A. ® Redpaper ™ Trademarks IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (® or ™), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: Domino® IBM® Redbooks (logo) Tivoli® ® The following terms are trademarks of other companies: ITIL is a registered trademark, and a registered community trademark of the Office of Government Commerce, and is registered in the U.S. Patent and Trademark Office. Java, JavaScript, and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Expression, Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. Linux is a trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others. 36 Creating IDML Discovery Books with IBM Tivoli Directory Integrator