Name
sn_deploy_pipeline.ScanSuiteService
Description
A script that returns all instance scans and ATF scans for test environments in a pipeline
Script
var ScanSuiteService = Class.create();
(function() {
var utils = new DeploymentPipelineGenericUtils();
var pipelineHelpers = {
PIPELINE_TABLE: 'sn_pipeline_pipeline',
ENVIRONMENT_TABLE: 'sn_pipeline_environment',
PIPELINE_ENVIRONMENT_ORDER_TABLE: 'sn_pipeline_pipeline_environment_order',
APP_DEPLOYMENT_PIPELINE_TYPE_SYSID: '268f9c0fb73430100290b9708e11a9de',
ENVIRONMENT_COLUMNS: ['sys_id', 'name', 'instance_type', 'instance_id', 'is_controller', 'instance_url'],
getAppDeploymentPipelines: function() {
var pipelines = [];
var gr = new GlideRecordSecure(this.PIPELINE_TABLE);
gr.addQuery('pipeline_type', this.APP_DEPLOYMENT_PIPELINE_TYPE_SYSID);
gr.addActiveQuery();
gr.query();
while (gr.next()) {
var pipelineObj = {
sys_id: gr.getUniqueValue(),
source_environment: gr.getValue('source_environment')
};
pipelines.push(pipelineObj);
}
return pipelines;
},
getPipelineTestEnvironments: function() {
var pipelines = this.getAppDeploymentPipelines();
var environments = []; // unique list of env sysIds
var environmentFields = this.ENVIRONMENT_COLUMNS;
for (var i = 0; i < pipelines.length; i++) {
var gr = new GlideRecord(this.PIPELINE_ENVIRONMENT_ORDER_TABLE);
gr.addQuery('pipeline', pipelines[i].sys_id);
gr.query();
while (gr.next()) {
var environment = utils.getObjectFromGlideRecord(gr.environment.getRefRecord(), environmentFields);
if (environment.instance_type === ScanSuiteConstants.INSTANCE_TYPE_TEST) {
environments.push(environment);
}
}
}
return environments;
},
getURLCredentials: function(environments) {
var urlAndCredentials = [];
var gr = new GlideRecord(this.ENVIRONMENT_TABLE);
gr.addQuery('sys_id', 'IN', environments.join());
gr.query();
while (gr.next()) {
var urlCreds = {
sys_id: gr.getUniqueValue(),
instance_url: gr.getValue('instance_url'),
credential: gr.instance_credential.getRefRecord()
};
urlAndCredentials.push(urlCreds);
}
return urlAndCredentials;
}
};
/**
* Method used for "/api/sn_deploy_pipeline/admin/scansuites"
* @returns object containing list of scan suites
*/
ScanSuiteService.getScanSuites = function() {
var suites = [];
var instanceScanSuites = new GlideRecordSecure(ScanSuiteConstants.INSTANCE_SCAN_SUITE_TABLE);
var atfScanSuites = new GlideRecordSecure(ScanSuiteConstants.ATF_SCAN_SUITE_TABLE);
instanceScanSuites.addActiveQuery();
instanceScanSuites.query();
atfScanSuites.addActiveQuery();
atfScanSuites.query();
while (instanceScanSuites.next()) {
// The sys_id defined below is tied to the suite sys_id on the test instances. If the ids change anywhere, please ensure
// the logic for the `sn_deploy_pipeline.ScanSuitePopulate` script include is also updated.
suites.push({
sys_id: ScanSuiteService.getUniqueScanSuiteId(instanceScanSuites.getValue('sys_id'), ScanSuiteConstants.INSTANCE_SCAN_SUITE_TABLE),
suite_sys_id: instanceScanSuites.getValue('sys_id'),
suite_name: instanceScanSuites.getValue('name'),
suite_type: ScanSuiteConstants.INSTANCE_SCAN_SUITE
});
}
while (atfScanSuites.next()) {
// The sys_id defined below is tied to the suite sys_id on the test instances. If the ids change anywhere, please ensure
// the logic for the `sn_deploy_pipeline.ScanSuitePopulate` script include is also updated.
suites.push({
sys_id: ScanSuiteService.getUniqueScanSuiteId(atfScanSuites.getValue('sys_id'), ScanSuiteConstants.ATF_SCAN_SUITE_TABLE),
suite_sys_id: atfScanSuites.getValue('sys_id'),
suite_name: atfScanSuites.getValue('name'),
suite_type: ScanSuiteConstants.ATF_SCAN_SUITE
});
}
return {
suites: suites
};
};
/**
* Retrieves scans from the test environments in a pipeline
* @returns {Array} API responses generated by ScanSuiteService.getScanSuites()
*/
ScanSuiteService.getScansFromPipelineEnvs = function() {
var pipelineConfigChecks = new sn_pipeline.PipelineConfigChecks();
// If this instance is not a controller, do not run
if (!pipelineConfigChecks.getCurrentInstanceInfo()['isController']) {
return [];
}
var environments = pipelineHelpers.getPipelineTestEnvironments();
var environmentSysIds = [];
environments.forEach(function(env) {
environmentSysIds.push(env.sys_id);
});
// array: {sys_id, instance_url, credential}
var envURLCredentials = pipelineHelpers.getURLCredentials(environmentSysIds);
// Array of objects containing the instance scan data from the environments in each pipeline
// grouped by environment sysId
var scanSuitesAPIResponses = [];
// Iterate through all environments in each pipeline
envURLCredentials.forEach(function(credential) {
try {
var instanceOutput = RemoteTableData.getInstanceDataFromFlowAction(
credential.instance_url,
credential.credential,
'/api/sn_deploy_pipeline/admin/scansuites'
);
scanSuitesAPIResponses.push({
environment: credential.sys_id,
instanceURL: credential.instance_url,
result: instanceOutput,
isController: false
});
} catch (e) {
gs.error("Error getting scan suites from instance: " + e);
throw new sn_ws_err.ServiceError()
.setStatus(500)
.setMessage(gs.getMessage("Error getting scan suites from instance"));
}
});
return scanSuitesAPIResponses;
};
/**
* Retrieves scans from the test environments in a pipeline
* @param suiteId suite sys_id
* @param suiteTable suite table
* @returns {Array} API responses generated by ScanSuiteService.getScanSuites()
*/
ScanSuiteService.getUniqueScanSuiteId = function(suiteId, suiteTable) {
var digest = new GlideDigest();
return digest.getMD5Hex(suiteId + suiteTable);
};
ScanSuiteService.prototype = {
initialize: function() {},
type: 'ScanSuiteService'
};
})();
Sys ID
a3fd0c945f212110f082532aca7313ae