From 14f806b16f64a39db931d1c1306573dc4733a5c6 Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Mon, 22 Aug 2016 18:28:56 +0530 Subject: [PATCH 1/8] Provider Remove Issue --- server/app/model/classes/tasks/tasks.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/app/model/classes/tasks/tasks.js b/server/app/model/classes/tasks/tasks.js index 55198fa8d..7f57825b2 100755 --- a/server/app/model/classes/tasks/tasks.js +++ b/server/app/model/classes/tasks/tasks.js @@ -468,7 +468,8 @@ taskSchema.statics.createNew = function(taskData, callback) { taskType: TASK_TYPE.SCRIPT_TASK, nodeIds: taskData.nodeIds, scriptTypeName: taskData.scriptTypeName, - scriptDetails: taskData.scriptDetails + scriptDetails: taskData.scriptDetails, + isSudo: taskData.isSudo }); } else { callback({ From 4faaa67220f74d1996872f176206da20bd40a4ea Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Wed, 24 Aug 2016 19:05:33 +0530 Subject: [PATCH 2/8] CAT-2263 and CAT-2264 Fixed --- .../DockerContainerSync.js | 126 +++------ server/app/lib/utils/masterUtil.js | 267 +++++++++--------- server/app/model/classes/instance/instance.js | 20 +- server/app/routes/v1.0/routes_chef.js | 15 +- .../app/routes/v1.0/routes_providercommon.js | 13 +- 5 files changed, 201 insertions(+), 240 deletions(-) diff --git a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js index e94ab333f..91ab044c1 100644 --- a/server/app/cronjobs/docker-container-sync/DockerContainerSync.js +++ b/server/app/cronjobs/docker-container-sync/DockerContainerSync.js @@ -16,101 +16,43 @@ DockerContainerSync.execute = dockerContainerSync; module.exports = DockerContainerSync; -function dockerContainerSync(){ - async.parallel({ - containerDataSync: function(callback){ - containerDao.getAllContainers(function(err,containers){ - if(err){ - logger.error(err); - callback(err,null); - return; - }else if(containers.length > 0){ - var count = 0; - for(var i = 0;i < containers.length; i++){ - (function(container){ - instancesDao.getInstanceById(container.instanceId,function(err,instances){ - count++; - if(err) { - logger.error(err); - return; - }else if(instances.length > 0){ - if(count === containers.length){ - callback(null,containers); - return; - } - }else{ - containerDao.deleteContainerByInstanceId(container.instanceId,function(err,deleteStatus){ - if(err){ - logger.error(err); - return; - } - if(count === containers.length){ - callback(null,containers); - return; - } - }) - } - }) - })(containers[i]); - } - }else{ - logger.info("Containers are not present in catalyst for instance sync"); - callback(null,containers); - return; - } - }) - }, - instanceDataSync: function(callback){ - MasterUtils.getAllActiveOrg(function(err, orgs) { - if(err) { - logger.error(err); - callback(err,null); - return; - }else if(orgs.length > 0){ - for(var i = 0; i < orgs.length; i++){ - (function(org){ - instancesDao.getInstancesWithContainersByOrgId(org.rowid, function(err, instances) { - if(err) { - logger.error(err); - callback(err,null); - return; - }else if(instances.length > 0){ - var count = 0; - for(var j = 0; j < instances.length; j++){ - (function(instance){ - count++; - aggregateDockerContainerForInstance(instance) - })(instances[j]); - } - if(count === instances.length){ - callback(null,instances); - return; - } - }else{ - logger.info("There is no Instance in "+org.orgname+" Organization who have docker installed"); - callback(null,instances); - return; - } - }); - - })(orgs[i]); - } - - }else{ - logger.info("There is no Active Organization for Docker Container Sync"); - callback(null,orgs); - return; - } - }); - } - },function(err,results){ - if(err){ +function dockerContainerSync() { + MasterUtils.getAllActiveOrg(function (err, orgs) { + if (err) { logger.error(err); + return; + } else if (orgs.length > 0) { + for (var i = 0; i < orgs.length; i++) { + (function (org) { + instancesDao.getInstancesWithContainersByOrgId(org.rowid, function (err, instances) { + if (err) { + logger.error(err); + return; + } else if (instances.length > 0) { + var count = 0; + for (var j = 0; j < instances.length; j++) { + (function (instance) { + count++; + aggregateDockerContainerForInstance(instance) + })(instances[j]); + } + if (count === instances.length) { + return; + } + } else { + logger.info("There is no Instance in " + org.orgname + " Organization who have docker installed"); + return; + } + }); + })(orgs[i]); + } + } else { + logger.info("There is no Active Organization for Docker Container Sync"); + return; } - logger.info("Docker Container Sync job is successfully executed"); - return; }); -} +}; + function aggregateDockerContainerForInstance(instance){ logger.info("Docker Container Sync started for Instance IP "+instance.instanceIP); diff --git a/server/app/lib/utils/masterUtil.js b/server/app/lib/utils/masterUtil.js index 0b4afa428..c8409ba65 100755 --- a/server/app/lib/utils/masterUtil.js +++ b/server/app/lib/utils/masterUtil.js @@ -876,169 +876,172 @@ var MasterUtil = function() { // Return all settings for User. this.getAllSettingsForUser = function(loggedInUser, callback) { - var userid; - var teams = []; - var orgs = []; - var projects = []; - var bunits = []; var returnObj = []; var catObj = {}; - var orgObj = {}; - var loopCount = 0; d4dModelNew.d4dModelMastersUsers.find({ - loginname: loggedInUser - }, function(err, users) { - if (users) { - for (var x = 0; x < users.length; x++) { - (function(usr) { - if (users[usr].id === '7') { - logger.debug("Got User"); - catObj = { - userid: users[usr].rowid, - teams: [], - orgs: [], - projects: [], - bunits: [] - }; - logger.debug("User Id: ", users[usr].rowid); - d4dModelNew.d4dModelMastersTeams.find({ - loginname_rowid: { - $regex: users[usr].rowid - }, - id: "21" - }, function(err, team) { - if (err) { - callback(err, null); - return; - } - - logger.debug("Available team: ", JSON.stringify(team)); - if (typeof team === 'undefined' || team.length <= 0) { - callback(null, returnObj); - return; - } - if (team) { - for (var tm = 0; tm < team.length; tm++) { - if (team[tm].id === '21') { - logger.debug("Inside team : ", team[tm].rowid); - teams.push(team[tm].rowid); - - var orgTm = team[tm].orgname_rowid[0]; - if (!orgObj[orgTm]) { - orgObj[orgTm] = true; - } - } - } - } - logger.debug("Team array: ", JSON.stringify(teams)); - catObj.teams = teams; - var allObj = Object.keys(orgObj); - for (var tmOrg = 0; tmOrg < allObj.length; tmOrg++) { - loopCount++; - d4dModelNew.d4dModelMastersTeams.find({ - orgname_rowid: allObj[tmOrg], - rowid: { - $in: catObj.teams - }, - id: "21" - }, function(err, allTeams) { - if (err) { - callback(err, null); - return; - } - for (var xy = 0; xy < allTeams.length; xy++) { - (function(xy) { - if (typeof allTeams[xy].orgname_rowid != "undefined" && typeof allTeams[xy].projectname_rowid != "undefined") { + loginname: loggedInUser, + id: '7' + }, function (err, users) { + if (err) { + callback(err, null); + return; + } else if (users.length > 0) { + for (var i = 0; i < users.length; i++) { + (function (user) { + catObj = { + userid: user.rowid, + teams: [], + orgs: [], + projects: [], + bunits: [] + }; + d4dModelNew.d4dModelMastersTeams.find({ + loginname_rowid: { + $regex: user.rowid + }, + id: "21" + }, function (err, teams) { + if (err) { + callback(err, null); + return; + } else if (teams.length > 0) { + var orgIdList = [],bgIdList=[],projectIdList=[]; + for (var j = 0; j < teams.length; j++) { + (function (team) { + if (catObj.teams.indexOf(team.rowid) === -1) { + catObj.teams.push(team.rowid); + async.waterfall([ + function(next){ d4dModelNew.d4dModelMastersOrg.find({ rowid: { - $in: allTeams[xy].orgname_rowid + $in: team.orgname_rowid }, id: "1", active: true - }, function(err, org) { + }, function (err, orgs) { if (err) { callback(err, null); - } - if (org) { - logger.debug("Available Org: ", JSON.stringify(org)); - for (var x = 0; x < org.length; x++) { - if (org[x].id === '1') { - orgs.push(org[x].rowid); - logger.debug("Orgs list rowid: ", org[x].rowid); - } - } - catObj.orgs = orgs; - } - d4dModelNew.d4dModelMastersProjects.find({ - orgname_rowid: { - $in: allTeams[xy].orgname_rowid - }, - rowid: { - $in: allTeams[xy].projectname_rowid.split(",") - }, - id: "4" - }, function(err, project) { - if (err) { - callback(err, null); - } - if (project) { - logger.debug("Available project: ", JSON.stringify(project)); - for (var x1 = 0; x1 < project.length; x1++) { - if (project[x1].id === '4') { - projects.push(project[x1].rowid); - logger.debug("projectList: ", project[x1].rowid); + return; + }else if (orgs.length > 0) { + var orgCount = 0; + for (var k = 0; k < orgs.length; k++) { + (function(org){ + orgCount++; + if(orgIdList.indexOf(org.rowid) === -1){ + orgIdList.push(org.rowid); } + })(orgs[k]); + if(orgCount === orgs.length){ + next(null,orgIdList); + return; } - catObj.projects = projects; } + }else { + next(null, orgIdList); + return; + } + }); + }, + function(orgIds,next) { + catObj.orgs = orgIds; + async.parallel({ + bgIds: function (callback) { d4dModelNew.d4dModelMastersProductGroup.find({ orgname_rowid: { - $in: allTeams[xy].orgname_rowid + $in: orgIds }, id: "2" - }, function(err, bg) { + }, function (err, bgs) { if (err) { callback(err, null); - } - if (bg) { - for (var x2 = 0; x2 < bg.length; x2++) { - if (bg[x2].id === '2') { - bunits.push(bg[x2].rowid); + }else if (bgs.length > 0) { + var bgCount = 0; + for (var l = 0; l < bgs.length; l++) { + (function(bg){ + bgCount++; + if(bgIdList.indexOf(bg.rowid) === -1){ + bgIdList.push(bg.rowid); + } + })(bgs[l]); + if(bgCount === bgs.length){ + callback(null,bgIdList); + return; } } - catObj.bunits = bunits; - returnObj.push(catObj); - logger.debug("returnObj: ", returnObj); - if (allObj.length === loopCount) { - logger.debug("Condition matched:"); - callback(null, returnObj); - return; + }else { + callback(null, bgIdList); + return; + } + }); + }, + projectIds: function (callback) { + d4dModelNew.d4dModelMastersProjects.find({ + orgname_rowid: { + $in: orgIds + }, + id: "4" + }, function (err, projects) { + if (err) { + callback(err, null); + }else if (projects.length > 0) { + var projectCount = 0; + for (var m = 0; m < projects.length; m++) { + (function(project){ + projectCount++; + if(projectIdList.indexOf(project.rowid) === -1){ + projectIdList.push(project.rowid); + } + })(projects[m]); + if(projectCount === projects.length){ + callback(null,projectIdList); + return; + } } + }else { + callback(null, projectIdList); + return; } }); + } - }); - // } - - }); - } //if - })(xy); + },function(err,results){ + if (err) { + next(err, null); + } + catObj.projects = results.projectIds; + catObj.bunits = results.bgIds; + next(null,catObj); + }) + }],function (err, results) { + if (err) { + callback(err, null); + } + returnObj.push(catObj); + catObj = {}; + if (returnObj.length === teams.length) { + callback(null, returnObj); + return; + } + }) } - }); - } // for multiple orgs - - }); - - } - })(x); + })(teams[j]); + } + } else { + logger.debug("No Team in Catalyst") + callback(null, returnObj); + return; + } + }); + })(users[i]); } + } else { - callback(err, returnObj); + logger.debug("No User in Catalyst") + callback(null, users); return; } - }); - } + }; // check valid user permission this.checkPermission = function(username, callback) { diff --git a/server/app/model/classes/instance/instance.js b/server/app/model/classes/instance/instance.js index 98dc77278..444b42d42 100755 --- a/server/app/model/classes/instance/instance.js +++ b/server/app/model/classes/instance/instance.js @@ -1379,8 +1379,6 @@ var InstancesDao = function() { }); }; - - //action logs function insertActionLog(instanceId, logData, callback) { var actionLog = new ActionLog(logData); @@ -1585,6 +1583,24 @@ var InstancesDao = function() { return log; }; + this.insertBootstrapActionLogForChef = function(instanceId, runlist, user, timestampStarted, callback) { + logger.debug("Enter insertBootstrapActionLogForChef ", instanceId, runlist, user, timestampStarted); + var log = { + type: ACTION_LOG_TYPES.BOOTSTRAP.type, + name: ACTION_LOG_TYPES.BOOTSTRAP.name, + completed: true, + success: true, + user: user, + timeStarted: timestampStarted, + actionData: { + runlist: runlist + } + }; + var logId = insertActionLog(instanceId, log, callback); + log._id = logId; + return log; + }; + this.insertOrchestrationActionLog = function(instanceId, runlist, user, timestampStarted, callback) { logger.debug("Enter insertOrchestrationActionLog ", instanceId, runlist, user, timestampStarted); var log = { diff --git a/server/app/routes/v1.0/routes_chef.js b/server/app/routes/v1.0/routes_chef.js index 3234ff2c0..9b89407e2 100755 --- a/server/app/routes/v1.0/routes_chef.js +++ b/server/app/routes/v1.0/routes_chef.js @@ -337,17 +337,17 @@ module.exports.setRoutes = function(app, verificationFunc) { callback(err, null); return; } + instance.id = data._id; + instance._id = data._id; + var timestampStarted = new Date().getTime(); + var actionLog = instancesDao.insertBootstrapActionLogForChef(instance.id, [], req.session.user.cn, timestampStarted); + var logsReferenceIds = [instance.id, actionLog._id]; logsDao.insertLog({ - referenceId: data._id, + referenceId: logsReferenceIds, err: false, log: "Node Imported", - timestamp: new Date().getTime() + timestamp: timestampStarted }); - var instance = data; - instance.id = data._id; - instance._id = data._id; - var timestampStarted = new Date().getTime(); - var actionLog = instancesDao.insertBootstrapActionLog(instance.id, [], req.session.user.cn, timestampStarted); var instanceLog = { actionId: actionLog._id, instanceId: instance.id, @@ -357,6 +357,7 @@ module.exports.setRoutes = function(app, verificationFunc) { envName: envName, status: "running", bootStrap: "success", + actionStatus: "success", platformId: platformId, blueprintName: node.name, data: runlist, diff --git a/server/app/routes/v1.0/routes_providercommon.js b/server/app/routes/v1.0/routes_providercommon.js index 754c7c5b7..8b477c029 100644 --- a/server/app/routes/v1.0/routes_providercommon.js +++ b/server/app/routes/v1.0/routes_providercommon.js @@ -86,8 +86,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { function getManagedInstancesList(req, res, next) { var reqObj = {}; - async.waterfall( - [ + async.waterfall([ function(next) { apiUtil.changeRequestForJqueryPagination(req.query, next); }, @@ -97,7 +96,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }, function(paginationReq, next) { paginationReq['providerId'] = req.params.providerId; - paginationReq['searchColumns'] = ['instanceIP', 'instanceState']; + paginationReq['searchColumns'] = ['instanceIP', 'instanceState','platformId','hardware.os','projectName','environmentName']; apiUtil.databaseUtil(paginationReq, next); }, function(queryObj, next) { @@ -127,7 +126,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }, function(paginationReq, next) { paginationReq['providerId'] = req.params.providerId; - paginationReq['searchColumns'] = ['instanceIP', 'instanceState']; + paginationReq['searchColumns'] = ['instanceIP', 'instanceState','platformId','hardware.os','projectName','environmentName']; reqData = paginationReq; apiUtil.databaseUtil(paginationReq, next); }, @@ -159,7 +158,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }, function(paginationReq, next) { paginationReq['providerId'] = req.params.providerId; - paginationReq['searchColumns'] = ['ip', 'platformId']; + paginationReq['searchColumns'] = ['ip', 'platformId','os','state','projectName','environmentName','providerData.region']; reqData = paginationReq; apiUtil.databaseUtil(paginationReq, next); }, @@ -194,7 +193,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }, function(paginationReq, next) { paginationReq['providerId'] = req.params.providerId; - paginationReq['searchColumns'] = ['ip', 'platformId']; + paginationReq['searchColumns'] = ['ip', 'platformId','os','state','projectName','environmentName','providerData.region']; apiUtil.databaseUtil(paginationReq, next); }, function(queryObj, next) { @@ -1517,7 +1516,7 @@ module.exports.setRoutes = function(app, sessionVerificationFunc) { }, function(paginationReq, next) { paginationReq['providerId'] = req.params.providerId; - paginationReq['searchColumns'] = ['ip', 'platformId']; + paginationReq['searchColumns'] = ['ip', 'platformId','os','state']; reqData = paginationReq; apiUtil.databaseUtil(paginationReq, next); }, From f38747648a3371ead85ff5a139f94118775bd04d Mon Sep 17 00:00:00 2001 From: Durgesh1988 Date: Thu, 25 Aug 2016 11:28:48 +0530 Subject: [PATCH 3/8] CAT-2264 Fixed --- client/htmls/public/instanceLog.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/htmls/public/instanceLog.html b/client/htmls/public/instanceLog.html index ea4bbd0c1..e11ec4385 100644 --- a/client/htmls/public/instanceLog.html +++ b/client/htmls/public/instanceLog.html @@ -229,7 +229,7 @@