Discovery Device IP AddressDescriptionDuring discovery, a configuration item (CI) may have its IP address updated. See below for steps followed by the discovery logic to update such an IP address. Note: The focus of this article is the field ip_address of a discovered CI, such as cmdb_ci_computer.ip_address. When a CI is discovered, the table cmdb_ci_ip_address is also populated with the IP addresses discovered for the CI. Discovered CI IP Address The IP Address for a CI is set during the identification phase of discovery. Probes/sensors At the identification phase, a payload called cidata is passed to the Identification and Reconciliation Engine (IRE). The IRE uses such cidata to Create/Update the CI. The CI's IP address will be updated if the ip_address in the cidata is not the same as the currently set IP address for the CI. The IP address in the cidata is the same IP address being used to discover the CI. In most cases, it is not desirable to have the IP address changing with each discovery. Therefore, before passing the payload to the IRE, discovery attempts to determine whether to remove the ip_address from the payload. Removing the ip_address from the payload would ensure that the IP address for the CI is not updated. The script include DiscoveryJSONIDSensor uses the function processIPAddressField(ciRecord) to performs the following steps: Did the identification engine find a matching CI? No: This is the first time the device is discovered. Use the IP address from cidataYes: Continue Does the existing CI have an IP address? No: Use IP address from cidata to update CIYes: Continue Does the CI current IP address match the cidata IP address? No: ContinueYes: No need to remove the IP from the cidata. The CI will maintain the IP address At this point we have an IP address in the cidata which does not match the CI current IP address. Leaving this IP address in the cidata would cause the CI IP address to be updated/flipped. The identification phase also collects the network adapters. Therefore, is the CI current IP address is one of the IP addresses discovered with the network cards? Yes: Then this is still a valid IP address and we may keep it. Therefore, clear the cidata IP address so that the CI current IP address is not updated unnecessarily.No: Then the CI record has an IP address which is no longer valid. Keep the ip address in the cidata so that the CI record will be updated Patterns Patterns do not use DiscoveryJSONIDSensor. The ip_address for a CI will be set according to the logic in the pattern. Each pattern will have a step where $<class_name>[].ip_address is set. Steps can be added to the pattern or removed to control what IP address should be used and update field ip_address. Pre Orlando Patch 5 CIs discovered via patterns will have their ip_address updated according to what is returned for field ip_address. The ip_address field will be updated each time a CI is discovered via different ip addresses. Extra logic was added to the Horizontal Discovery Sensor to prevent this flipping in PRB1343838. Orlando Patch 5 and newer Function preventFlappingAttributeOnParentClassReturnIreTime() was added to the discovery sensor (PRB1343838). This function checks if ip_address field is already populated on the CI and will not updated it if so. However, this keeps the IP address field from changing at all if already populated. The IP address field needs to be updated manually and the CI will keep the updated value (discovery will no longer updated it). PRB1443223 fixes this in Rome. Rome PRB1443223 added logic to check if the current ip address for the CI is still being discovered. If not, then replace it with the new IP address discovered for the CI. This is similar to what was done with probes. Post discovery Once discovery completes for a CI, a discovery.device.complete event is created. The script action which responds to this event calls script include IPAddressFixup. IPAddressFixup is controlled by the following properties: glide.discovery.enforce_ip_syncglide.discovery.exclude_ip_sync_classesglide.discovery.enforce_unique_ips Note: Post discovery can update the ip_address field for both probes and pattern based discovery. Discovery Properties glide.discovery.enforce_ip_sync glide.discovery.enforce_ip_sync prevents the system from using a discovered IP address in the CI record if the address doesn't match that of a NIC on the device. If this property is true, Discovery checks the IP address returned to determine if it is associated with a NIC on the device. If the address is not associated with a NIC, Discovery uses the IP address from one of the NICs instead. The IP address used will be the first found in the list of IP addresses belonging to the CI, the IP address will be ordered by the ip_address column. glide.discovery.exclude_ip_sync_classes glide.discovery.exclude_ip_sync_classes defines CI classes whose IP addresses should not be substituted if the address returned by Discovery does not match one of the devices' NICs. Use a comma separated list to define multiple classes. By default, the system uses the management IP of a load balancer returned by Discovery in the CI record, rather than substituting it for the IP address of one of the load balancer's NICs. glide.discovery.enforce_unique_ips glide.discovery.enforce_unique_ips ensures that each time a computer, printer, or network gear is discovered, and that device has a valid IP address, then any other devices with the same IP address have their IP address field cleared. Common issues CI IP address field updated after discovery completion by "System" account This is usually due to system property glide.discovery.enforce_ip_sync set to true. This triggers code in script include IPAddressFixup that updates the ip address. Setting glide.discovery.enforce_ip_sync to false should stop this behavior. Alternatively could add the CI class to system property glide.discovery.exclude_ip_sync_classes. IP Address updated each time discovery runs after migrating from probes to patterns Previous to Orlando Patch 5 this is expected behavior. A custom script action triggered by event discovery.device.complete could be put in place to add custom logic on how to update the IP address, or a sa_pattern_prepost_script could perform such action. IP Address not updated by discovery after migrating from probes to patterns Starting in Orlando Patch 5 the ip_address field is no longer updated if it is not empty. One can empty out the ip_address field in a CI and rediscover it so that discovery will populate it. Alternatively, a custom script action or sa_pattern_prepost_script could perform such action. System property glide.discovery.enforce_ip_sync would also ensure that the ip address is updated to a "valid/current" value. This property is explained in a previous part of this document. This issue is fixed in Rome via PRB1443223.