Name

global.CiSchema

Description

Factory for Ci objects

Script

// Discovery
var CiSchema = function() {
  this._tableOptions = {};
};

CiSchema.prototype.type = 'CiSchema';

CiSchema.prototype._DEFAULT_TABLE_OPTIONS = {
  'cmdb_ci_computer': {
  	table: 'cmdb_ci_computer',
  	indices: [ 'name' ],
  	referrals: [
  		{ table: 'cmdb_ci_storage_device', referenceField: 'computer' },
  		{ table: 'cmdb_ci_storage_volume', referenceField: 'computer' },
  		{ table: 'cmdb_ci_disk_partition', referenceField: 'computer', write: false },
  		{ table: 'cmdb_ci_storage_pool', referenceField: 'hosted_by' },
  		{ table: 'cmdb_ci_storage_hba', referenceField: 'computer' },
  		{ table: 'cmdb_ci_storage_controller', referenceField: 'computer' },
  		{ table: 'cmdb_ci_fc_port', referenceField: 'computer' },
  		{ table: 'cmdb_ci_storage_export', referenceField: 'hosted_by' }
  	]
  },
  
  'cmdb_ci_storage_device': {
  	table: 'cmdb_ci_storage_device',
  	indices: ['device_id', 'computer'],
  	referrals: [
  		{ table: 'cmdb_ci_disk_partition', referenceField: 'disk' },
  		{ table: 'cmdb_ci_storage_pool_member', referenceField: 'storage' },
  		{ table: 'cmdb_ci_storage_volume', referenceField: 'provided_by' },
  		{ table: 'cmdb_fc_target' , referenceField: 'fc_disk'},
  		{ table: 'cmdb_fc_initiator' , referenceField: 'fc_disk'}			
  	],
  	relations: [
  		{ table: 'cmdb_ci_storage_volume', nature: 'Exports to::Imports from', isParent: false, write: false, create: true },
  		{ table: 'cmdb_ci_storage_volume', nature: 'Provides::Provided by', isParent: true, write: true, create: true, reconcileExtended: true }
  	]
  },
  
  'cmdb_ci_disk_partition': {
  	// NOTE:  
  	// cmdb_ci_disk_partition table field references the cmdb_ci_storage_device.
  	// The reason for not storing the cmdb_ci_disk_partition name was not explained.  
  	// Setting it to cmdb_ci_disk_partition does not appear to have a negative effect.
  	// However there maybe a use case justifying the deviation from pattern used by the
  	// other entries.
  	table: 'cmdb_ci_storage_device',
  	indices: ['partition_number', 'disk'],
  	referrals: [
  		{ table: 'cmdb_ci_file_system', referenceField: 'provided_by' },
  		{ table: 'cmdb_ci_storage_pool_member', referenceField: 'storage' }
  	]
  },
  
  'cmdb_ci_storage_volume': {
  	table: 'cmdb_ci_storage_volume',
  	indices: [ 'name', 'computer' ],
  	referrals: [
  		{ table: 'cmdb_ci_storage_export', referenceField: 'storage' }
  	],
  	relations: [
  		{ table: 'cmdb_ci_storage_device', nature: 'Exports to::Imports from', write: false, create: true },
  		{ table: 'cmdb_ci_storage_device', nature: 'Provides::Provided by', isParent: false, write: false, create: true }
  	]
  },
  
  'cmdb_ci_storage_pool': {
  	table: 'cmdb_ci_storage_pool',
  	indices: [ 'pool_id', 'hosted_by' ],
  	referrals: [
  		{ table: 'cmdb_ci_storage_pool_member', referenceField: 'pool' },
  		{ table: 'cmdb_ci_storage_pool_member', referenceField: 'storage' },
  		{ table: 'cmdb_ci_storage_pool', referenceField: 'container' },
  		{ table: 'cmdb_ci_storage_volume', referenceField: 'provided_by' },
  		{ table: 'cmdb_ci_storage_device', referenceField: 'provided_by' }
  	]
  },
  		
  'cmdb_ci_storage_pool_member': {
  	table: 'cmdb_ci_storage_pool_member',
  	indices: [ 'pool', 'storage' ]
  },
  
  'cmdb_ci_fc_port': {
  	table: 'cmdb_ci_fc_port',
  	indices: ['computer', 'controller', 'wwpn'],
  	referrals: [
  		{ table: 'cmdb_ci_storage_device', referenceField: 'provided_by', write: false }
  	],
  	relations: [
  		{ table: 'cmdb_ci_storage_controller', nature: 'Controller for::Controlled by', isParent: false }
  	]
  },
  
  'cmdb_ci_storage_hba': {
  	table: 'cmdb_ci_storage_hba',
  	indices: ['computer','device_id'],
  	referrals: [
  		{ table: 'cmdb_ci_fc_port', referenceField: 'controller' },
  	]
  },
  		
  'cmdb_ci_storage_controller': {
  	table: 'cmdb_ci_storage_controller',
  	indices: ['computer','device_id'],
  	referrals: [
  		{ table: 'cmdb_ci_fc_port', referenceField: 'controller' },
  		{ table: 'cmdb_ci_storage_export', referenceField: 'exported_by' }
  	],
  	relations: [
  		{ table: 'cmdb_ci_fc_port', nature: 'Controller for::Controlled by' }
  	]
  },
  
  'cmdb_ci_storage_export': {
  	table: 'cmdb_ci_storage_export',
  	indices: ['storage', 'exported_by'],
  },
  
  'cmdb_ci_wbem_service': {
  	table: 'cmdb_ci_wbem_service',
  	indices: ['cim_object_path'],
  	referrals: [
  		{ table: 'cmdb_ci_cim_profile', referenceField: 'cimom' },
  	]
  },
  
  'cmdb_ci_cim_profile': {
  	table: 'cmdb_ci_cim_profile',
  	indices: ['name', 'version', 'cimom']
  },
  
  'cmdb_ci_san': {
  	table: 'cmdb_ci_san',
  	indices: [ 'san_id' ],
  	referrals: [
  		{ table: 'cmdb_ci_storage_switch', referenceField: 'san', deleteMissing: false },
  		{ table: 'cmdb_ci_san_fabric', referenceField: 'san', deleteMissing: false },
  		{ table: 'cmdb_ci_san_endpoint', referenceField: 'san', deleteMissing: false },
  		{ table: 'cmdb_ci_san_connection', referenceField: 'san', deleteMissing: false },
  	]
  },

  cmdb_ci_storage_switch: {
  	table: 'cmdb_ci_storage_switch',
  	referrals: [
  		{ table: 'cmdb_ci_fc_port', referenceField: 'computer' }
  	],
  	relations: [
  		{ table: 'cmdb_ci_computer', nature: 'Uses::Used by', isParent: false }
  	]
  },

  'cmdb_ci_san_fabric': {
  	table: 'cmdb_ci_san_fabric',
  	indices: [ 'fabric_id' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone_set', referenceField: 'fabric' }
  	]
  },
  
  'cmdb_ci_san_zone_set': {
  	table: 'cmdb_ci_san_zone_set',
  	indices: [ 'zone_set_id', 'fabric' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone', referenceField: 'zone_set' }
  	]
  },
  
  'cmdb_ci_san_zone': {
  	table: 'cmdb_ci_san_zone',
  	indices: [ 'zone_id', 'zone_set' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone_member', referenceField: 'zone' },
  		{ table: 'cmdb_ci_san_zone_alias', referenceField: 'zone' }
  	]
  },
  
  'cmdb_ci_san_zone_member': {
  	table: 'cmdb_ci_san_zone_member',
  	indices: [ 'endpoint', 'zone' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone_alias_member', referenceField: 'zone_member' }
  	]
  },
  
  'cmdb_ci_san_zone_alias': {
  	table: 'cmdb_ci_san_zone_alias',
  	indices: [ 'zone_alias_id', 'zone' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone_alias_member', referenceField: 'zone_alias' }
  	]
  },
  
  'cmdb_ci_san_zone_alias_member': {
  	table: 'cmdb_ci_san_zone_alias_member',
  	indices: [ 'zone_alias', 'zone_member' ]
  },
  
  'cmdb_ci_san_endpoint': {
  	table: 'cmdb_ci_san_endoint',
  	indices: [ 'endpoint_id', 'san' ],
  	referrals: [
  		{ table: 'cmdb_ci_san_zone_member', referenceField: 'endpoint' },
  		{ table: 'cmdb_ci_san_connection', referenceField: 'endpoint1' },
  		{ table: 'cmdb_ci_san_connection', referenceField: 'endpoint2' }
  	]
  },
  		
  'cmdb_ci_san_connection': {
  	table: 'cmdb_ci_san_connection',
  	indices: [ 'san', 'endpoint1', 'endpoint2' ]
  },
  
  'cmdb_fc_target' : {
  	table: 'cmdb_fc_target',
  	indices: ['wwnn', 'wwpn', 'fc_disk'],
  	
  },
  
  'cmdb_fc_initiator' : {
  	table: 'cmdb_fc_initiator',
  	indices: ['wwnn', 'wwpn', 'fc_disk'],
  	
  },

  /** 
   * PRB948359
   * Supresses error:
   * 'Referral from 'Ci {computer:Ci {sys_id:'xxxx',table:'cmdb_ci_win_cluster'},table:'cmdb_ci_disk'}' 
   * to 'Ci {sys_id:'xxxx'',table:'cmdb_ci_win_cluster'}' not valid based on Ci schema' 
   */
  'cmdb_ci_cluster' : {
  	table: 'cmdb_ci_cluster',
  	indices: [ 'name' ],
  	referrals: [
  		{ table: 'cmdb_ci_storage_device', referenceField: 'computer' }
  	]
  },
};

/**
* Creates a Ci with options & schema pre-configured based on table.
*
* @param string|GlideRecord|Ci Either the table name or a record (Ci or GlideRecord).
* @param {}|undefined data The data hash to initiate the new Ci with.
*/
CiSchema.prototype.createCi = function(table, data) {
  if (typeof data === 'undefined') {
  	if (table instanceof GlideRecord) {
  		data = table;
  		table = ''+table.getTableName();
  	} else if (table instanceof Ci) {
  		data = table;
  		table = table.table;
  	} else {
  		data = {};
  	}
  }
  
  var options = this.getTableOptions(table);
  var ci = new Ci(options, data);
  return ci;
};
  
CiSchema.prototype.getTableOptions = function(table) {
  var tables = Ci.getTableHeirarchy(table);
  var options = null;

  for (var i = 0; i < tables.length; ++i) {
  	var ciTable = tables[i];
  	if (typeof this._DEFAULT_TABLE_OPTIONS[ciTable] !== 'undefined') {
  		options = this._DEFAULT_TABLE_OPTIONS[ciTable];
  		break;
  	} else if (typeof this._tableOptions[ciTable] !== 'undefined') {
  		options = this._tableOptions[ciTable];
  		break;
  	}
  }
  
  if (options === null) {
  	options = { table: table };
  } else if (options.table !== table) {
  	// clone and cache against this instance
  	options = JSUtil.union(options);
  	options.table = table;
  	this._tableOptions[table] = options;
  }
  
  return options;
};

Sys ID

c54c989f37612100dcd48c00dfbe5df4

Offical Documentation

Official Docs: