Trouble with the IdentificationEngine API (createOrUpdateCI())
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2023 09:56 AM
I am trying to use this API resource to create some CIs through a scripted REST endpoint, but there are two issues.
- When I send CI properties for a firewall and one of its interfaces, both CIs are created, but the manufacturer field of the firewall is blank. ServiceNow responds (I also tried sending the sys_id of the "Cisco" entry from the core_company table):
"info": [
{
"code": "SKIPPED_SETTING_REFERENCE_FIELD",
"message": "Table does not have a display value column: [core_company]. Skipped setting the reference field: [class: cmdb_ci_ip_firewall] [field: manufacturer] [value: Cisco]"
}
]
- The JSON looks like this:
[
{
"items": [
{
"className": "cmdb_ci_ip_firewall",
"values": {
"os_name": "Cisco Adaptive Security Appliance Version 9.8(4)29",
"host_name": "asa01",
"ip_address": "10.0.0.1",
"name": "asa01"
},
"display_values": {
"manufacturer": "b7e831bdc0a80169015ae101f3c4d6cd"
},
"internal_id": "314",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
},
{
"className": "cmdb_ci_ni_interface",
"values": {
"name": "id[06]",
"short_description": "Discovered by agent 20 via NSP collector",
"serial_number": "123456"
},
"internal_id": "18705013",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
}
]
}
]
- Using that same JSON, but adding a relationship, I get back:
"errors": [
{
"error": "INVALID_INPUT_DATA",
"message": "Payload relations '{\"parent\":314,\"child\":18705013,\"type\":\"Owns::Owned by\",\"sys_rel_source_info\":{\"source_recency_timestamp\":\"3/26/2023 2:35:17 PM\",\"source_name\":\"My custom source\"}}' has invalid parent record index: [314]"
},
{
"error": "INVALID_INPUT_DATA",
"message": "Payload relations '{\"parent\":314,\"child\":18705013,\"type\":\"Owns::Owned by\",\"sys_rel_source_info\":{\"source_recency_timestamp\":\"3/26/2023 2:35:17 PM\",\"source_name\":\"My custom source\"}}' has invalid child record index: [18705013]"
}
]
- With the relations node, the JSON looks like this:
[
{
"items": [
{
"className": "cmdb_ci_ip_firewall",
"values": {
"os_name": "Cisco Adaptive Security Appliance Version 9.8(4)29",
"host_name": "asa01",
"ip_address": "10.0.0.1",
"name": "asa01"
},
"display_values": {
"manufacturer": "b7e831bdc0a80169015ae101f3c4d6cd"
},
"internal_id": "314",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
},
{
"className": "cmdb_ci_ni_interface",
"values": {
"name": "id[06]",
"short_description": "Discovered by agent 20 via NSP collector",
"serial_number": "123456"
},
"internal_id": "18705013",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
}
],
"relations": [
{
"parent": "314",
"type": "Owns::Owned by",
"sys_rel_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
},
"child": "18705013"
}
]
}
]
Can anyone provide insight into these issues? How should I be pass the manufacturer reference field value and what is wrong with the parent and child identifiers in my relationship? Where should those values come from?
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-17-2023 09:12 AM
When using the "internal_id" fields you need switch out your "parent" and "child" in relations with "parent_id" and "child_id".
var payload = {
"items": [
{
"className": "cmdb_ci_ip_firewall",
"values": {
"os_name": "Cisco Adaptive Security Appliance Version 9.8(4)29",
"host_name": "asa01",
"ip_address": "10.0.0.1",
"name": "asa01"
},
"display_values": {
"manufacturer": "b7e831bdc0a80169015ae101f3c4d6cd"
},
"internal_id": "314",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
},
{
"className": "cmdb_ci_ni_interface",
"values": {
"name": "id[06]",
"short_description": "Discovered by agent 20 via NSP collector",
"serial_number": "123456"
},
"internal_id": "18705013",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
}
],
"relations": [
{
"parent_id": "314",
"type": "Owns::Owned by",
"sys_rel_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
},
"child_id": "18705013"
}
]
};
var input = JSON.stringify((payload));
var output = sn_cmdb.IdentificationEngine.identifyCIEnhanced('Other Automated', input, {});
gs.info(JSON.stringify(JSON.parse(output), null, 2));
The "parent" and "child" are looking for Items order. See following example.
var payload = {
"items": [
{
"className": "cmdb_ci_ip_firewall",
"values": {
"os_name": "Cisco Adaptive Security Appliance Version 9.8(4)29",
"host_name": "asa01",
"ip_address": "10.0.0.1",
"name": "asa01"
},
"display_values": {
"manufacturer": "b7e831bdc0a80169015ae101f3c4d6cd"
},
"internal_id": "314",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
},
{
"className": "cmdb_ci_ni_interface",
"values": {
"name": "id[06]",
"short_description": "Discovered by agent 20 via NSP collector",
"serial_number": "123456"
},
"internal_id": "18705013",
"sys_object_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
}
}
],
"relations": [
{
"parent": "0",
"type": "Owns::Owned by",
"sys_rel_source_info": {
"source_recency_timestamp": "3/26/2023 2:35:17 PM",
"source_name": "My custom source"
},
"child": "1"
}
]
};
var input = JSON.stringify((payload));
var output = sn_cmdb.IdentificationEngine.identifyCIEnhanced('Other Automated', input, {});
gs.info(JSON.stringify(JSON.parse(output), null, 2));