Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Server and Application relation not getting created.

HrishabhKumar
Giga Contributor

Issue:

VM "HPG0000009499" is related to service, in svc_ci_assoc table, but corresponding server "hpg0000009499" is not.

vm1.png

 

 
 

Analysis:

1) VM "HPG0000009499" is discovered correctly, and it has all the tags required for tag-based mapping. i.e. applicationID, applicationName.

2) VM to Service, relation is created automatically in svc_ci_assoc table.

3) VM is part of the Service Map as well.

4) Most of the VMs and servers are tagged correctly, there is issue with few only.

 

Requirement:

server to service relation should also get created, and server should be a part of the service map as well. 

 

 

 

3 REPLIES 3

Naveen20
ServiceNow Employee

Try 

Business Rule on svc_ci_assoc — auto-propagates to the server whenever a VM gets associated.

Table: svc_ci_assoc | When: After Insert | Filter Condition: ci_id.sys_class_nameLIKEvm_instance

(function executeRule(current, previous) {
    // Find server related to this VM
    var rel = new GlideRecord('cmdb_rel_ci');
    rel.addQuery('parent', current.ci_id);
    rel.addQuery('type.name', 'Hosted on::Hosts'); // verify this in your instance
    rel.query();

    while (rel.next()) {
        var childClass = rel.child.sys_class_name.toString();
        if (childClass.indexOf('server') == -1) continue;

        // Skip if association already exists
        var dup = new GlideRecord('svc_ci_assoc');
        dup.addQuery('ci_id', rel.child);
        dup.addQuery('service_id', current.service_id);
        dup.query();
        if (dup.hasNext()) continue;

        // Create server-to-service association
        var assoc = new GlideRecord('svc_ci_assoc');
        assoc.setValue('ci_id', rel.getValue('child'));
        assoc.setValue('service_id', current.getValue('service_id'));
        assoc.setValue('ignore_errors', false);
        assoc.insert();
    }
})(current, previous);

For existing gaps, run this once as a background script (same logic but wrapped in a query on all VM-type svc_ci_assoc records).

One thing to confirm first — run this to get your exact relationship type name:

var r = new GlideRecord('cmdb_rel_ci');
r.addQuery('parent.name', 'HPG0000009499');
r.setLimit(5);
r.query();
while (r.next()) gs.info(r.type.getDisplayValue() + ' -> ' + r.child.name + ' [' + r.child.sys_class_name + ']');

Then update the type.name filter in the BR accordingly.

Hi @Naveen20  I don't want to build something new, just want to know why it not working of the mentioned server. For most of the server everything is working fine. 

I'm sure there is a mechanism which is working correctly for most of them. I'm just not sure what is that mechanism i.e. a BR, scheduled job, flow of anything else.

check these in order:

  • Business Rules on svc_ci_assoc — go to sys_script_list.do?sysparm_query=collectionSTARTSWITHsvc_ci_assoc^active=true and look for any insert/after BRs
  • Scheduled Jobs — search sysauto_script_list.do for keywords like svc_ci_assoc, service_map, or service_ci
  • Flow Designer — check for flows triggered by svc_ci_assoc or cmdb_rel_ci
  • Service Mapping patterns — if you're using Service Mapping/Discovery, the mapping engine itself may be creating these

2. Once you find it, check why this server is excluded:

For the working server (hpg0000009904 from your screenshot), look at the svc_ci_assoc record's Created by field — it says system. That tells you it was created by a system process (BR, scheduled job, or discovery), not manually.

Check the sys_audit or sys_history_line for that working record to see exactly what script or process inserted it.

3. Quick diagnostic for the failing server:

Compare the two servers side by side — the one that works vs hpg0000009499:

  • Is the VM-to-server relationship (cmdb_rel_ci) present for both?
  • Are the CI attributes identical (class, operational status, install status, etc.)?
  • Is the failing server marked as a duplicate or has a different install status?
  • Are the tags (applicationID, applicationName) on the server record itself, or only on the VM