diff --git a/client/htmls/private/js/dev/awsProduction.js b/client/htmls/private/js/dev/awsProduction.js
index fa0be5d17..e3612f495 100644
--- a/client/htmls/private/js/dev/awsProduction.js
+++ b/client/htmls/private/js/dev/awsProduction.js
@@ -1574,7 +1574,7 @@ var saveblueprint = function(tempType) {
reqBody.providerId = providerId;
reqBody.region = region;
reqBody.name = $('#blueprintNameInput').val();
-
+ reqBody.domainNameCheck = $("input[name='domainNameCheck']:checked").val();
//Checking for docker blueprint images
if (($('.productdiv2.role-Selected').first().attr('templatetype') == "Docker" || $('.productdiv2.role-Selected').first().attr('templatetype') == "docker") && $('#dockerimageemptytr').length > 0) {
//no rows found add empty message
diff --git a/client/htmls/private/js/scriptList.js b/client/htmls/private/js/scriptList.js
index 1d189e8e2..93cdfc55a 100644
--- a/client/htmls/private/js/scriptList.js
+++ b/client/htmls/private/js/scriptList.js
@@ -244,23 +244,6 @@ $('#scriptForm').submit(function(e) {
var formData = new FormData();
formData.append('file', $('input[type=file]')[0].files[0]);
var methodName ='';
- if(scriptEditNew === "edit") {
- if(hiddenFileName === availableFileName) {
- url = '../scripts/update/scriptData';
- methodName = 'PUT';
- reqBody = {
- "scriptId": scriptId,
- "name": name,
- "type": type,
- "description": description,
- "orgDetails": orgDetails,
- "fileId": fileId
- };
- formSave(methodName,url,reqBody);
- return false;
- }
- }
-
var isValidator = $('#scriptForm').valid();
if(isValidator){
e.preventDefault();
diff --git a/server/app/cronjobs/cron-jobs.js b/server/app/cronjobs/cron-jobs.js
index 04e48d3f4..76d28084b 100644
--- a/server/app/cronjobs/cron-jobs.js
+++ b/server/app/cronjobs/cron-jobs.js
@@ -47,7 +47,7 @@ module.exports.start = function start() {
var dockerContainerSyncJobId
= crontab.scheduleJob(dockerContainerSync.getInterval(), dockerContainerSync.execute);
- logger.info('AWS S3 and RDS Provider Sync started with interval ==> '+ awsRDSS3ProviderSync.getInterval());
+ logger.info('AWS S3 and RDS Provider Sync started with interval ==> '+ awsRDSS3ProviderSync.getInterval());
var awsRDSS3ProviderSyncJobId
= crontab.scheduleJob(awsRDSS3ProviderSync.getInterval(), awsRDSS3ProviderSync.execute);
diff --git a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js
index 7a5df35cc..04fceb8fb 100644
--- a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js
+++ b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js
@@ -240,6 +240,7 @@ function saveAndUpdateContainers(containers,containerIds,instanceId,next){
return;
}else{
count++;
+
if(count === containers.length){
next(null,containers);
}
diff --git a/server/app/lib/route53.js b/server/app/lib/route53.js
new file mode 100644
index 000000000..77edc0244
--- /dev/null
+++ b/server/app/lib/route53.js
@@ -0,0 +1,77 @@
+/*
+ Copyright [2016] [Relevance Lab]
+ loLicensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+
+var aws = require('aws-sdk');
+var logger = require('_pr/logger')(module);
+var appConfig = require('_pr/config');
+
+if (process.env.http_proxy) {
+ aws.config.update({
+ httpOptions: {
+ proxy: process.env.http_proxy
+ }
+ });
+}
+
+var route53 = function(awsSettings) {
+
+ var that = this;
+ var params = new Object();
+
+ if (typeof awsSettings.region !== undefined) {
+ params.region = awsSettings.region;
+ }
+ if (typeof awsSettings.access_key !== undefined && typeof awsSettings.secret_key !== undefined) {
+ params.accessKeyId = awsSettings.access_key;
+ params.secretAccessKey = awsSettings.secret_key;
+ }
+ var awsRoute53 = new aws.Route53(params);
+
+ this.listHostedZones = function(params,callback) {
+ awsRoute53.listHostedZones(params, function (err, data) {
+ if (err) {
+ logger.debug("Got listHostedZones info with error: ", err);
+ callback(err, null);
+ return;
+ }
+ callback(null,data );
+ });
+ };
+
+ this.listResourceRecordSets = function(params,callback) {
+ awsRoute53.listResourceRecordSets(params,function (err, data) {
+ if (err) {
+ logger.debug("Got getObject info with error: ", err);
+ callback(err, null);
+ return;
+ }
+ callback(null,data);
+ });
+ };
+
+ this.changeResourceRecordSets = function(params, callback) {
+ awsRoute53.changeResourceRecordSets(params, function (err, data) {
+ if (err) {
+ logger.debug("Got getObject info with error: ", err);
+ callback(err, null);
+ return;
+ }
+ callback(null,data);
+ });
+ };
+}
+
+module.exports = route53;
\ No newline at end of file
diff --git a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js
index c39748e9a..53123dac7 100755
--- a/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js
+++ b/server/app/model/blueprint/blueprint-types/instance-blueprint/aws-blueprint/aws-blueprint.js
@@ -36,6 +36,7 @@ var credentialcryptography = require('_pr/lib/credentialcryptography');
var masterUtil = require('_pr/lib/utils/masterUtil.js');
var instanceLogModel = require('_pr/model/log-trail/instanceLog.js');
var Schema = mongoose.Schema;
+var resourceService = require('_pr/services/resourceService');
var AWSInstanceBlueprintSchema = new Schema({
keyPairId: {
@@ -90,6 +91,7 @@ var AWSInstanceBlueprintSchema = new Schema({
AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) {
var self = this;
+ var domainName = launchParams.domainName;
VMImage.getImageById(self.imageId, function(err, anImage) {
if (err) {
logger.error(err);
@@ -361,7 +363,6 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) {
}
logger.debug('Instance ip upadated');
});
-
instancesDao.updateInstanceState(instance.id, instanceData.State.Name, function(err, updateCount) {
if (err) {
logger.error("error(date instance state err ==>", err);
@@ -543,7 +544,7 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) {
instanceLog.actionStatus = "success";
instanceLog.logs = {
err: false,
- log: "Instance Bootstraped successfully",
+ log: "Instance Bootstrapped successfully",
timestamp: new Date().getTime()
};
instanceLogModel.createOrUpdate(actionLog._id, instance.id, instanceLog, function(err, logData) {
@@ -555,12 +556,19 @@ AWSInstanceBlueprintSchema.methods.launch = function(launchParams, callback) {
logsDao.insertLog({
referenceId: logsReferenceIds,
err: false,
- log: "Instance Bootstraped successfully",
+ log: "Instance Bootstrapped successfully",
timestamp: timestampEnded
});
+ if(typeof domainName !== 'undefined' && domainName !== '' && domainName !== null) {
+ resourceService.updateDomainNameForInstance(domainName, instance.instanceIP, awsSettings, function (err, updateDomainName) {
+ if (err) {
+ logger.error("resourceService.updateDomainNameForInstance Failed ==>", err);
+ return;
+ }
+ logger.debug("Domain name is updated successfully");
+ });
+ }
instancesDao.updateActionLog(instance.id, actionLog._id, true, timestampEnded);
-
-
launchParams.infraManager.getNode(instance.chefNodeName, function(err, nodeData) {
if (err) {
logger.error("Failed chef.getNode", err);
diff --git a/server/app/model/blueprint/blueprint.js b/server/app/model/blueprint/blueprint.js
index 57c2c8bfa..abd405c46 100755
--- a/server/app/model/blueprint/blueprint.js
+++ b/server/app/model/blueprint/blueprint.js
@@ -150,6 +150,11 @@ var BlueprintSchema = new Schema({
parentId: {
type: String,
required: false
+ },
+ domainNameCheck:{
+ type:Boolean,
+ required:false,
+ default:false
}
});
@@ -316,6 +321,7 @@ BlueprintSchema.methods.launch = function(opts, callback) {
envName: envName,
envId: opts.envId,
stackName: opts.stackName,
+ domainName:opts.domainName,
blueprintName: self.name,
orgId: self.orgId,
orgName: project[0].orgname,
@@ -338,6 +344,7 @@ BlueprintSchema.methods.launch = function(opts, callback) {
envName: envName,
envId: opts.envId,
stackName: opts.stackName,
+ domainName:opts.domainName,
blueprintName: self.name,
orgId: self.orgId,
orgName: project[0].orgname,
@@ -426,7 +433,8 @@ BlueprintSchema.statics.createNew = function(blueprintData, callback) {
nexus: blueprintData.nexus,
docker: blueprintData.docker,
version: count,
- parentId: blueprintData.id
+ parentId: blueprintData.id,
+ domainNameCheck: blueprintData.domainNameCheck
};
var blueprint = new Blueprints(blueprintObj);
logger.debug(blueprint);
diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js
index d10402538..10f31decb 100755
--- a/server/app/model/classes/tasks/tasks.js
+++ b/server/app/model/classes/tasks/tasks.js
@@ -503,7 +503,19 @@ taskSchema.statics.getTasksByOrgBgProjectAndEnvId = function(jsonData, callback)
err.status = 500;
return callback(err,null);
}
- callback(null, tasks);
+ if(tasks.docs.length > 0){
+ filterScriptTaskData(tasks.docs,function(err,filterData){
+ if(err){
+ logger.error(err);
+ callback(err, null);
+ return;
+ }
+ tasks.docs = filterData;
+ callback(null,tasks);
+ })
+ }else{
+ callback(null, tasks);
+ }
});
} else {
var queryObj = {
@@ -512,14 +524,24 @@ taskSchema.statics.getTasksByOrgBgProjectAndEnvId = function(jsonData, callback)
projectId: jsonData.projectId,
envId: jsonData.envId
}
-
this.find(queryObj, function(err, data) {
if (err) {
logger.error(err);
callback(err, null);
return;
}
- callback(null, data);
+ if(data.length > 0){
+ filterScriptTaskData(data,function(err,filterData){
+ if(err){
+ logger.error(err);
+ callback(err, null);
+ return;
+ }
+ callback(null,filterData);
+ })
+ }else{
+ callback(null, data);
+ }
});
}
};
@@ -822,6 +844,44 @@ taskSchema.statics.updateTaskConfig = function updateTaskConfig(taskId, taskConf
});
};
+function filterScriptTaskData(data,callback){
+ var taskList = [];
+ for(var i = 0; i < data.length; i++){
+ (function(task){
+ if(task.taskType === 'script'){
+ if(task.taskConfig.scriptDetails.length > 0){
+ for(var j = 0;j < task.taskConfig.scriptDetails.length;j++) {
+ (function (scriptTask) {
+ if(scriptTask.scriptParameters.length > 0){
+ var count = 0;
+ for(var k = 0; k < scriptTask.scriptParameters.length;k++){
+ (function(params){
+ count++;
+ scriptTask.scriptParameters[k] = '';
+ if(count === scriptTask.scriptParameters.length){
+ taskList.push(task)
+ }
+ })(scriptTask.scriptParameters[k]);
+ }
+ }else{
+ taskList.push(task)
+ }
+ })(task.taskConfig.scriptDetails[j]);
+ }
+ }else{
+ taskList.push(task)
+ }
+ }else{
+ taskList.push(task);
+ }
+ })(data[i]);
+ if(taskList.length === data.length){
+ callback(null,taskList);
+ return;
+ }
+ }
+}
+
var Tasks = mongoose.model('Tasks', taskSchema);
module.exports = Tasks;
diff --git a/server/app/routes/v1.0/routes_blueprints.js b/server/app/routes/v1.0/routes_blueprints.js
index 465409bbb..5c6b26acd 100755
--- a/server/app/routes/v1.0/routes_blueprints.js
+++ b/server/app/routes/v1.0/routes_blueprints.js
@@ -390,7 +390,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) {
}
var stackName = null;
-
+ var domainName = null;
if (blueprint.blueprintType === 'aws_cf' || blueprint.blueprintType === 'azure_arm') {
stackName = req.query.stackName;
if (!stackName) {
@@ -399,13 +399,22 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) {
});
return;
}
+ }else {
+ domainName = req.query.domainName;
+ if (!domainName) {
+ res.send(400, {
+ message: "Invalid domainName"
+ });
+ return;
+ }
}
blueprint.launch({
envId: req.query.envId,
ver: req.query.version,
stackName: stackName,
- sessionUser: req.session.user.cn,
+ domainName:domainName,
+ sessionUser: req.session.user.cn
}, function(err, launchData) {
if (err) {
res.status(500).send({
diff --git a/server/app/routes/v1.0/routes_organizations.js b/server/app/routes/v1.0/routes_organizations.js
index 5a356614e..64beafe91 100755
--- a/server/app/routes/v1.0/routes_organizations.js
+++ b/server/app/routes/v1.0/routes_organizations.js
@@ -733,11 +733,10 @@ module.exports.setRoutes = function(app, sessionVerification) {
//validating if user has permission to save a blueprint
logger.debug('Verifying User permission set');
- console.log(req.body);
- console.log(JSON.stringify(req.body));
var user = req.session.user;
var category = 'blueprints';
var permissionto = 'create';
+ var domainNameCheck = false;
var orgId = req.params.orgId;
var bgId = req.params.bgId;
var projectId = req.params.projectId;
@@ -752,7 +751,9 @@ module.exports.setRoutes = function(app, sessionVerification) {
var docker = req.body.blueprintData.docker;
var region = req.body.blueprintData.region;
var blueprintId = req.body.blueprintData.blueprintId;
-
+ if(req.body.blueprintData.domainNameCheck === 'true'){
+ domainNameCheck = true;
+ }
// a temp fix for invalid appurl data. will be removed in next iteration
var tempAppUrls = [];
if (!appUrls) {
@@ -795,7 +796,8 @@ module.exports.setRoutes = function(app, sessionVerification) {
users: users,
blueprintType: blueprintType,
nexus: nexus,
- docker: docker
+ docker: docker,
+ domainNameCheck:domainNameCheck
};
//adding bluerpintID if present (edit mode)
if (blueprintId)
diff --git a/server/app/routes/v1.0/routes_tasks.js b/server/app/routes/v1.0/routes_tasks.js
index 37308b87a..bb1eab464 100755
--- a/server/app/routes/v1.0/routes_tasks.js
+++ b/server/app/routes/v1.0/routes_tasks.js
@@ -26,6 +26,7 @@ var logger = require('_pr/logger')(module);
var taskService = require('_pr/services/taskService.js')
var async = require('async');
var apiUtil = require('_pr/lib/utils/apiUtil.js');
+var Cryptography = require('_pr/lib/utils/cryptography');
@@ -487,20 +488,53 @@ module.exports.setRoutes = function(app, sessionVerification) {
app.post('/tasks/:taskId/update', function(req, res) {
var taskData = req.body.taskData;
- Tasks.updateTaskById(req.params.taskId, taskData, function(err, updateCount) {
- if (err) {
- logger.error(err);
- res.status(500).send(errorResponses.db.error);
- return;
- }
- if (updateCount) {
- res.send({
- updateCount: updateCount
- });
- } else {
- res.send(400);
- }
- });
+ if(taskData.taskType === 'script'){
+ Tasks.getTaskById(req.params.taskId, function(err, scriptTask) {
+ if (err) {
+ logger.error(err);
+ res.status(500).send(errorResponses.db.error);
+ return;
+ }
+ encryptedParam(taskData.scriptDetails,scriptTask.taskConfig.scriptDetails, function (err, encryptedParam) {
+ if (err) {
+ logger.error(err);
+ res.status(500).send("Failed to encrypted script parameters: ", err);
+ return;
+ } else {
+ taskData.scriptDetails = encryptedParam;
+ Tasks.updateTaskById(req.params.taskId, taskData, function (err, updateCount) {
+ if (err) {
+ logger.error(err);
+ res.status(500).send(errorResponses.db.error);
+ return;
+ }
+ if (updateCount) {
+ res.send({
+ updateCount: updateCount
+ });
+ } else {
+ res.send(400);
+ }
+ });
+ }
+ })
+ });
+ }else {
+ Tasks.updateTaskById(req.params.taskId, taskData, function (err, updateCount) {
+ if (err) {
+ logger.error(err);
+ res.status(500).send(errorResponses.db.error);
+ return;
+ }
+ if (updateCount) {
+ res.send({
+ updateCount: updateCount
+ });
+ } else {
+ res.send(400);
+ }
+ });
+ }
});
app.post('/tasks/:taskId/resultUrl/remove', function(req, res) {
@@ -541,3 +575,40 @@ module.exports.setRoutes = function(app, sessionVerification) {
});
};
+
+function encryptedParam(paramDetails,existingParams,callback){
+ var cryptoConfig = appConfig.cryptoSettings;
+ var cryptography = new Cryptography(cryptoConfig.algorithm, cryptoConfig.password);
+ var count = 0;
+ var encryptedList = [];
+ for(var i = 0; i < paramDetails.length; i++){
+ (function(param){
+ if(param.scriptParameters.length > 0){
+ count++;
+ for(var j = 0; j < param.scriptParameters.length; j++){
+ (function(scriptParameter){
+ if(scriptParameter === ''){
+ encryptedList.push(existingParams[i].scriptParameters[j]);
+ }else if(scriptParameter === existingParams[i].scriptParameters[j]){
+ encryptedList.push(scriptParameter);
+ }else {
+ var encryptedText = cryptography.encryptText(scriptParameter, cryptoConfig.encryptionEncoding,
+ cryptoConfig.decryptionEncoding);
+ encryptedList.push(encryptedText);
+ }
+ if(encryptedList.length === param.scriptParameters.length){
+ param.scriptParameters = encryptedList;
+ encryptedList = [];
+ }
+ })(param.scriptParameters[j]);
+ }
+ }else{
+ count++;
+ }
+ if(count === paramDetails.length){
+ callback(null,paramDetails);
+ return;
+ }
+ })(paramDetails[i]);
+ }
+}
diff --git a/server/app/services/resourceService.js b/server/app/services/resourceService.js
index be40c6013..c382f7e5b 100644
--- a/server/app/services/resourceService.js
+++ b/server/app/services/resourceService.js
@@ -19,6 +19,7 @@ var aws = require('aws-sdk');
var resources = require('_pr/model/resources/resources');
var CW = require('_pr/lib/cloudwatch.js');
var S3 = require('_pr/lib/s3.js');
+var Route53 = require('_pr/lib/route53.js');
var EC2 = require('_pr/lib/ec2.js');
var RDS = require('_pr/lib/rds.js');
var resourceCost = require('_pr/model/resource-costs');
@@ -39,6 +40,7 @@ resourceService.bulkUpdateResourceProviderTags=bulkUpdateResourceProviderTags;
resourceService.bulkUpdateUnassignedResourceTags=bulkUpdateUnassignedResourceTags;
resourceService.bulkUpdateAWSResourcesTags=bulkUpdateAWSResourcesTags;
resourceService.getEC2InstancesInfo=getEC2InstancesInfo;
+resourceService.updateDomainNameForInstance=updateDomainNameForInstance;
function getCostForResources(updatedTime,provider,bucketNames,instanceIds,dbInstanceNames,fileName, callback) {
@@ -792,7 +794,7 @@ function getBucketsInfo(provider,orgName,callback) {
var s3Config = {
access_key: decryptedAccessKey,
secret_key: decryptedSecretKey,
- region: "us-east-1"
+ region: "us-west-1"
};
var s3 = new S3(s3Config);
s3.getBucketList(function(err,data){
@@ -867,6 +869,11 @@ function getEC2InstancesInfo(provider,orgName,callback) {
access_key: decryptedAccessKey,
secret_key: decryptedSecretKey
};
+ var awsConfig ={
+ access_key: decryptedAccessKey,
+ secret_key: decryptedSecretKey,
+ region:'us-west-1'
+ }
var regionCount = 0;
var regions = appConfig.aws.regions;
var awsInstanceList=[];
@@ -1195,3 +1202,118 @@ function getStartTime(endTime, period){
var subtractedDate = new Date(subtractedDateInMilliSeconds);
return dateUtil.getDateInUTC(subtractedDate);
}
+
+function updateDomainNameForInstance(domainName,publicIP,awsSettings,callback){
+ var route53 = new Route53(awsSettings);
+ async.waterfall([
+ function(next){
+ route53.listHostedZones({},next);
+ },
+ function(hostedZones,next){
+ if(hostedZones.HostedZones.length > 0){
+ var count = 0,resourceCount = 0;
+ var params = {};
+ var paramList = [];
+ for(var i = 0; i < hostedZones.HostedZones.length; i++) {
+ (function (hostedZone) {
+ count++;
+ route53.listResourceRecordSets({HostedZoneId:hostedZone.Id}, function(err,resourceData) {
+ if(err){
+ next(err,null);
+ }else {
+ for(var j = 0;j < resourceData.ResourceRecordSets.length;j++) {
+ (function (resourceRecord) {
+ resourceCount++;
+ if(resourceRecord.ResourceRecords.length === 1 && resourceRecord.ResourceRecords[0].Value === publicIP){
+ params = {
+ ChangeBatch: {
+ Changes: [
+ {
+ Action: 'UPSERT',
+ ResourceRecordSet: {
+ Name: domainName+'.rlcatalyst.com.',
+ "Type": "CNAME",
+ "TTL": 30,
+ ResourceRecords: [
+ {
+ "Value": resourceRecord.Name
+ }
+ ]
+ }
+ }
+ ]
+ },
+ HostedZoneId: hostedZone.Id
+ }
+ paramList.push(params);
+ }else{
+ for(var k = 0; k < resourceRecord.ResourceRecords.length; k++ ){
+ if(resourceRecord.ResourceRecords[k].Value === publicIP){
+ params = {
+ ChangeBatch: {
+ Changes: [
+ {
+ Action: 'UPSERT',
+ ResourceRecordSet: {
+ Name: domainName+'.rlcatalyst.com.',
+ "Type": "CNAME",
+ "TTL": 30,
+ ResourceRecords: [
+ {
+ "Value": resourceRecord.Name
+ }
+ ]
+ }
+ }
+ ]
+ },
+ HostedZoneId: hostedZone.Id
+ }
+ paramList.push(params);
+ }
+ }
+ }
+ })(resourceData.ResourceRecordSets[j]);
+ }
+ if(count === hostedZones.HostedZones.length && resourceCount === resourceData.ResourceRecordSets.length){
+ next(null,paramList);
+ }
+ }
+ });
+ })(hostedZones.HostedZones[i]);
+ }
+ }else{
+ next(null,null);
+ }
+ },
+ function(paramList,next){
+ if(paramList.length > 0){
+ var count = 0;
+ for(var i = 0; i < paramList.length;i++){
+ (function(params){
+ route53.changeResourceRecordSets(params,function(err,data){
+ count++;
+ if(err){
+ next(err,null);
+ }
+ if(count === paramList.length){
+ next(null,paramList);
+ }
+ });
+ })(paramList[i]);
+
+ }
+ }else{
+ next(null,paramList);
+ }
+ }
+ ],function(err,results){
+ if(err){
+ callback(err,null);
+ return;
+ }
+ callback(null,results);
+ return;
+ })
+}
+