← Home
🔥0 DAY
0 XP
Interview Prep · CMDB & CSDM

CMDB & CSDM
INTERVIEW.

Four scenario lessons on CMDB vs CSDM, Identification and Reconciliation Rules, the CSDM 4.0 domains, and CI Health — each with a runnable simulator trace showing the exact platform behavior.

Pair with the Discovery guide and the IRM architect guide for full architectural coverage.

  1. 1. CMDB vs CSDM — what's the difference?

    The architect asks you to explain, in one minute, how CSDM relates to the CMDB. What do you say?

    How to answer

    • The CMDB is the physical data store — tables under cmdb_ci that hold every Configuration Item and their relationships.
    • CSDM (Common Service Data Model) is the prescriptive blueprint for HOW to use those tables — which classes to populate, which relationships to draw, and how services map to applications and infrastructure.
    • CSDM 4.0 organizes CIs into four domains: Foundation, Design, Build, and Manage — each stage adds richer service context (from raw hardware to consumable business services).
    • You don't 'install' CSDM; you conform to it by populating the right classes (cmdb_ci_service_technical, cmdb_ci_service_offering, cmdb_ci_business_app) with the right relationships.

    Reference script

    // Sample CSDM-aligned service hierarchy
    BusinessApp:   'Payroll'                (cmdb_ci_business_app)
      |-- Depends on -->
    Technical Svc: 'Payroll API'            (cmdb_ci_service_technical)
      |-- Depends on -->
    Application:   'payroll-api v3.2'       (cmdb_ci_appl)
      |-- Runs on  -->
    Server:        'prd-pay-api-01'         (cmdb_ci_linux_server)
    
    // Consumers see the Service Offering, not the tech underneath:
    ServiceOffering: 'Payroll — Gold SLA'   (service_offering)
      |-- Offers   --> BusinessApp 'Payroll'

    Pitfall

    Treating CSDM as a one-time modeling exercise. It's a governance discipline — new apps and services must be added under the same class + relationship rules, or the model drifts within a quarter.

  2. 2. Identification & Reconciliation Rules (IRE)

    Discovery and an import from SCCM both create records for the same laptop. Why do you get duplicates, and how does IRE prevent that?

    How to answer

    • IRE is the single write path into the CMDB — every insert/update from Discovery, Service Graph Connectors, or IntegrationHub goes through it.
    • Each CI class has an Identification Rule listing ordered identifier entries (e.g. serial_number, then name+ip_address) — the first match wins.
    • Reconciliation Rules decide WHICH data source can update WHICH attribute — so SCCM can own OS version while Discovery owns CPU count without stomping each other.
    • Bypassing IRE (direct GlideRecord inserts) is the #1 cause of duplicate CIs — always call the Identification API instead.

    Reference script

    // Correct — payload goes through IRE
    var payload = {
      items: [{
        className: 'cmdb_ci_computer',
        values: {
          serial_number: 'SN-77A31',
          name: 'LT-77A31',
          os: 'Windows 11'
        },
        lookup: []
      }]
    };
    var ire = new sn_cmdb.IdentificationEngine();
    var result = ire.createOrUpdateCI('SCCM', JSON.stringify(payload));
    gs.info(result); // { items:[{sysId,operation:'UPDATE'}] }
    
    // WRONG — bypasses IRE, guarantees duplicates over time
    // var ci = new GlideRecord('cmdb_ci_computer');
    // ci.initialize(); ci.name='LT-77A31'; ci.insert();

    Pitfall

    Forgetting that IRE order matters — if you list `name` before `serial_number`, two laptops with the same hostname (VDI clones) collapse into one CI. Put the strongest unique attribute first.

  3. 3. CSDM 4.0 domains — Foundation, Design, Build, Manage

    A stakeholder asks 'are we CSDM compliant?' — how do you frame the answer using the four domains?

    How to answer

    • Foundation: core reference data (company, location, user, group) — you must have this clean before anything else.
    • Design: how services are shaped — Business Application, Information Object, Application Service (logical, non-instantiated).
    • Build: pipeline artifacts — Product Model, Software Model, Hardware Model — what you're deploying, not what's running.
    • Manage: operational reality — the running instances, Technical Services, Service Offerings, and their supporting infrastructure CIs.

    Reference script

    // A quick CSDM domain audit — count records per anchor class
    var anchors = {
      Foundation: 'core_company',
      Design:     'cmdb_ci_business_app',
      Build:      'cmdb_hardware_product_model',
      Manage:     'cmdb_ci_service_technical'
    };
    for (var d in anchors) {
      var gr = new GlideAggregate(anchors[d]);
      gr.addAggregate('COUNT');
      gr.query(); gr.next();
      gs.info(d + ': ' + gr.getAggregate('COUNT') + ' records');
    }

    Pitfall

    Chasing Manage-domain metrics (thousands of servers) while Foundation is broken. If company/location/user are dirty, every downstream service map inherits the mess.

  4. 4. CI Health — completeness, correctness, compliance

    The CMDB dashboard shows a health score of 62. What three dimensions is that score measuring, and how do you raise it?

    How to answer

    • Completeness: are required attributes populated? Drive this with mandatory fields on Identification Rules and Discovery patterns.
    • Correctness: does the data still match reality? Stale records get flagged by the Duplicate Remediator and staleness rules (last_discovered > N days).
    • Compliance: does the CI conform to CSDM class + relationship rules? Non-conforming CIs are surfaced in the CMDB Data Manager for cleanup.
    • Raise the score by fixing Foundation data first, then tuning IRE identifiers to eliminate duplicates, then adding recurring Discovery schedules for stale CIs.

    Reference script

    // Query the health dashboard's underlying table
    var gr = new GlideRecord('cmdb_health_metric');
    gr.addQuery('ci_class', 'cmdb_ci_linux_server');
    gr.orderByDesc('sys_created_on');
    gr.setLimit(1);
    gr.query();
    if (gr.next()) {
      gs.info('completeness: ' + gr.getValue('completeness_score'));
      gs.info('correctness:  ' + gr.getValue('correctness_score'));
      gs.info('compliance:   ' + gr.getValue('compliance_score'));
    }

    Pitfall

    Gaming the score by lowering the required attribute list. The number goes up; the CMDB gets less useful. Only remove requirements when a downstream process truly doesn't need them.

Keep going