diff --git a/node-scripts/spec/pipeline3/impl/dockerComposeGenericRegacy.spec.js b/node-scripts/spec/pipeline3/impl/dockerComposeGenericRegacy.spec.js deleted file mode 100644 index 695ac4f..0000000 --- a/node-scripts/spec/pipeline3/impl/dockerComposeGenericRegacy.spec.js +++ /dev/null @@ -1,192 +0,0 @@ -"use strict"; - -describe("Docker Compose Generic Deployment implementation", function() { - // deps - const path = require("path"); - const config = require(path.resolve("src/utils/config")); - const cst = require(path.resolve("src/const")); - const dockerCompose = require(path.resolve( - "src/pipeline3/impl/dockerComposeGeneric" - )); - - const scripts = require(path.resolve( - "src/" + config.getJobNameForPipeline3() + "/scripts" - )); - - var instanceDef = { - uuid: "336af1ee-90a1-4d1b-baaf-db12c84deec0", - name: "cambodia1", - type: "dev", - group: "tlc", - deployment: { - hostDir: "/var/docker-volumes/", - type: "dockerComposeGenericMaven", - composePlugin: true, - dockerComposeFiles: ["docker-compose.yml", "docker-compose-2.yml"], - envFiles: ["env-file-1", "env-file-2"], - value: { - mavenProject: { - version: "1.0.0-SNAPSHOT", - artifactId: "bahmni-docker-compose", - groupId: "net.mekomsolutions", - packaging: "zip" - }, - services: ["proxy", "openmrs", "mysql"] - }, - timezone: "Europe/Amsterdam", - host: { - type: "ssh", - value: { - ip: "hsc-dev.mekomsolutions.net", - user: "mekom", - port: "22" - } - } - }, - data: [ - { - type: "sqlDocker", - value: { - service: "mysql", - sourceFile: "/var/instance-data/sql-script.sql" - } - } - ] - }; - it("should use the correct compose command if composePlugin is set to true", () => { - var expected = "docker compose"; - expect(dockerCompose.composeExec(true)).toEqual(expected); - }); - - it("should use the correct compose command if composePlugin is set to false", () => { - var expected = "docker-compose"; - expect(dockerCompose.composeExec(false)).toEqual(expected); - }); - - it("should generate the correct compose command given multiple docker compose files", () => { - var expected = " -f docker-compose.yml -f docker-compose-2.yml "; - expect( - dockerCompose.combineComposeFiles( - instanceDef.deployment.dockerComposeFiles - ) - ).toEqual(expected); - }); - it("should generate Pre-Host Preparation deployment script", () => { - var expected = ""; - expected += scripts.initFolder( - config.getCDDockerDirPath(instanceDef.uuid), - "jenkins", - "jenkins", - true - ); - expected += scripts.fetchArtifact( - instanceDef.deployment.value.mavenProject, - "maven", - config.getCDDockerDirPath(instanceDef.uuid), - null - ); - let generated = dockerCompose.preHostPreparation.getDeploymentScript( - instanceDef - ); - expect(generated).toEqual(expected); - }); - - it("should generate Host Preparation deployment script", () => { - var expected = ""; - expected += scripts.rsync( - { ...instanceDef.deployment.host.value, ...{ remoteDst: true } }, - config.getCDDockerDirPath(instanceDef.uuid), - path.resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ), - true, - null, - "-avzz --delete" - ); - - expected += - scripts.remote( - instanceDef.deployment.host.value, - scripts.writeProperty( - "TIMEZONE", - instanceDef.deployment.timezone, - path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose", - ".env" - ) - .toString() - ) - ) + "\n"; - - expected += - scripts.remote( - instanceDef.deployment.host.value, - scripts.createEnvVarFileDockerGeneric(instanceDef) - ) + - "\n" + - scripts.remote( - instanceDef.deployment.host.value, - "cd " + - path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ) - .toString() + - " && docker compose -p " + - instanceDef.name + - " -f docker-compose.yml -f docker-compose-2.yml --env-file=env-file-1 --env-file=env-file-2" + - " --env-file=" + - path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - instanceDef.name + ".env" - ) - .toString() + - " build --pull proxy openmrs mysql" + - "\n" - ) + - scripts.remote( - instanceDef.deployment.host.value, - "cd " + - path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ) - .toString() + - " && docker compose -p " + - instanceDef.name + - " -f docker-compose.yml -f docker-compose-2.yml --env-file=env-file-1 --env-file=env-file-2" + - " --env-file=" + - path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - instanceDef.name + ".env" - ) - .toString() + - " pull proxy openmrs mysql" + - "\n" - ) + - scripts.remote( - instanceDef.deployment.host.value, - "sudo chown -R root:root " + - path - .resolve(instanceDef.deployment.hostDir, instanceDef.name) - .toString() - ); - let generated = dockerCompose.hostPreparation.getDeploymentScript( - instanceDef - ); - expect(generated).toEqual(expected); - }); -}); diff --git a/node-scripts/spec/pipeline3/impl/dockerComposeGeneric.spec.js b/node-scripts/spec/pipeline3/impl/dockerComposeProjectDir.spec.js similarity index 84% rename from node-scripts/spec/pipeline3/impl/dockerComposeGeneric.spec.js rename to node-scripts/spec/pipeline3/impl/dockerComposeProjectDir.spec.js index 707974a..13797cf 100644 --- a/node-scripts/spec/pipeline3/impl/dockerComposeGeneric.spec.js +++ b/node-scripts/spec/pipeline3/impl/dockerComposeProjectDir.spec.js @@ -6,7 +6,7 @@ describe("Docker Compose Generic Deployment implementation", function() { const config = require(path.resolve("src/utils/config")); const cst = require(path.resolve("src/const")); const dockerCompose = require(path.resolve( - "src/pipeline3/impl/dockerComposeGeneric" + "src/pipeline3/impl/dockerComposeProjectDir" )); const scripts = require(path.resolve( @@ -20,12 +20,12 @@ describe("Docker Compose Generic Deployment implementation", function() { group: "tlc", deployment: { hostDir: "/var/docker-volumes/", - workDir: "/var/docker-volumes/artifacts/run/docker", - type: "dockerComposeGeneric", + type: "dockerComposeProjectDir", composePlugin: true, dockerComposeFiles: ["docker-compose.yml", "docker-compose-2.yml"], envFiles: ["env-file-1", "env-file-2"], value: { + projectPath: "/var/docker-volumes/artifacts/run/docker", services: ["proxy", "openmrs", "mysql"] }, timezone: "Europe/Amsterdam", @@ -82,18 +82,6 @@ describe("Docker Compose Generic Deployment implementation", function() { it("should generate Host Preparation deployment script", () => { var expected = ""; - // expected += scripts.rsync( - // { ...instanceDef.deployment.host.value, ...{ remoteDst: true } }, - // config.getCDDockerDirPath(instanceDef.uuid), - // path.resolve( - // instanceDef.deployment.hostDir, - // instanceDef.name, - // "docker_compose" - // ), - // true, - // null, - // "-avzz --delete" - // ); expected += scripts.remote( @@ -101,7 +89,9 @@ describe("Docker Compose Generic Deployment implementation", function() { scripts.writeProperty( "TIMEZONE", instanceDef.deployment.timezone, - path.resolve(instanceDef.deployment.workDir, ".env").toString() + path + .resolve(instanceDef.deployment.value.projectPath, ".env") + .toString() ) ) + "\n"; @@ -114,7 +104,7 @@ describe("Docker Compose Generic Deployment implementation", function() { scripts.remote( instanceDef.deployment.host.value, "cd " + - path.resolve(instanceDef.deployment.workDir).toString() + + path.resolve(instanceDef.deployment.value.projectPath).toString() + " && docker compose -p " + instanceDef.name + " -f docker-compose.yml -f docker-compose-2.yml " + @@ -125,7 +115,7 @@ describe("Docker Compose Generic Deployment implementation", function() { scripts.remote( instanceDef.deployment.host.value, "cd " + - path.resolve(instanceDef.deployment.workDir).toString() + + path.resolve(instanceDef.deployment.value.projectPath).toString() + " && docker compose -p " + instanceDef.name + " -f docker-compose.yml -f docker-compose-2.yml " + diff --git a/node-scripts/src/instance-event/validator.js b/node-scripts/src/instance-event/validator.js index fe86b15..aea07b7 100644 --- a/node-scripts/src/instance-event/validator.js +++ b/node-scripts/src/instance-event/validator.js @@ -112,7 +112,6 @@ module.exports = { } else if (deployment.hostDir === "") { throw new Error("The 'host dir' is not specified."); } - console.log(JSON.stringify(deployment)); // validating the actual config based on its type module.exports .getConfigValidatorsMap() @@ -248,7 +247,7 @@ module.exports = { ); } }, - validateDockerComposeGenericDeploymentConfigValue: function(value) { + validateDockerComposeProjectDirDeploymentConfigValue: function(value) { if ( JSON.stringify(Object.keys(value).sort()) >= JSON.stringify( @@ -256,7 +255,7 @@ module.exports = { ) ) { throw new Error( - "The Docker compose deployment value should be provided as an instance of 'DockerComposeGenericDeployment'." + "The Docker compose deployment value should be provided as an instance of 'DockerComposeProjectDirDeployment'." ); } }, @@ -383,8 +382,8 @@ module.exports = { module.exports.validateDockerComposeMavenDeploymentConfigValue, dockerComposeGenericMaven: module.exports.validateDockerComposeGenericMavenDeploymentConfigValue, - dockerComposeGeneric: - module.exports.validateDockerComposeGenericDeploymentConfigValue + dockerComposeProjectDir: + module.exports.validateDockerComposeProjectDirDeploymentConfigValue }; } }; diff --git a/node-scripts/src/pipeline3/impl/dockerComposeGeneric.js b/node-scripts/src/pipeline3/impl/dockerComposeProjectDir.js similarity index 84% rename from node-scripts/src/pipeline3/impl/dockerComposeGeneric.js rename to node-scripts/src/pipeline3/impl/dockerComposeProjectDir.js index 691a7a2..a62e598 100644 --- a/node-scripts/src/pipeline3/impl/dockerComposeGeneric.js +++ b/node-scripts/src/pipeline3/impl/dockerComposeProjectDir.js @@ -10,15 +10,10 @@ const heredoc_2 = cst.HEREDOC_2; const cdScript = function(instanceDef, sudo) { let path = require("path"); - let workDir = path - .resolve(instanceDef.deployment.hostDir, instanceDef.name, "docker_compose") - .toString(); - if (instanceDef.deployment.workDir) { - workDir = instanceDef.deployment.workDir; - } + let projectPath = instanceDef.deployment.value.projectPath; let script = ""; script += "set -e\n"; - script += "cd " + workDir + " && "; + script += "cd " + projectPath + " && "; if (sudo) { script += "sudo "; } @@ -44,16 +39,10 @@ const combineComposeFiles = function(composeFiles = []) { const combineEnvFiles = function(instanceDef = {}) { let defaultEnvDir = path .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, + instanceDef.deployment.value.projectPath, instanceDef.name + ".env" ) .toString(); - if (instanceDef.deployment.workDir) { - defaultEnvDir = path - .resolve(instanceDef.deployment.workDir, instanceDef.name + ".env") - .toString(); - } let files = " "; if ( instanceDef && @@ -112,30 +101,7 @@ module.exports = { instanceDef.name ); const ssh = instanceDef.deployment.host.value; - const hostArtifactsDir = hostDir + "/docker_compose"; - let workDir = path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ) - .toString(); - if (instanceDef.deployment.workDir) { - workDir = instanceDef.deployment.workDir; - } - if ( - instanceDef.deployment.value && - instanceDef.deployment.value.mavenProject - ) { - script += scripts.rsync( - { ...ssh, ...{ remoteDst: true } }, - config.getCDDockerDirPath(instanceDef.uuid), - hostArtifactsDir, - true, - null, - "-avzz --delete" - ); - } + let projectPath = instanceDef.deployment.value.projectPath; // Set the Timezone via a env var "TIMEZONE" if (instanceDef.deployment.timezone) { script += scripts.remote( @@ -143,7 +109,7 @@ module.exports = { scripts.writeProperty( "TIMEZONE", instanceDef.deployment.timezone, - path.resolve(workDir, ".env").toString() + path.resolve(projectPath, ".env").toString() ) ); } @@ -159,7 +125,7 @@ module.exports = { script += scripts.remote( instanceDef.deployment.host.value, "cd " + - workDir + + projectPath + " && " + composeExec(instanceDef.deployment.composePlugin) + " -p " + @@ -177,7 +143,7 @@ module.exports = { script += scripts.remote( instanceDef.deployment.host.value, "cd " + - workDir + + projectPath + " && " + composeExec(instanceDef.deployment.composePlugin) + " -p " + @@ -204,16 +170,7 @@ module.exports = { getDataScript: function(instanceDef) { var script = ""; var ssh = instanceDef.deployment.host.value; - let workDir = path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ) - .toString(); - if (instanceDef.deployment.workDir) { - workDir = instanceDef.deployment.workDir; - } + let projectPath = instanceDef.deployment.value.projectPath; instanceDef.data.forEach(function(data) { var applyData = { instance: function() { @@ -238,7 +195,7 @@ module.exports = { script += scripts.remote( ssh, "cd " + - workDir + + projectPath + " && " + composeExec(instanceDef.deployment.composePlugin) + " -p " + @@ -269,20 +226,11 @@ module.exports = { startInstance: { getDeploymentScript: function(instanceDef) { let script = ""; - let workDir = path - .resolve( - instanceDef.deployment.hostDir, - instanceDef.name, - "docker_compose" - ) - .toString(); - if (instanceDef.deployment.workDir) { - workDir = instanceDef.deployment.workDir; - } + let projectPath = instanceDef.deployment.value.projectPath; script += scripts.remote( instanceDef.deployment.host.value, "cd " + - workDir + + projectPath + " && " + composeExec(instanceDef.deployment.composePlugin) + " -p " + diff --git a/node-scripts/src/pipeline3/scripts.js b/node-scripts/src/pipeline3/scripts.js index a1b1125..45fbceb 100644 --- a/node-scripts/src/pipeline3/scripts.js +++ b/node-scripts/src/pipeline3/scripts.js @@ -10,16 +10,21 @@ const heredoc_2 = cst.HEREDOC_2; const heredoc_3 = cst.HEREDOC_3; const utils = require("../utils/utils"); const model = require("../utils/model"); -const createEnvVarFile = function(instanceDef, dockerComposePath) { - let workDir = path +const createEnvVarFile = function(instanceDef, deploymentBasePath) { + let projectPath = path .resolve( instanceDef.deployment.hostDir, instanceDef.name, - dockerComposePath + deploymentBasePath ) .toString(); - if (instanceDef.deployment.workDir) { - workDir = instanceDef.deployment.workDir; + console.info(instanceDef.deployment); + if ( + instanceDef.deployment && + instanceDef.deployment.value && + instanceDef.deployment.value.projectPath + ) { + projectPath = instanceDef.deployment.value.projectPath; } let script = ""; @@ -32,13 +37,20 @@ const createEnvVarFile = function(instanceDef, dockerComposePath) { ) .toString(); - if (instanceDef.deployment.workDir) { + if ( + instanceDef.deployment && + instanceDef.deployment.value && + instanceDef.deployment.value.projectPath + ) { distEnvFile = path - .resolve(instanceDef.deployment.workDir, instanceDef.name + ".env") + .resolve( + instanceDef.deployment.value.projectPath, + instanceDef.name + ".env" + ) .toString(); } - var envFile = path.resolve(workDir, ".env").toString(); + var envFile = path.resolve(projectPath, ".env").toString(); script += "if [[ ! -e " + diff --git a/node-scripts/src/utils/config.js b/node-scripts/src/utils/config.js index f751b1b..0c17da8 100644 --- a/node-scripts/src/utils/config.js +++ b/node-scripts/src/utils/config.js @@ -383,7 +383,7 @@ module.exports = { "dockerComposeGit", "dockerComposeMaven", "dockerComposeGenericMaven", - "dockerComposeGeneric" + "dockerComposeProjectDir" ]; }, getInstanceArtifactsTypes: function() {