Identification and Reconciliation engine (IRE)
-
- UpdatedAug 3, 2023
- 8 minutes to read
- Vancouver
- Configuration Management
IRE is an underlying key component in Identification and Reconciliation, providing a centralized framework to perform identification and reconciliation processes across different data sources. IRE uses identification rules, reconciliation rules, and IRE data source rules when processing incoming data before inserting that data to the CMDB.
- IRE prevents duplicate CIs by uniquely identifying CIs.
- IRE reconciles CI attributes by allowing only authoritative data sources to write to CMDB.
- About properties that affect some functions of IRE: See Properties for Identification and Reconciliation.
- About using IRE APIs: See IdentificationEngine - Scoped.
- About enabling debugging and checking on issues with a payload: See How to log the payload sent to IRE and check the issues with the payload [KB0750382].
- About the steps that IRE performs illustrating how IRE works, such as validating the payload, applying reconciliation, and committing the data to the CMDB: See [CMDB - IRE] How the CMDB Identification and Reconciliation Engine works when passing a CI (as payload) to the createOrUpdateCI() [KB0750386].
- About how to run a payload through IRE: See [CMDB IRE] How to run the CI identification on demand using the payload [KB0750383].
CI identification
The CMDB identification process relies on identification rules to uniquely identify CIs. When possible, CIs can also be uniquely identified using source_name and source_native_key values provided in the sys_object_source_info section of the payload, and the Source [sys_object_source] table. If identification is successful using that method, then it is not necessary to apply matching algorithms that rely on identification rules, which is a slower identification method.
Identification processes rely on CIs dependency classification to uniquely identify CIs. For example, to identify a Tomcat CI which is a dependent CI. Assuming a Windows Server CI (independent class) which is running a Tomcat application (dependent class). elying on 'config file path' to uniquely identify the Tomcat CI, isn't sufficient because the Tomcat application can run on multiple machines with identical paths. The identification engine won't be able to choose a CI to update. Dependent relationships force the identification process to first identify the Windows Server host on which the Tomcat application is running, and only then, in the context of the host, to uniquely identify the Tomcat application itself.
Payload items identification
- Combination of the source_name and source_native_key values from the sys_object_source_info object.
- Identification criterion attributes.
Timestamps in key attributes
Most recent discovery (last_discovered) and Discovery source (discovery_source):
Most recent discovery (last_discovered) is the timestamp of when the CI was last discovered. IRE always updates CIs’ last_discovered and discovery_source attributes during payload processing, even when no other CI attributes are updated. When last_discovered is provided in the payload, IRE updates the CI with the provided value only if the last_discovered time in the payload is newer than the one in the CMDB. If last_discovered is not provided in the payload, IRE updates the last_discovered attribute with the current timestamp.
You can use the glide.identification_engine.skip_updating_source_last_discovered_if_older and the glide.identification_engine.ire_message_listener_skip_updating_source_last_discovered_to_now system properties to modify this default behaviour.
First discovered (first_discovered) is the timestamp of when the CI was first created.
- When the CI is first created: If a value is provided in the payload, IRE inserts that value. Otherwise, IRE inserts the current timestamp.
- In subsequent updates: If a value is provided, IRE updates the CI with the provided value. Otherwise, the attribute is not updated.
Enhanced IRE features
- Partial payloads
IRE isolates items for which data sources did not provide enough information to uniquely identify the CI and therefore processing cannot continue. Some of these items are identified as partial items, which get stored for potential later processing. Other items are identified as incomplete items, which get stored for logging purposes only.
For example: SCCM has multiple feeds such as a disk feed and a computer feed. The disk feed might have complete information about the disk but insufficient information about the computer CI that it depends on.
API option: partial_payloads which is enabled by default. When partial_payloads is enabled, partial_commits and deduplicate_payloads are automatically enabled regardless of their setting in options.
- Partial commits
Errors in some items do not prevent committing the rest of the items in a payload. Therefore, when a payload contains items with errors, IRE still commits the remaining valid items in the payload. In this situation, some of the uncommitted items are saved as partial payloads and other uncommitted items are saved as incomplete payloads.
API option: partial_commits which is enabled by default.
- Deduplicate payload items
IRE deduplicates duplicate items within the payload, merging those duplicates into a single payload item for processing.
API option: deduplicate_payloads which is enabled by default.
- Generate summary
IRE generates summaries in the output payload with processing details such as the number of updates per class.
API option: generate_summary which is disabled by default.
Partial items
A payload item is determined to be a partial item if it contains the necessary data for unique identification and if it has one of the following errors. Unique identification requires that the payload item has the sys_object_source_info section with source_name and source_native_key values, or the full set of the identification criterion attributes specified for the CI class, or both.
- MISSING_MATCHING_ATTRIBUTES –— Item does not have identification criterion attributes to use at least one identifier entry for matching.
- REQUIRED_ATTRIBUTE_EMPTY –— Unable to create a CI because a required attribute is missing.
- MISSING_DEPENDENCY –— Dependent CI is missing a dependency relation which is specified in the payload.
- INSERT_NOT_ALLOWED_FOR_SOURCE –— An IRE data source rule prevents the specified data sources from creating CIs of the specified class.
For more details about IRE error messages, see IRE error messages.
If processing fails because payload items are determined to be partial items, then the partial items are saved as partial payloads in the CMDB IRE Partial Payloads [cmdb_ire_partial_payloads] table in JSON format for later potential processing. IRE uses identifier keys to attempt to match incoming payloads with stored partial payloads.
If later, a data source sends the data that was missing in the partial item, IRE matches the incoming payload with the stored partial payloads. IRE then merges any matching partial payloads with the incoming payload. To resolve any conflicting attributes, IRE uses either source_recency_timestamp (when source_native_key and source_name are identical), or static reconciliation rules specified for the class. The result is a complete and valid payload which IRE then processes to create or update the respective CIs.
Partial payloads older than 90 days are deleted from the CMDB IRE Partial Payloads [cmdb_ire_partial_payloads] table.
source_native_key
are provided making it a partial item. Because the
computer item is partial, the disk item that depends on the computer item, is a partial item
too.There is a limit on the number of items per partial payload, which is set by the glide.identification_engine.partial_payload_items_max_size property (1000 by default). Storing associated relationships, references, and dependent items, in one partial payload, can result in reaching that limit, in which case, the payload is split into multiple partial payloads.
For more information about partial payloads, see CreateOrUpdateCIEnhanced().
Incomplete items
- It does not contain all the data necessary for unique identification
- It has an error that is not associated with a partial item
Incomplete items are saved as incomplete payloads in the CMDB IRE Incomplete Payloads [cmdb_ire_incomplete_payloads] table in JSON format. Incomplete items are stored for the purpose of logging payloads with irrecoverable errors, and are never processed again.
Adding relationships
Add relationships by using either indices, or the optional JSON internal_id element.
- Relation (parent Index, child Index, Relation Type)
- Relation (parent Internal Id, child Internal Id, Relation Type)
For more information and for code samples, see CreateOrUpdateCIEnhanced().
Adding references between payload items
Add references between two payload items by using the optional JSON internal_id element, which uniquely identifies payload items.
Use the referenceItems block to add or update references. You can add references between any two items, including main items, lookup items, and related items, in a single payload.
For more information and for code samples, see CreateOrUpdateCIEnhanced().
CI reclassification
Use the updateWithoutUpgrade, updateWithoutDowngrade, and updateWithoutSwitch flags in the settings block in a payload, to prevent unintentional updates to CIs' class. These flags prevent upgrading, downgrading, or switching the class of a CI that multiple data sources unintentionally might attempt while updating the same CI. For more information and for code samples, see CreateOrUpdateCIEnhanced().
Reclassification flags have precedence over any other system settings for CI reclassification during IRE processing.
Adding custom before and after scripts
Use the IntegrationHub ETL to add custom Java scripts for a data source of a CMDB integration application. Those scripts provide access to the IRE input and output payloads, while processing CMDB integrations.
- Skip a payload in the batch by setting the status to SKIPPED. Optionally, provide a reason for skipping the payload which will appear as a comment on the respective import set row table.
- Modify the input payload.
- Write other custom logic inside the script that uses the IRE payload.
- Easily compare the input and output payloads and identify the different operations that IRE performed on each CI.
- Access the sys_ids of the CIs that IRE created or updated.
- Write other custom logic inside the script that uses the IRE output payload.