Name

global.DiscoverySmiFabricSensor

Description

Processes SAN fabric topologies per SMI-S.

Script

// Discovery

var DiscoverySmiFabricSensor;

(function() {

var locationId,
  schema = {
  	cmdb_ci_san: {
  		index: [ 'san_id' ],
  		fixup: function(san) { san.location = locationId; san.san_id = san.wwn; }
  	}, cmdb_ci_san_fabric: {
  		index: [ 'fabric_id' ],
  		fixup: function(fabric) { fabric.location = locationId; fabric.fabric_id = fabric.wwn; }
  	}, cmdb_ci_san_endpoint: {
  		index: [ 'endpoint_id', 'san' ],
  		fixup: fixupEndpoint
  	}, cmdb_ci_san_connection: {
  		index: [ 'san', 'endpoint1', 'endpoint2' ],
  		fixup: function(connection) { connection.location = locationId; }
  	}, cmdb_ci_san_zone_set: {
  		index: [ 'zone_set_id', 'fabric' ],
  		fixup: function(zoneset) { zoneset.location = locationId; zoneset.zone_set_id = zoneset.name; }
  	}, cmdb_ci_san_zone: {
  		index: [ 'zone_id', 'zone_set' ],
  		fixup: function(zone) { zone.location = locationId; zone.zone_id = zone.name; }
  	}, cmdb_ci_san_zone_member: {
  		index: [ 'endpoint', 'zone' ],
  		fixup: function(zoneMember) { zoneMember.location = locationId; zoneMember.zone_id = zoneMember.name; }
  	}, cmdb_ci_san_zone_alias: {
  		index: [ 'zone_alias_id', 'zone' ],
  		fixup: function(zoneAlias) { zoneAlias.location = locationId; zoneAlias.zone_id = zoneAlias.name; }
  	}, cmdb_ci_san_zone_alias_member: {
  		index: [ 'zone_alias', 'zone_member' ],
  		fixup: function(zoneAliasMember) { zoneAliasMember.location = locationId; zoneAliasMember.zone_id = zoneAliasMember.name; }
  	}
  },
  args = {
  	schema: schema
  };

DiscoverySmiFabricSensor = {
  process: process
};

function process(result) {
  	args = {
  		results: output,
  		schema: schema,
  		isDebugging: this.isDebugging()
  	};

  args.location = this.getLocationID();
  args.statusId = new DiscoveryStatus(g_probe.getParameter('agent_correlator')+'');

  device = this.getCmdbRecord();
  deviceSysId = device && ('' + device.sys_id);  // device.sys_id only looks like a string.  Convert it to a real string.
  locationId = this.getLocationID();

  // prepare() does a few things to all returned objects and then
  // reattaches them, returning the same JS object produced by the probe.
  args.results = JsonCi.prepare(args);

  JsonCi.writeJsObject(args);
  JsonCi.writeRelationships(args);
}

function fixupEndpoint(endpoint) {
  var fc_port, qc,
  	gr = new GlideRecord('cmdb_ci_fc_port');

  endpoint.location = locationId;
  endpoint.endpoint_id = endpoint.name;

  gr.addQuery('wwpn', endpoint.name);
  gr.query();
  if (!gr.hasNext() && endpoint.portId) {
  	gr = new GlideRecord('cmdb_ci_fc_port');
  	gr.addQuery('device_id', endpoint.portId);
  	gr.addQuery('computer.sys_class_name', 'cmdb_ci_storage_switch');
  	qc = gr.addQuery('computer.name', StorageWWN.parse(endpoint.computerId));
  	qc.addOrCondition('computer.name', endpoint.computerId);
  	qc.addOrCondition('computer.wwnn', StorageWWN.parse(endpoint.computerId));
  	gr.query();
  }

  if (gr.next())
  	endpoint.fc_port = '' + gr.sys_id;
}

})();

Sys ID

41b4036f8f433200f4e30b5437bdee8a

Offical Documentation

Official Docs: