Name

sn_pipeline.PipelineUtils

Description

Utility class for Pipeline plugin.

Script

var PipelineUtils = Class.create();
PipelineUtils.prototype = {
  initialize: function() {},
  /**
   * Determines if the current instance is a controller
   * @returns {boolean}
   */
  currentInstanceIsController: function() {
  	var controllerData = this.getControllerData();

  	if (!controllerData.controllerIsDefined || !controllerData.environment) { return true; }

  	return controllerData.environment.getValue("instance_id").trim() === gs.getProperty("instance_id").trim();
  },
  /**
   * Determines if the current instance is a controller
   * @returns {Object}
   */
  getControllerData: function() {
  	var controllerEnv = this.getEnvironmentControllerRecord();

  	if (!controllerEnv) {
  		return {
  			controllerIsDefined: false,
  			environment: null,
  		};
  	}

  	return {
  		controllerIsDefined: true,
  		environment: controllerEnv,
  	};
  },
  /**
   * Queries sn_pipeline_environment table for a controller record
   * @returns {Object}
   */
  getEnvironmentControllerRecord: function() {
  	var pipelineEnvironmentGR = new GlideRecord(PipelineConstants.table.ENVIRONMENT_TABLE);
  	pipelineEnvironmentGR.addQuery("is_controller", true);
  	pipelineEnvironmentGR.query();
  	
  	if (pipelineEnvironmentGR.next()) {
  		return pipelineEnvironmentGR;
  	}
  	
  	return null;
  },
  /**
   * Queries sn_pipeline_environment table and converts them to JSON
   * @param {Array} [columns] array of strings for column names
   * @returns {Array}
   */
  getEnvironments: function(columns) {
  	var pipelineEnvironmentGR = new GlideRecord(PipelineConstants.table.ENVIRONMENT_TABLE);
  	pipelineEnvironmentGR.query();

  	var environments = [];

  	while (pipelineEnvironmentGR.next()) {
  		var pipelineEvnironmentObj = this.getObjectFromGlideRecord(pipelineEnvironmentGR, columns);
  		environments.push(pipelineEvnironmentObj);
  	}

  	return environments;
  },
  /**
   * Queries sn_pipeline_environment for given instanceId
   * @param {String} instanceId string
   * @returns {Object}
   */
  getEnvironmentByInstanceId: function(instanceId) {
  	var pipelineEnvironmentGR = new GlideRecord(PipelineConstants.table.ENVIRONMENT_TABLE);
  	pipelineEnvironmentGR.addQuery("instance_id", instanceId);
  	pipelineEnvironmentGR.query();

  	if (pipelineEnvironmentGR.next()) {
  		return this.getObjectFromGlideRecord(pipelineEnvironmentGR, PipelineConstants.columns.ENVIRONMENT_COLUMNS);
  	}

  	return {};
  },
  /**
   * Queries sn_pipeline_pipeline_type for given pipeline type name
   * @param {String} name string
   * @param {Array} [fields] optional array of fields to return
   * @returns {Object}
   */
  getPipelineTypeByName: function(name, fields) {
  	var pipelineTypeGR = new GlideRecord(PipelineConstants.table.PIPELINE_TYPE);
  	pipelineTypeGR.addQuery("name", name);
  	pipelineTypeGR.query();

  	if (pipelineTypeGR.next()) {
  		var pipelineTypeObject = this.getObjectFromGlideRecord(pipelineTypeGR, fields || PipelineConstants.columns.PIPELINE_TYPE_COLUMNS);
  		var roles = pipelineTypeObject[PipelineConstants.formFields.ROLES_REQUIRED_IN_SOURCE_ENVIRONMENT];
  		var permissionSets = pipelineTypeObject[PipelineConstants.formFields.PERMISSION_SETS_REQUIRED_IN_SOURCE_ENVIRONMENT];
  		
  		if(roles) {
  			var userRoleGR = new GlideRecord("sys_user_role");
  			var roleNames = [];
  			userRoleGR.addQuery("sys_id", "IN", roles);
  			userRoleGR.query();

  			while(userRoleGR.next()) {
  				roleNames.push(userRoleGR.getValue("name"));
  			}

  			pipelineTypeObject[PipelineConstants.formFields.ROLES_REQUIRED_IN_SOURCE_ENVIRONMENT] = roleNames;
  		}

  		if (permissionSets) {
  			pipelineTypeObject[PipelineConstants.formFields.PERMISSION_SETS_REQUIRED_IN_SOURCE_ENVIRONMENT] = permissionSets.split(",");
  		}

  		return pipelineTypeObject;
  	}

  	return {};
  },
  /**
   * Creates JSON object from GlideRecord Object
   * @param {GlideRecord} gr
   * @param {Array} [fields] if fields is not passed in, function will return all fields
   * @returns {Object}
   */
  getObjectFromGlideRecord: function(gr, fields) {
  	if (!gr) {
  		return {};
  	}

  	var isNonEmptyArray = Array.isArray(fields) && fields.length > 0;
  	var resultObj = {};

      if (isNonEmptyArray) {

  		fields.forEach(function(field) {
  			resultObj[field] = gr.getValue(field);
  		});

  	} else {

  		for (var prop in gr) {
  			if (gr[prop]) {
  				resultObj[prop] = gr.getValue(prop);
  			}
  		}

  	}

  	return resultObj;
  },
  /**
   * Queries sn_pipeline_pipeline table
   * @param {string} sourceInstanceId
   * @param {string} pipelineType
   * @returns {GlideRecord}
   */
  getPipelineforInstanceIdOfType: function(sourceInstanceId, pipelineTypeName) {
  	if (!pipelineTypeName || !sourceInstanceId) {
  		return null;
  	}
  	
  	var pipelineGR = new GlideRecord(PipelineConstants.table.PIPELINE_TABLE);
  	pipelineGR.addActiveQuery();
  	pipelineGR.addQuery('pipeline_type.name', pipelineTypeName);
  	pipelineGR.addQuery('source_environment.instance_id', sourceInstanceId);
  	pipelineGR.query();

  	if (pipelineGR.next()) {
  		return pipelineGR;
  	}
  	
  	return null;
  },
  /**
   * Queries sn_pipeline_pipeline table for a valid pipeline for a given instance_id and pipeline type
   * @param {string} sourceInstanceId
   * @param {string} pipelineType
   * @returns {boolean}
   */
  isSourceInstanceInPipeline: function(sourceInstanceId, pipelineTypeName) {
  	if (!pipelineTypeName || !sourceInstanceId) {
  		return false;
  	}
  	
  	var pipelineGR = new GlideRecord(PipelineConstants.table.PIPELINE_TABLE);
  	pipelineGR.addActiveQuery();
  	pipelineGR.addQuery('pipeline_type.name', pipelineTypeName);
  	pipelineGR.addQuery('source_environment.instance_id', sourceInstanceId);
  	pipelineGR.query();

  	if (pipelineGR.next()) {
  		var pipelineEnvironmentOrderGR = new GlideRecord(PipelineConstants.table.PIPELINE_ENVIRONMENT_ORDER_TABLE);
  		
  		pipelineEnvironmentOrderGR.get('pipeline', pipelineGR.getUniqueValue());
  		
  		return pipelineEnvironmentOrderGR.isValidRecord();
  	}
  	
  	return false;
  },
  /**
   * Triggers validate_controller action
   * @param {String} url
   * @param {GlideRecord} credential_alias
   * @param {String} sourceInstanceId
   * @param {String} pipelineTypeName
   * @returns {Object}
   */
  getValidateControllerResponse: function(url, credential_alias, sourceInstanceId, pipelineTypeName) {
  	var inputs = {
  		url: url,
  		credential: credential_alias,
  		source_instance_id: sourceInstanceId,
  		pipeline_type_name: pipelineTypeName
  	};
  	
  	return this.getPipelineActionResponse(PipelineConstants.flow.environmentValidation.actions.CONTROLLER, inputs);
  },
  /**
   * Triggers validate_connection action
   * @param {String} url
   * @param {GlideRecord} credential_alias
   * @returns {Object}
   */
  getValidateConnectionResponse: function(url, credential_alias) {
  	var inputs = {
  		url: url,
  		credential: credential_alias
  	};
  	
  	return this.getPipelineActionResponse(PipelineConstants.flow.environmentValidation.actions.CONNECTION, inputs);
  },
  /**
   * Triggers pipeline actions from a list of accepted actions
   * @param {String} actionName
   * @param {Object} inputs
   * @returns {Object}
   */
  getPipelineActionResponse: function(actionName, inputs) {
  	var acceptedActionNames = [
  		PipelineConstants.flow.environmentValidation.actions.CONTROLLER,
  		PipelineConstants.flow.environmentValidation.actions.CONNECTION,
  		PipelineConstants.flow.runner.actions.RUNNER_ACTION,
  		PipelineConstants.flow.pipelineType.actions.GET_PIPELINE_TYPE_ACTION,
  		PipelineConstants.flow.authorization.actions.GET_AUTHORIZED_REQUEST,
  		PipelineConstants.flow.adminEmail.actions.GET_ADMIN_CONTACT
  	];
  	
  	if (acceptedActionNames.indexOf(actionName) === -1) {
  		throw 'Unsupported action name';
  	}

  	try {
  		var actionResult = sn_fd.FlowAPI.getRunner()
  			.action(actionName)
  			.inForeground()
  			.withInputs(inputs)
  			.run();
  	
  		return actionResult.getOutputs();
  	} catch (e) {
  		return {
  			error_code: 1,
  			error_message: e.getMessage()
  		};
  	}
  },
  /**
   * Removes trailing slash from URLs
   * @param {string} url
   * @returns {string}
   */
  removeTrailingSlash: function(url) {
      var regexPattern = /\/+$/;

      return regexPattern.test(url) ? url.replace(regexPattern, '') : url;
  },

  type: 'PipelineUtils'
};

Sys ID

ca8b0dad53753010b846ddeeff7b120f

Offical Documentation

Official Docs: