diff --git a/.editorconfig b/.editorconfig index 48011fd884..89c45b2afa 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,5 +15,5 @@ indent_style = space charset = utf-8 # 4 space indentation -[*.{py}] -indent_size = 4 \ No newline at end of file +[*.py] +indent_size = 4 diff --git a/.gitignore b/.gitignore index 94bb6662f5..e9091b488a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules .DS_Store .vscode/ +/.idea */.classpath */.project */.settings @@ -12,4 +13,6 @@ node_modules */target/ .nyc_output/ npm-debug.log -*/package-lock.json +/.idea +package-lock.json + diff --git a/.travis.yml b/.travis.yml index ca81593312..fe2cfd77c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,20 +2,20 @@ language: node_js node_js: - "node" env: - - PLATFORM_SERVICE=jazz_codeq - - PLATFORM_SERVICE=jazz_create-serverless-service - - PLATFORM_SERVICE=jazz_delete-serverless-service - - PLATFORM_SERVICE=jazz_deployments - - PLATFORM_SERVICE=jazz_deployments-event-handler - - PLATFORM_SERVICE=jazz_environments - - PLATFORM_SERVICE=jazz_environment-event-handler - - PLATFORM_SERVICE=jazz_events - - PLATFORM_SERVICE=jazz_is-service-available - - PLATFORM_SERVICE=jazz_login - - PLATFORM_SERVICE=jazz_logout - - PLATFORM_SERVICE=jazz_scm-webhook - - PLATFORM_SERVICE=jazz_services - - PLATFORM_SERVICE=jazz_services-handler + - PLATFORM_SERVICE=core/jazz_codeq + - PLATFORM_SERVICE=core/jazz_create-serverless-service + - PLATFORM_SERVICE=core/jazz_delete-serverless-service + - PLATFORM_SERVICE=core/jazz_deployments + - PLATFORM_SERVICE=core/jazz_deployments-event-handler + - PLATFORM_SERVICE=core/jazz_environments + - PLATFORM_SERVICE=core/jazz_environment-event-handler + - PLATFORM_SERVICE=core/jazz_events + - PLATFORM_SERVICE=core/jazz_is-service-available + - PLATFORM_SERVICE=core/jazz_login + - PLATFORM_SERVICE=core/jazz_logout + - PLATFORM_SERVICE=core/jazz_scm-webhook + - PLATFORM_SERVICE=core/jazz_services + - PLATFORM_SERVICE=core/jazz_services-handler before_script: - npm prune diff --git a/README.md b/README.md index fda76f2ee1..ccd53fb9cc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![Jazz Logo](logo.png) -# Jazz Serverless Platform +# ![Jazz Logo](misc/logo.png) Jazz Serverless Platform + [![Build Status](https://travis-ci.org/tmobile/jazz.svg?branch=master)](https://travis-ci.org/tmobile/jazz) **Seamlessly build, deploy & manage cloud-native applications.** diff --git a/api-template-java/Jenkinsfile b/api-template-java/Jenkinsfile deleted file mode 100644 index dd4290b102..0000000000 --- a/api-template-java/Jenkinsfile +++ /dev/null @@ -1,45 +0,0 @@ -#!groovy -import groovy.json.JsonOutput -import groovy.transform.Field - -// To be replaced as @Field def repo_credential_id = "value" except for config_loader -@Field def repo_credential_id -@Field def repo_base -@Field def repo_core -@Field def scm_type - -@Field def config_loader - -/* -* Load environment variables from build module -*/ -def loadConfigModule(build_module_url){ - dir('config-loader') { - checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: repo_credential_id, url: build_module_url]]]) - def result_json_string = readFile("jazz-installer-vars.json") - config_module = load "config-loader.groovy" - config_loader = config_module.initialize(result_json_string) - } -} - -/* -* Start the Pipeline stages -*/ -node { - stage('Loading Config-Loader') { - loadConfigModule(getBuildModuleUrl()) - } - - stage('Triggering the Jenkins build') { - build job: "${config_loader.JENKINS.BUILD_URI.API}", parameters: [string(name: 'service_name', value: '{service_name}'), string(name: 'domain', value: '{domain}'), string(name: 'scm_branch', value: "${env.BRANCH_NAME}")], wait: false - } -} - -def getBuildModuleUrl() { - if (scm_type && scm_type != "bitbucket") { - // right now only bitbucket has this additional tag scm in its git clone path - return "http://${repo_base}/${repo_core}/jazz-build-module.git" - } else { - return "http://${repo_base}/scm/${repo_core}/jazz-build-module.git" - } -} diff --git a/api-template-nodejs/Jenkinsfile b/api-template-nodejs/Jenkinsfile deleted file mode 100644 index dd4290b102..0000000000 --- a/api-template-nodejs/Jenkinsfile +++ /dev/null @@ -1,45 +0,0 @@ -#!groovy -import groovy.json.JsonOutput -import groovy.transform.Field - -// To be replaced as @Field def repo_credential_id = "value" except for config_loader -@Field def repo_credential_id -@Field def repo_base -@Field def repo_core -@Field def scm_type - -@Field def config_loader - -/* -* Load environment variables from build module -*/ -def loadConfigModule(build_module_url){ - dir('config-loader') { - checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: repo_credential_id, url: build_module_url]]]) - def result_json_string = readFile("jazz-installer-vars.json") - config_module = load "config-loader.groovy" - config_loader = config_module.initialize(result_json_string) - } -} - -/* -* Start the Pipeline stages -*/ -node { - stage('Loading Config-Loader') { - loadConfigModule(getBuildModuleUrl()) - } - - stage('Triggering the Jenkins build') { - build job: "${config_loader.JENKINS.BUILD_URI.API}", parameters: [string(name: 'service_name', value: '{service_name}'), string(name: 'domain', value: '{domain}'), string(name: 'scm_branch', value: "${env.BRANCH_NAME}")], wait: false - } -} - -def getBuildModuleUrl() { - if (scm_type && scm_type != "bitbucket") { - // right now only bitbucket has this additional tag scm in its git clone path - return "http://${repo_base}/${repo_core}/jazz-build-module.git" - } else { - return "http://${repo_base}/scm/${repo_core}/jazz-build-module.git" - } -} diff --git a/api-template-nodejs/components/config.js b/api-template-nodejs/components/config.js deleted file mode 100644 index 62bad8a4f0..0000000000 --- a/api-template-nodejs/components/config.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - Nodejs Template Project - @module: config.js - @description: Defines variables/functions to retrieve environment related data - @author: - @version: 1.0 -**/ - -var getStageConfig = (event) => { - var stage; - - if (event && event.awslogs && event.awslogs.data) { - // cw events default to dev - stage = 'dev'; - } else { - stage = event.stage - } - - var configObj; - - if (stage) { - configObj = require(`../config/${stage}-config.json`); - } - - return configObj; -}; - -module.exports = (event) => { - var config = getStageConfig(event); - return config; -}; diff --git a/api-template-python/Jenkinsfile b/api-template-python/Jenkinsfile deleted file mode 100644 index dd4290b102..0000000000 --- a/api-template-python/Jenkinsfile +++ /dev/null @@ -1,45 +0,0 @@ -#!groovy -import groovy.json.JsonOutput -import groovy.transform.Field - -// To be replaced as @Field def repo_credential_id = "value" except for config_loader -@Field def repo_credential_id -@Field def repo_base -@Field def repo_core -@Field def scm_type - -@Field def config_loader - -/* -* Load environment variables from build module -*/ -def loadConfigModule(build_module_url){ - dir('config-loader') { - checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: repo_credential_id, url: build_module_url]]]) - def result_json_string = readFile("jazz-installer-vars.json") - config_module = load "config-loader.groovy" - config_loader = config_module.initialize(result_json_string) - } -} - -/* -* Start the Pipeline stages -*/ -node { - stage('Loading Config-Loader') { - loadConfigModule(getBuildModuleUrl()) - } - - stage('Triggering the Jenkins build') { - build job: "${config_loader.JENKINS.BUILD_URI.API}", parameters: [string(name: 'service_name', value: '{service_name}'), string(name: 'domain', value: '{domain}'), string(name: 'scm_branch', value: "${env.BRANCH_NAME}")], wait: false - } -} - -def getBuildModuleUrl() { - if (scm_type && scm_type != "bitbucket") { - // right now only bitbucket has this additional tag scm in its git clone path - return "http://${repo_base}/${repo_core}/jazz-build-module.git" - } else { - return "http://${repo_base}/scm/${repo_core}/jazz-build-module.git" - } -} diff --git a/delete-serverless-service-build-pack/Jenkinsfile b/builds/delete-serverless-service-build-pack/Jenkinsfile similarity index 100% rename from delete-serverless-service-build-pack/Jenkinsfile rename to builds/delete-serverless-service-build-pack/Jenkinsfile diff --git a/delete-serverless-service-build-pack/Jenkinsfile_Cleanup_CF_Dist b/builds/delete-serverless-service-build-pack/Jenkinsfile_Cleanup_CF_Dist similarity index 100% rename from delete-serverless-service-build-pack/Jenkinsfile_Cleanup_CF_Dist rename to builds/delete-serverless-service-build-pack/Jenkinsfile_Cleanup_CF_Dist diff --git a/jazz-build-module/README.md b/builds/jazz-build-module/README.md similarity index 100% rename from jazz-build-module/README.md rename to builds/jazz-build-module/README.md diff --git a/jazz-build-module/config-loader.groovy b/builds/jazz-build-module/config-loader.groovy similarity index 100% rename from jazz-build-module/config-loader.groovy rename to builds/jazz-build-module/config-loader.groovy diff --git a/jazz-build-module/environment-deployment-metadata-loader.groovy b/builds/jazz-build-module/environment-deployment-metadata-loader.groovy similarity index 100% rename from jazz-build-module/environment-deployment-metadata-loader.groovy rename to builds/jazz-build-module/environment-deployment-metadata-loader.groovy diff --git a/jazz-build-module/events-module.groovy b/builds/jazz-build-module/events-module.groovy similarity index 100% rename from jazz-build-module/events-module.groovy rename to builds/jazz-build-module/events-module.groovy diff --git a/jazz-build-module/scm-module.groovy b/builds/jazz-build-module/scm-module.groovy similarity index 85% rename from jazz-build-module/scm-module.groovy rename to builds/jazz-build-module/scm-module.groovy index 3baa0643ae..0704748c87 100644 --- a/jazz-build-module/scm-module.groovy +++ b/builds/jazz-build-module/scm-module.groovy @@ -41,7 +41,7 @@ def createProject(repo_owner, repo_name){ try { if (config_loader.SCM.TYPE == "gitlab") { - //gitlabs username is restricted to alphanumeric and . _ - characters, + //gitlabs username is restricted to alphanumeric and . _ - characters, // so using email all email characters (except -, _) replaced with - def gitlab_username = repo_owner.replaceAll("[^a-zA-Z0-9_-]", "-") @@ -62,7 +62,9 @@ def createProject(repo_owner, repo_name){ transferProject(user_services_group_id, repo_id) } else if (config_loader.SCM.TYPE == "bitbucket") { - sh "curl -X POST -k -v -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" -H \"Content-Type: application/json\" " + scm_user_services_api_endpoint + " -d \'{\"name\":\"" + repo_name + "\", \"scmId\": \"git\", \"forkable\": \"true\"}\'" + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "curl -X POST -k -v -u \"${UNAME}:${PWD}\" -H \"Content-Type: application/json\" " + scm_user_services_api_endpoint + " -d \'{\"name\":\"" + repo_name + "\", \"scmId\": \"git\", \"forkable\": \"true\"}\'" + } } } catch (ex) { echo "createProject failed: " + ex.toString() @@ -125,7 +127,7 @@ def getGitLabsProjectId(repo_name) { if (projectObject == null || projectObject.equals("") || projectObject[0] == null || projectObject[0].equals("") || projectObject[0].id == null || projectObject[0].id.equals("")) { - error "getGitLabsProjectId failed to find project with name $repo_name" + error "getGitLabsProjectId failed to find project with name $repo_name" } return projectObject[0].id @@ -149,7 +151,9 @@ def setBranchPermissions(repo_name) { sh "curl --request POST --header \"PRIVATE-TOKEN: ${config_loader.SCM.PRIVATE_TOKEN}\" \"${scm_protocol}${config_loader.REPOSITORY.BASE_URL}/api/v4/projects/$proj_id/protected_branches?name=master&push_access_level=0\"" } else if (config_loader.SCM.TYPE == "bitbucket") { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, url: serviceonboarding_repo]]]) - sh "curl -X POST -k -v -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" -H \"Content-Type: application/vnd.atl.bitbucket.bulk+json\" ${scm_branch_permission_api_endpoint}${repo_name}/restrictions -d \"@branch_permissions_payload.json\" " + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "curl -X POST -k -v -u \"${UNAME}:${PWD}\" -H \"Content-Type: application/vnd.atl.bitbucket.bulk+json\" ${scm_branch_permission_api_endpoint}${repo_name}/restrictions -d \"@branch_permissions_payload.json\" " + } } } @@ -157,12 +161,11 @@ def setRepoPermissions(repo_owner, repo_name, admin_group) { if (config_loader.SCM.TYPE == "gitlab") { } else if (config_loader.SCM.TYPE == "bitbucket") { - sh "curl -X PUT -G -k -v -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" -d \"name=$admin_group\" \"${scm_user_services_api_endpoint}/${repo_name}/permissions/groups?permission=REPO_ADMIN&\"" - - - def encoded_creator = URLEncoder.encode(repo_owner, "utf-8") - - sh "curl -X PUT -G -k -v -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" -d \"name=$encoded_creator\" \"${scm_user_services_api_endpoint}/${repo_name}/permissions/users?permission=REPO_ADMIN\"" + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "curl -X PUT -G -k -v -u \"${UNAME}:${PWD}\" -d \"name=$admin_group\" \"${scm_user_services_api_endpoint}/${repo_name}/permissions/groups?permission=REPO_ADMIN&\"" + def encoded_creator = URLEncoder.encode(repo_owner, "utf-8") + sh "curl -X PUT -G -k -v -u \"${UNAME}:${PWD}\" -d \"name=$encoded_creator\" \"${scm_user_services_api_endpoint}/${repo_name}/permissions/users?permission=REPO_ADMIN\"" + } } } @@ -173,7 +176,9 @@ def addWebhook(repo_name, webhookName, scm_webhook_target_url) { sh "curl --header \"Private-Token: ${config_loader.SCM.PRIVATE_TOKEN}\" -X POST \"${scm_webhook_api}$scm_webhook_target_url\"" } else if (config_loader.SCM.TYPE == "bitbucket") { def scm_webhook_api = "${scm_protocol}${config_loader.REPOSITORY.BASE_URL}/rest/webhook/1.0/projects/${config_loader.REPOSITORY.REPO_BASE_SERVICES}/repos/" - sh "curl -X PUT -k -v -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" -H \"Content-Type: application/json\" ${scm_webhook_api}${repo_name}/configurations -d \'{\"title\": \"${webhookName}\", \"url\": \"${scm_webhook_target_url}\" , \"enabled\": true}\'" + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "curl -X PUT -k -v -u \"${UNAME}:${PWD}\" -H \"Content-Type: application/json\" ${scm_webhook_api}${repo_name}/configurations -d \'{\"title\": \"${webhookName}\", \"url\": \"${scm_webhook_target_url}\" , \"enabled\": true}\'" + } } } @@ -185,10 +190,12 @@ def deleteProject(repo_name) { returnStdout: true ).trim() } else if (config_loader.SCM.TYPE == "bitbucket") { - def outputStr = sh( - script: "curl -X DELETE -k -u \"${config_loader.SCM.USERNAME}:${config_loader.SCM.PASSWORD}\" '" + scm_user_services_api_endpoint + repo_name + "'", - returnStdout: true - ).trim() + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + def outputStr = sh( + script: "curl -X DELETE -k -u \"${UNAME}:${PWD}\" '" + scm_user_services_api_endpoint + repo_name + "'", + returnStdout: true + ).trim() + } } } @@ -307,7 +314,7 @@ def getRepoCommitterInfo(commitHash) { def scm_commit_api = "http://${config_loader.REPOSITORY.BASE_URL}/rest/api/1.0/projects/${repoBase}/repos/${getRepoName()}" def repoUrl = "${scm_commit_api}/commits/${commitHash}" echo "[Metadata] Repository URL: $repoUrl" - def scmCommitResponse + def scmCommitResponse withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { scmCommitResponse = sh(script: "curl -k -v -u \"$UNAME:$PWD\" -H \"Content-Type: application/json\" $repoUrl", returnStdout: true).trim() } diff --git a/jazz-build-module/service-configuration-data-loader.groovy b/builds/jazz-build-module/service-configuration-data-loader.groovy similarity index 68% rename from jazz-build-module/service-configuration-data-loader.groovy rename to builds/jazz-build-module/service-configuration-data-loader.groovy index 71cb22e2be..e3d4a31233 100644 --- a/jazz-build-module/service-configuration-data-loader.groovy +++ b/builds/jazz-build-module/service-configuration-data-loader.groovy @@ -2,7 +2,6 @@ import groovy.json.JsonSlurperClassic import groovy.json.JsonOutput import groovy.transform.Field -import jenkins.security.* echo "Service configuration module loaded successfully" @@ -25,7 +24,7 @@ echo "Service configuration module loaded successfully" * Initialize the module */ def initialize(config, role_arn, region, role_id, jenkins_url, current_environment, service_name, utilModule) { - + config_loader = config setRoleARN(role_arn) setRegion(region) @@ -51,6 +50,30 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{conf-accId}/${role_id}/g' ./swagger/swagger.json" } + if ( (service_name.trim() == "jazz_metrics") ) { + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{conf-apikey-dev}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/global-config.json" + sh "sed -i -- 's/{conf-apikey-stg}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/global-config.json" + sh "sed -i -- 's/{conf-apikey-prod}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/global-config.json" + + sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/global-config.json" + + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" + } + if ( (service_name.trim() == "jazz_codeq") ) { sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" @@ -65,15 +88,15 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{sonar_hostname}/${config_loader.CODE_QUALITY.SONAR.HOST_NAME}/g' ./config/prod-config.json" withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.CODE_QUALITY.SONAR.ADMIN_SONAR_CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]){ - sh "sed -i -- 's/{sonar_user}/${UNAME}/g' ./config/dev-config.json" + sh "sed -i -- 's/{sonar_user}/${UNAME}/g' ./config/dev-config.json" sh "sed -i -- 's/{sonar_user}/${UNAME}/g' ./config/stg-config.json" sh "sed -i -- 's/{sonar_user}/${UNAME}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{sonar_creds}/${PWD}/g' ./config/dev-config.json" sh "sed -i -- 's/{sonar_creds}/${PWD}/g' ./config/stg-config.json" sh "sed -i -- 's/{sonar_creds}/${PWD}/g' ./config/prod-config.json" } - + sh "sed -i -- 's/{key_prefix}/${config_loader.CODE_QUALITY.SONAR.KEY_PREFIX}/g' ./config/dev-config.json" sh "sed -i -- 's/{key_prefix}/${config_loader.CODE_QUALITY.SONAR.KEY_PREFIX}/g' ./config/stg-config.json" sh "sed -i -- 's/{key_prefix}/${config_loader.CODE_QUALITY.SONAR.KEY_PREFIX}/g' ./config/prod-config.json" @@ -87,15 +110,21 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" } - if ((service_name.trim() == "jazz_delete-serverless-service")) { - sh "sed -i -- 's/{conf-jenkins-host}/${jenkins_url}/g' ./index.js" + if ( (service_name.trim() == "jazz_assets") ) { + sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" } if ( (service_name.trim() == "jazz_deployments") ) { sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" @@ -129,7 +158,7 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/dev-config.json" sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/stg-config.json" sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" @@ -147,7 +176,25 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" - + + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" + } + + if ((service_name.trim() == "jazz_asset-event-handler")) { + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" @@ -165,12 +212,39 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" } + if ((service_name.trim() == "jazz_slack-event-handler")) { + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{slack_notifier_name}/${config_loader.SLACK.SLACK_USER}/g' ./config/dev-config.json" + sh "sed -i -- 's/{slack_notifier_name}/${config_loader.SLACK.SLACK_USER}/g' ./config/stg-config.json" + sh "sed -i -- 's/{slack_notifier_name}/${config_loader.SLACK.SLACK_USER}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{slack_token}/${config_loader.SLACK.SLACK_TOKEN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{slack_token}/${config_loader.SLACK.SLACK_TOKEN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{slack_token}/${config_loader.SLACK.SLACK_TOKEN}/g' ./config/prod-config.json" + + } + if ((service_name.trim() == "jazz_events")) { sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/stg-config.json" @@ -192,33 +266,36 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" - + } if ((service_name.trim() == "jazz_login") || (service_name.trim() == "jazz_logout") || (service_name.trim() == "jazz_cognito-authorizer")) { sh "sed -i -- 's/{conf-user-pool-id}/${config_loader.AWS.COGNITO.USER_POOL_ID}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-client-id}/${config_loader.AWS.COGNITO.CLIENT_ID}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{conf-user-pool-id}/${config_loader.AWS.COGNITO.USER_POOL_ID}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-client-id}/${config_loader.AWS.COGNITO.CLIENT_ID}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{conf-user-pool-id}/${config_loader.AWS.COGNITO.USER_POOL_ID}/g' ./config/prod-config.json" sh "sed -i -- 's/{conf-client-id}/${config_loader.AWS.COGNITO.CLIENT_ID}/g' ./config/prod-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" } if ((service_name.trim() == "jazz_is-service-available")) { @@ -236,17 +313,18 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["DEV"])}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["STG"])}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-apikey}/${utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"])}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" - + sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/dev-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/stg-config.json" sh "sed -i -- 's/{jazz_admin_creds}/${config_loader.JAZZ.PASSWD}/g' ./config/prod-config.json" } - if ((service_name.trim() == "jazz_delete-serverless-service") || (service_name.trim() == "jazz_create-serverless-service") || (service_name.trim() == "jazz_deployments")) { + if ((service_name.trim() == "jazz_delete-serverless-service") || (service_name.trim() == "jazz_create-serverless-service") + || (service_name.trim() == "jazz_deployments") || (service_name.trim() == "jazz_environment-event-handler")) { sh "sed -i -- 's/{conf-jenkins-host}/${jenkins_url}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-jenkins-host}/${jenkins_url}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-jenkins-host}/${jenkins_url}/g' ./config/prod-config.json" @@ -259,9 +337,9 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{job_token}/${config_loader.JENKINS.JOB_AUTH_TOKEN}/g' ./config/stg-config.json" sh "sed -i -- 's/{job_token}/${config_loader.JENKINS.JOB_AUTH_TOKEN}/g' ./config/prod-config.json" - sh "sed -i -- 's/{api_token}/${getApiToken()}/g' ./config/dev-config.json" - sh "sed -i -- 's/{api_token}/${getApiToken()}/g' ./config/stg-config.json" - sh "sed -i -- 's/{api_token}/${getApiToken()}/g' ./config/prod-config.json" + sh "sed -i -- 's/{api_token}/${utilModule.getApiToken()}/g' ./config/dev-config.json" + sh "sed -i -- 's/{api_token}/${utilModule.getApiToken()}/g' ./config/stg-config.json" + sh "sed -i -- 's/{api_token}/${utilModule.getApiToken()}/g' ./config/prod-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" @@ -275,9 +353,15 @@ def loadServiceConfigurationData() { } if (service_name.trim() == "jazz_services") { - sh "sed -i -- 's/{conf-region}/${region}/g' ./config/dev-config.json" - sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" - sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/dev-config.json" + sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/stg-config.json" + sh "sed -i -- 's/{inst_stack_prefix}/${config_loader.INSTANCE_PREFIX}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" + } if (service_name.trim() == "jazz_logs") { @@ -317,26 +401,65 @@ def loadServiceConfigurationData() { sh "sed -i -- 's,{bb_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/dev-config.json" sh "sed -i -- 's,{bb_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/stg-config.json" sh "sed -i -- 's,{bb_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/prod-config.json" - - sh "sed -i -- 's/{bb_username}/${config_loader.SCM.USERNAME}/g' ./config/dev-config.json" - sh "sed -i -- 's/{bb_username}/${config_loader.SCM.USERNAME}/g' ./config/stg-config.json" - sh "sed -i -- 's/{bb_username}/${config_loader.SCM.USERNAME}/g' ./config/prod-config.json" - - sh "sed -i -- 's/{bb_password}/${config_loader.SCM.PASSWORD}/g' ./config/dev-config.json" - sh "sed -i -- 's/{bb_password}/${config_loader.SCM.PASSWORD}/g' ./config/stg-config.json" - sh "sed -i -- 's/{bb_password}/${config_loader.SCM.PASSWORD}/g' ./config/prod-config.json" + + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/dev-config.json" + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/stg-config.json" + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/dev-config.json" + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/stg-config.json" + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/prod-config.json" + } } if (config_loader.SCM.TYPE == "gitlab") { sh "sed -i -- 's,{gitlab_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/dev-config.json" sh "sed -i -- 's,{gitlab_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/stg-config.json" sh "sed -i -- 's,{gitlab_service_host},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/prod-config.json" - + sh "sed -i -- 's/{gitlab_private_token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/dev-config.json" sh "sed -i -- 's/{gitlab_private_token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/stg-config.json" sh "sed -i -- 's/{gitlab_private_token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/prod-config.json" } } + if (service_name.trim() == "jazz_admin") { + sh "sed -i -- 's/{scm-type}/${config_loader.SCM.TYPE}/g' ./config/dev-config.json" + sh "sed -i -- 's/{scm-type}/${config_loader.SCM.TYPE}/g' ./config/stg-config.json" + sh "sed -i -- 's/{scm-type}/${config_loader.SCM.TYPE}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{jazz_admin}/${config_loader.JAZZ.ADMIN}/g' ./config/prod-config.json" + + if (config_loader.SCM.TYPE == "bitbucket") { + + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/dev-config.json" + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/stg-config.json" + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/prod-config.json" + + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/dev-config.json" + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/stg-config.json" + sh "sed -i -- 's/{bb_username}/${UNAME}/g' ./config/prod-config.json" + + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/dev-config.json" + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/stg-config.json" + sh "sed -i -- 's/{bb_password}/${PWD}/g' ./config/prod-config.json" + } + } + + if (config_loader.SCM.TYPE == "gitlab") { + + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/dev-config.json" + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/stg-config.json" + sh "sed -i -- 's,{base-url},http://${config_loader.REPOSITORY.BASE_URL},g' ./config/prod-config.json" + + sh "sed -i -- 's/{private-token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/dev-config.json" + sh "sed -i -- 's/{private-token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/stg-config.json" + sh "sed -i -- 's/{private-token}/${config_loader.SCM.PRIVATE_TOKEN}/g' ./config/prod-config.json" + } + } if (service_name.trim() == "jazz_email") { echo "Updating parameter specific to platform email" @@ -344,9 +467,7 @@ def loadServiceConfigurationData() { sh "sed -i -- 's/{conf-region}/${region}/g' ./config/stg-config.json" sh "sed -i -- 's/{conf-region}/${region}/g' ./config/prod-config.json" } - - } - catch (e) { + } catch (e) { echo "error occured while loading service configuration: " + e.getMessage() error "error occured while loading service configuration: " + e.getMessage() } @@ -374,8 +495,9 @@ def setUtilModule(util){ utilModule = util } def setKinesisStream(config){ - if ((config['service'].trim() == "services-handler") || (config['service'].trim() == "events-handler") || - (config['service'] == "environment-event-handler") || (config['service'] == "deployments-event-handler")) { + if ((config['service'].trim() == "services-handler") || (config['service'].trim() == "events-handler") || + (config['service'] == "environment-event-handler") || (config['service'] == "deployments-event-handler" ) || + (config['service'] == "asset-event-handler") || ((config['service'] == "slack-event-handler") && (config_loader.SLACK.ENABLE_SLACK == "true"))) { def function_name = "${config_loader.INSTANCE_PREFIX}-${config['domain']}-${config['service']}-${current_environment}" def event_source_list = sh( script: "aws lambda list-event-source-mappings --query \"EventSourceMappings[?contains(FunctionArn, '$function_name')]\" --region \"$region\"", @@ -385,6 +507,7 @@ def setKinesisStream(config){ if (event_source_list == "[]") { sh "aws lambda create-event-source-mapping --event-source-arn arn:aws:kinesis:$region:$role_id:stream/${config_loader.INSTANCE_PREFIX}-events-hub-" + current_environment + " --function-name arn:aws:lambda:$region:$role_id:function:$function_name --starting-position LATEST --region " + region } + } } def setLogStreamPermission(config){ @@ -402,15 +525,4 @@ def setLogStreamPermission(config){ } } } - -def getApiToken(){ - withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.JENKINS.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]){ - User u = User.get(UNAME) - ApiTokenProperty t = u.getProperty(ApiTokenProperty.class) - def token = t.getApiToken() - return token - } -} - - return this diff --git a/jazz-build-module/service-metadata-loader.groovy b/builds/jazz-build-module/service-metadata-loader.groovy similarity index 100% rename from jazz-build-module/service-metadata-loader.groovy rename to builds/jazz-build-module/service-metadata-loader.groovy diff --git a/jazz-build-module/sonar-module.groovy b/builds/jazz-build-module/sonar-module.groovy similarity index 100% rename from jazz-build-module/sonar-module.groovy rename to builds/jazz-build-module/sonar-module.groovy diff --git a/jazz-build-module/utility-loader.groovy b/builds/jazz-build-module/utility-loader.groovy similarity index 79% rename from jazz-build-module/utility-loader.groovy rename to builds/jazz-build-module/utility-loader.groovy index 3a34d829ec..2c6188c1dd 100644 --- a/jazz-build-module/utility-loader.groovy +++ b/builds/jazz-build-module/utility-loader.groovy @@ -3,6 +3,7 @@ import groovy.json.JsonSlurperClassic import groovy.json.JsonOutput import groovy.transform.Field import static java.util.UUID.randomUUID +import jenkins.security.* echo "Utility module loaded successfully" @@ -74,8 +75,8 @@ def jazz_quiet_sh(cmd) { } /** -* Get Request Id -* @return +* Get Request Id +* @return */ def generateRequestId() { UUID uuid = UUID.randomUUID() @@ -112,6 +113,19 @@ def getAPIId(apiIdMapping, namespace, service) { } } +@NonCPS +def generateAssetMap(provider, providerId, type, service_config) { + + def serviceCtxMap = [ + service_type: service_config['type'], + provider: provider, + provider_id: providerId, + type: type, + created_by: service_config['created_by'] + ] + return serviceCtxMap; +} + /** getAPIIdForCore is a helper method to get apiId for jazz core services */ @@ -121,11 +135,19 @@ def getAPIIdForCore(apiIdMapping) { /** * Set config_loader - * @return + * @return */ def setConfigLoader(configLoader) { config_loader = configLoader } +def getApiToken(){ + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: config_loader.JENKINS.CREDENTIAL_ID, passwordVariable: 'PWD', usernameVariable: 'UNAME']]){ + User u = User.get(UNAME) + ApiTokenProperty t = u.getProperty(ApiTokenProperty.class) + def token = t.getApiToken() + return token + } +} return this diff --git a/jenkins-build-pack-api/Jenkinsfile b/builds/jenkins-build-pack-api/Jenkinsfile similarity index 85% rename from jenkins-build-pack-api/Jenkinsfile rename to builds/jenkins-build-pack-api/Jenkinsfile index 66ea9024c7..b27dfd9710 100644 --- a/jenkins-build-pack-api/Jenkinsfile +++ b/builds/jenkins-build-pack-api/Jenkinsfile @@ -33,7 +33,7 @@ node() { def jazz_prod_api_id = utilModule.getAPIIdForCore(configLoader.AWS.API["PROD"]) g_base_url = "https://${jazz_prod_api_id}.execute-api.${configLoader.AWS.REGION}.amazonaws.com/prod" - g_base_url_for_swagger = "http://editor.swagger.io/?url=http://${configLoader.AWS.S3.API_DOC}.s3-website-${configLoader.AWS.REGION}.amazonaws.com/" + g_base_url_for_swagger = "http://${configLoader.AWS.S3.API_DOC}.s3-website-${configLoader.AWS.REGION}.amazonaws.com/" echo "Build triggered via branch: " + params.scm_branch @@ -138,8 +138,6 @@ node() { } } - - def requestId = utilModule.generateRequestId() if (requestId != null) { events.setRequestId(requestId) @@ -225,6 +223,9 @@ node() { def envBucketKey = "${env_key}${configLoader.JAZZ.S3_BUCKET_NAME_SUFFIX}" sh "serverless deploy --stage ${environment_logical_id} -v --bucket ${configLoader.AWS.S3[envBucketKey]}" + def lambdaARN = getLambdaARN(stackName); + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", lambdaARN, "lambda", config), environment_logical_id); + if (fileExists('swagger/swagger.json')) { echo "Generating swagger file for environment: ${env_key}" @@ -244,12 +245,24 @@ node() { sh "aws apigateway put-rest-api --rest-api-id ${api_id} --mode merge --parameters basepath=prepend --body 'file://swagger/swagger.json'" + " --profile cloud-api" sh "aws apigateway create-deployment --rest-api-id ${api_id} --stage-name ${current_environment} --profile cloud-api" sh "aws apigateway tag-resource --resource-arn arn:aws:apigateway:${configLoader.AWS.REGION}::/restapis/${api_id}/stages/${current_environment} --tags Application=Jazz,JazzInstance=${configLoader.INSTANCE_PREFIX} --profile cloud-api" - if (current_environment == 'prod' || config['domain'] == 'jazz') { + + if("${configLoader.JAZZ.API_DETAILED_MONITORING}" == "true") { + sh "aws apigateway update-stage --rest-api-id ${api_id} --stage-name ${current_environment} --patch-operations op=replace,path=/*/*/metrics/enabled,value=true --region ${configLoader.AWS.REGION}" + } else { + sh "aws apigateway update-stage --rest-api-id ${api_id} --stage-name ${current_environment} --patch-operations op=replace,path=/*/*/metrics/enabled,value=false --region ${configLoader.AWS.REGION}" + } + if (current_environment == 'prod' || config['domain'] == 'jazz') { endpointUrl = "https://${apiHostName}/${current_environment}/${config['domain']}/${config['service']}" } else { endpointUrl = "https://${apiHostName}/${current_environment}/${environment_logical_id}/${config['domain']}/${config['service']}" } + def apiArns = getAPIGatewayResourceARNs(api_id, environment_logical_id) + if(apiArns) { + for (arn in apiArns) { + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", arn, "apigateway", config), environment_logical_id); + } + } if (domain != "jazz") { createSubscriptionFilters(stackName, configLoader.AWS.REGION, roleId); @@ -259,14 +272,12 @@ node() { sh "aws s3 cp swagger/ s3://${configLoader.AWS.S3.API_DOC}/${domain}/${config['service']}/${environment_logical_id} --recursive " echo "completed deployment........." - def svc_status = "Your service endpoint for ${current_environment} environment: ${endpointUrl} \n\nView and test your API here: ${g_base_url_for_swagger}${domain}/${service}/${environment_logical_id}/swagger.json" + def swaggerDocUrl = "${g_base_url_for_swagger}${domain}/${service}/${environment_logical_id}/swagger.json" + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", swaggerDocUrl, "swagger_url", config), environment_logical_id); + def svc_status = "Your service endpoint for ${current_environment} environment: ${endpointUrl} \n\nView and test your API here: ${configLoader.JAZZ.SWAGGER.EDITOR_URL}${swaggerDocUrl}" send_status_email(config, 'COMPLETED', svc_status) } - - if (domain && domain == "jazz") { - serviceConfigdata.setLogStreamPermission(config) - } } } catch (ex) { events.sendFailureEvent('UPDATE_ENVIRONMENT', ex.getMessage(), environmentDeploymentMetadata.generateEnvironmentMap("deployment_failed", environment_logical_id), environment_logical_id) @@ -276,6 +287,8 @@ node() { } environmentDeploymentMetadata.setEnvironmentEndpoint(endpointUrl) def serviceContext = [created_by : config['created_by'], deployed_by: gitCommitOwner] + + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", endpointUrl, "endpoint_url", config), environment_logical_id); events.sendCompletedEvent('UPDATE_ENVIRONMENT', 'Environment Update event for deployment completion', environmentDeploymentMetadata.generateEnvironmentMap("deployment_completed", environment_logical_id), environment_logical_id) events.sendCompletedEvent('UPDATE_DEPLOYMENT', 'Deployment completion Event for stage deployment', environmentDeploymentMetadata.generateDeploymentMap("successful", environment_logical_id, gitCommitHash), environment_logical_id) events.sendCompletedEvent('DEPLOY_TO_AWS', 'successfully deployed services to AWS', serviceContext, environment_logical_id) @@ -284,6 +297,113 @@ node() { }//dir ends here } +def getLambdaARN(String stackName) { + def ARN = ""; + + try { + def cloudformation_resources = ""; + cloudformation_resources = sh(returnStdout: true, script: "aws cloudformation describe-stacks --output json --stack-name ${stackName} --profile cloud-api") + + def parsedObject = parseJson(cloudformation_resources); + def outputs = parsedObject.Stacks[0].Outputs; + + for (output in outputs) { + if (output.OutputKey == "HandlerLambdaFunctionQualifiedArn") { + ARN = output.OutputValue + } + } + } catch (ex) { + error ex.getMessage(); + } + + return ARN; +} + +/** + * Get API Resource Arns + * + */ +def getAPIGatewayResourceARNs(apiId, deployStg){ + def basePath = getBasePath() + echo "basePath : $basePath" + basePath = basePath.replaceAll("^api/", "/"); + if(!basePath.startsWith("/")) { + basePath = "/"+basePath + } + def resourceArns = [] + def resourcesMap = createPathMethodList() //Returns a list maps of path and methods + if(resourcesMap) { + for (_map in resourcesMap){ + for (path in _map) { + def arn = createApiGatewayResourceArn(apiId, deployStg, path.value, path.key, basePath) + resourceArns.add(arn) + } + } + } + echo "resourceArns : $resourceArns" + return resourceArns; +} + +def getBasePath() { + + def propValue = "/" + + if (fileExists('swagger/swagger.json')) { + def swaggerFile = readFile('swagger/swagger.json').trim() + def slurper = new groovy.json.JsonSlurper() + def result = slurper.parseText(swaggerFile) + + propValue = result.basePath + } + def propVal = propValue.replace( /{domain}/, '' ).trim() + if (propVal.startsWith('/')) { + propVal = propVal.substring(1) + } + echo "getBasePath : $propValue -> $propVal" + return propVal +} + +//Creates a list consisting of all path-method combination from the swagger which is serializable. +def createPathMethodList() { //Creates a list consisting of all path-method combination from the swagger + def swaggerFile = readFile('swagger/swagger.json').trim() + def lazyMap = new groovy.json.JsonSlurper().parseText(swaggerFile) + def jsonMap = [:] + jsonMap.putAll(lazyMap.paths) + def composedList = [] + + for (path in jsonMap){ + def pathKey = path.key + def pathVal = [:] + pathVal.putAll(path.value) + + //loop through all methods in path + for (method in pathVal){ + def methodVal = method.key.toUpperCase() + def pathMap = [:] + pathMap[pathKey] = methodVal + composedList.add(pathMap) + } + } + echo "composedList : $composedList" + return composedList; +} + +/** + * create apigateway arns pattern + */ +def createApiGatewayResourceArn(apiId, deployStg, method, path, basePath) { + def apiResourceArn = "" + def _region = configLoader.AWS.REGION + def _account = configLoader.AWS.ACCOUNTID + def _apiId = apiId + def _stgName = deployStg + def _method = method + def _path = path + def _basePath = basePath + apiResourceArn = "arn:aws:execute-api:"+_region+":"+_account+":"+_apiId+"/"+_stgName+"/"+_method+_basePath+_path + echo "apiResourceArn : $apiResourceArn" + return apiResourceArn; +} /** Update context stage to use the dev properties file. */ @@ -685,7 +805,7 @@ def send_status_email(config, build_status, email_content) { */ def runValidation(String runtime) { if (runtime.indexOf("nodejs") > -1) { - echo "running validations for $runtime" + echo "running validations for $runtime" sh "jshint *.js" } else if (runtime.indexOf("java") > -1) { echo "running validations for $runtime" diff --git a/jenkins-build-pack-api/README.md b/builds/jenkins-build-pack-api/README.md similarity index 100% rename from jenkins-build-pack-api/README.md rename to builds/jenkins-build-pack-api/README.md diff --git a/jenkins-build-pack-api/build.jenkins-build-pack b/builds/jenkins-build-pack-api/build.jenkins-build-pack similarity index 100% rename from jenkins-build-pack-api/build.jenkins-build-pack rename to builds/jenkins-build-pack-api/build.jenkins-build-pack diff --git a/jenkins-build-pack-lambda/Jenkinsfile b/builds/jenkins-build-pack-lambda/Jenkinsfile similarity index 97% rename from jenkins-build-pack-lambda/Jenkinsfile rename to builds/jenkins-build-pack-lambda/Jenkinsfile index 1a03b01e12..c2d566ddcc 100644 --- a/jenkins-build-pack-lambda/Jenkinsfile +++ b/builds/jenkins-build-pack-lambda/Jenkinsfile @@ -229,6 +229,14 @@ node() { // Generate serverless yml file with domain added in function name echo "Generate deployment env with domain" + if(isScheduleEnabled) { + def eventsArns = getEventsArn(config, current_environment) + for (def i = 0; i < eventsArns.size(); i++) { + def arn = eventsArns[i] + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", arn, "cloudwatch_event", config), environment_logical_id); + } + } + writeServerlessFile(config, current_environment) echo "setting lambda execution role as ${configLoader.AWS.ROLEID}"; @@ -238,7 +246,8 @@ node() { sh "serverless deploy --stage ${environment_logical_id} -v --bucket ${configLoader.AWS.S3[envBucketKey]}" lambdaARN = getLambdaARN(stackName) - events.sendCompletedEvent('CREATE_ASSET', null, generateAssetMap("aws", lambdaARN, config["type"], config['created_by']), environment_logical_id); + events.sendCompletedEvent('CREATE_ASSET', null, utilModule.generateAssetMap("aws", lambdaARN, "lambda", config), environment_logical_id); + echo "lambdaARN: ${lambdaARN}" // reset Credentials resetCredentials() @@ -246,12 +255,14 @@ node() { createSubscriptionFilters(stackName, configLoader.AWS.REGION, roleId); } - if (domain && domain == "jazz") { + serviceConfigdata.setLogStreamPermission(config) serviceConfigdata.setKinesisStream(config) } + def svc_response = echoServiceInfo(current_environment) send_status_email(config, 'COMPLETED', svc_response) + } catch (ex) { send_status_email(config, 'FAILED', '') events.sendFailureEvent('UPDATE_ENVIRONMENT', ex.getMessage(), environmentDeploymentMetadata.generateEnvironmentMap("deployment_failed", environment_logical_id), environment_logical_id) @@ -372,7 +383,7 @@ def buildLambda(String runtime) { virtualenv venv . venv/bin/activate pip install pytest - """ + """ } } @@ -688,14 +699,11 @@ def send_status_email(config, build_status, email_content) { * Function to get arns of the triggers/events configured for the Lambda. * */ -def getEventsArn(domain, service, env) { - echo "in getEventsArn - if domain, lambdaFnName: ${domain}-${service}-${env}" +def getEventsArn(config, env) { def eventsArn = [] try { - def lambdaFnName = service + "-" + env - if (domain) { - lambdaFnName = domain + "-" + lambdaFnName - } + def lambdaFnName = "${configLoader.INSTANCE_PREFIX}-${config['domain']}-${config['service']}" + def lambdaPolicyTxt = sh(script: "aws lambda get-policy --function-name $lambdaFnName --output json", returnStdout: true) def policyLists = null if (lambdaPolicyTxt) { @@ -755,19 +763,6 @@ def runValidation(String runtime) { } } -@NonCPS -def generateAssetMap(provider, providerId, type, created_by) { - - def serviceCtxMap = [ - provider: provider, - provider_id: providerId, - type: type, - created_by: created_by - ] - - return serviceCtxMap; -} - @NonCPS def parseJson(jsonString) { def lazyMap = new groovy.json.JsonSlurperClassic().parseText(jsonString) diff --git a/jenkins-build-pack-lambda/README.md b/builds/jenkins-build-pack-lambda/README.md similarity index 100% rename from jenkins-build-pack-lambda/README.md rename to builds/jenkins-build-pack-lambda/README.md diff --git a/jenkins-build-pack-lambda/build.jenkins-build-pack b/builds/jenkins-build-pack-lambda/build.jenkins-build-pack similarity index 100% rename from jenkins-build-pack-lambda/build.jenkins-build-pack rename to builds/jenkins-build-pack-lambda/build.jenkins-build-pack diff --git a/jenkins-build-pack-website/Jenkinsfile b/builds/jenkins-build-pack-website/Jenkinsfile similarity index 95% rename from jenkins-build-pack-website/Jenkinsfile rename to builds/jenkins-build-pack-website/Jenkinsfile index 32eebee9b2..77e9a9a2c2 100644 --- a/jenkins-build-pack-website/Jenkinsfile +++ b/builds/jenkins-build-pack-website/Jenkinsfile @@ -172,16 +172,20 @@ node() { asset_event = 'CREATE_ASSET' asset_event_message = 'create' } - events.sendStartedEvent(asset_event, "${asset_event_message} assets starts", context_map) + events.sendStartedEvent(asset_event, "${asset_event_message} assets starts", utilModule.generateAssetMap("aws", "arn:aws:s3:::${asset_info}/*", "s3", service_config)) try { sh "aws s3 sync ./app s3://${asset_info} --exclude \".git/*\" --exclude \".gitignore\" --exclude \"*.svg\"" sh "aws s3 sync ./app s3://${asset_info} --exclude \"*\" --include \"*.svg\" --no-guess-mime-type --content-type image/svg+xml" - + events.sendCompletedEvent(asset_event, null, utilModule.generateAssetMap("aws", "arn:aws:s3:::${asset_info}/*", "s3", service_config), environment); def url if (create_cloudfront_url == true) { updateOrCreateCF() - def cloudFrontDistribution = getCloudFrontDetails() - url = 'https://' + cloudFrontDistribution['Distribution'] + def cloudFrontDistribution = getCloudFrontARN() + cfArn = cloudFrontDistribution.ARN + events.sendCompletedEvent(asset_event, null, utilModule.generateAssetMap("aws", cfArn, "cloudfront", service_config), environment); + + def cloudFrontDistributionDetails = getCloudFrontDetails() + url = 'https://' + cloudFrontDistributionDetails['Distribution'] invalidateCloudFrontCache() generateBucketPolicy(true) @@ -201,7 +205,8 @@ node() { echo svc_status environmentDeploymentMetadata.setEnvironmentEndpoint(url) send_status_email('COMPLETED', svc_status) - events.sendCompletedEvent(asset_event, "${asset_event_message} assets completed", context_map) + + events.sendCompletedEvent(asset_event, "${asset_event_message} assets completed", utilModule.generateAssetMap("aws", url, "endpoint_url", service_config),environment) events.sendCompletedEvent('UPDATE_DEPLOYMENT', 'Deployment completion Event for $environment deployment', environmentDeploymentMetadata.generateDeploymentMap("successful", environment, gitCommitHash), environment) events.sendCompletedEvent('UPDATE_ENVIRONMENT', 'Environment Update event for deployment completion', environmentDeploymentMetadata.generateEnvironmentMap("deployment_completed", environment), environment) events.sendCompletedEvent('DEPLOY_TO_AWS', 'deployment completed', context_map) @@ -355,6 +360,29 @@ def listDistribution(){ } } +/** + * Get CloudFront ARN + */ +def getCloudFrontARN() { + def cfInfo = [:] + try { + def cloudFrontId = ""; + def cloudFrontDetailsArray = getCloudFrontDetails(); + cloudFrontId = cloudFrontDetailsArray.Id; + + def cloudFrontDistributionDetails = sh(returnStdout: true, script: "aws cloudfront get-distribution --output json --id $cloudFrontId") + echo "cloudFrontDistributionDetails... $cloudFrontDistributionDetails" + def _map = jsonParse(cloudFrontDistributionDetails) + if(_map) { + cfInfo << [ARN: _map.Distribution.ARN] + cfInfo << [DomainName: _map.Distribution.DomainName] + } + } catch(error) { + echo "error $error" + } + return cfInfo; +} + /** * Get CloudFront Details */ diff --git a/jenkins-build-pack-website/README.md b/builds/jenkins-build-pack-website/README.md similarity index 100% rename from jenkins-build-pack-website/README.md rename to builds/jenkins-build-pack-website/README.md diff --git a/jenkins-build-pack-website/build.jenkins-build-pack b/builds/jenkins-build-pack-website/build.jenkins-build-pack similarity index 100% rename from jenkins-build-pack-website/build.jenkins-build-pack rename to builds/jenkins-build-pack-website/build.jenkins-build-pack diff --git a/jenkins-build-pack-website/ip_list.json b/builds/jenkins-build-pack-website/ip_list.json similarity index 100% rename from jenkins-build-pack-website/ip_list.json rename to builds/jenkins-build-pack-website/ip_list.json diff --git a/serverless-config-pack/README.md b/builds/serverless-config-pack/README.md similarity index 100% rename from serverless-config-pack/README.md rename to builds/serverless-config-pack/README.md diff --git a/serverless-config-pack/serverless-java.yml b/builds/serverless-config-pack/serverless-java.yml similarity index 100% rename from serverless-config-pack/serverless-java.yml rename to builds/serverless-config-pack/serverless-java.yml diff --git a/serverless-config-pack/serverless-nodejs.yml b/builds/serverless-config-pack/serverless-nodejs.yml similarity index 100% rename from serverless-config-pack/serverless-nodejs.yml rename to builds/serverless-config-pack/serverless-nodejs.yml diff --git a/serverless-config-pack/serverless-python.yml b/builds/serverless-config-pack/serverless-python.yml similarity index 100% rename from serverless-config-pack/serverless-python.yml rename to builds/serverless-config-pack/serverless-python.yml diff --git a/service-onboarding-build-pack/Jenkinsfile b/builds/service-onboarding-build-pack/Jenkinsfile similarity index 93% rename from service-onboarding-build-pack/Jenkinsfile rename to builds/service-onboarding-build-pack/Jenkinsfile index 31ddabc1bd..44471b56e0 100644 --- a/service-onboarding-build-pack/Jenkinsfile +++ b/builds/service-onboarding-build-pack/Jenkinsfile @@ -140,7 +140,7 @@ node { for (item in config) { serviceMetadataJson[item.key] = item.value } - for (item in config.catalog_metadata) { + for (item in service_config.catalog_metadata) { serviceMetadataJson[item.key] = item.value } @@ -163,15 +163,11 @@ node { dir(service_template) { events.sendStartedEvent("MODIFY_TEMPLATE", 'modify template starts', context_map) - //Clearing depoyment-env.yml + + //Clearing depoyment-env.yml sh "echo -n > ./deployment-env.yml" // Add service_id in deployment-env.yml - sh "echo 'service_id: $service_id' >> ./deployment-env.yml" - - sh "sed -i -- 's/{service_name}/${service_config['service']}/g' ./Jenkinsfile" - sh "sed -i -- 's/{domain}/${service_config['domain']}/g' ./Jenkinsfile" - } events.sendCompletedEvent('MODIFY_TEMPLATE', 'modify template completed', context_map) } @@ -221,16 +217,9 @@ node { { sh "ls -lart" - withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: repo_credential_id, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { + withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: repo_credential_id, passwordVariable: 'PWD', usernameVariable: 'UNAME']]) { try { events.sendStartedEvent("ADD_WEBHOOK", 'service repo creation starts', context_map) - def scm_webhook_target_url - if (configLoader.SCM.TYPE == "gitlab") { - scm_webhook_target_url = "http://${configLoader.JENKINS.USERNAME}:${configLoader.JENKINS.JENKINS_PASSWORD}@${JenkinsLocationConfiguration.get().getUrl().split('/')[2]}/project/Gitlab-Trigger-Job" - } else if (configLoader.SCM.TYPE == "bitbucket") { - scm_webhook_target_url = JenkinsLocationConfiguration.get().getUrl() + "/bitbucket-scmsource-hook/notify" - } - scmModule.addWebhook(repo_name, "notify-jenkins", scm_webhook_target_url) scmModule.addWebhook(repo_name, "notify-events", "${g_base_url}/jazz/scm-webhook") events.sendCompletedEvent('ADD_WEBHOOK', 'modify template completed', context_map) } @@ -434,7 +423,7 @@ def loadBuildModules(buildModuleUrl){ configModule = load "config-loader.groovy" configLoader = configModule.initialize(resultJsonString) echo "config loader loaded successfully." - + scmModule = load "scm-module.groovy" scmModule.initialize(configLoader) echo "SCM module loaded successfully." @@ -445,7 +434,7 @@ def loadBuildModules(buildModuleUrl){ serviceMetadataLoader = load "service-metadata-loader.groovy" serviceMetadataLoader.initialize(configLoader) echo "Service metadata loader module loaded successfully." - + utilModule = load "utility-loader.groovy" } } @@ -462,4 +451,4 @@ def getBuildModuleUrl() { def jsonParse(jsonString) { def nonLazyMap = new groovy.json.JsonSlurperClassic().parseText(jsonString) return nonLazyMap -} \ No newline at end of file +} diff --git a/service-onboarding-build-pack/branch_permissions_payload.json b/builds/service-onboarding-build-pack/branch_permissions_payload.json similarity index 100% rename from service-onboarding-build-pack/branch_permissions_payload.json rename to builds/service-onboarding-build-pack/branch_permissions_payload.json diff --git a/website-distribution-pack/distribution_config.json b/builds/website-distribution-pack/distribution_config.json similarity index 100% rename from website-distribution-pack/distribution_config.json rename to builds/website-distribution-pack/distribution_config.json diff --git a/website-distribution-pack/distribution_config_with_tags.json b/builds/website-distribution-pack/distribution_config_with_tags.json similarity index 100% rename from website-distribution-pack/distribution_config_with_tags.json rename to builds/website-distribution-pack/distribution_config_with_tags.json diff --git a/jazz-ui/.editorconfig b/core/jazz-ui/.editorconfig similarity index 100% rename from jazz-ui/.editorconfig rename to core/jazz-ui/.editorconfig diff --git a/jazz-ui/.gitignore b/core/jazz-ui/.gitignore similarity index 90% rename from jazz-ui/.gitignore rename to core/jazz-ui/.gitignore index ded97c4823..13b25ba5fc 100644 --- a/jazz-ui/.gitignore +++ b/core/jazz-ui/.gitignore @@ -33,7 +33,8 @@ npm-debug.log */package-lock.json testem.log /typings - +src/environments/environment.local.ts +package-lock.json # e2e /e2e/*.js /e2e/*.map diff --git a/jazz-ui/Jenkinsfile_Platform b/core/jazz-ui/Jenkinsfile_Platform similarity index 98% rename from jazz-ui/Jenkinsfile_Platform rename to core/jazz-ui/Jenkinsfile_Platform index cd95c36bc9..0486d16c8e 100644 --- a/jazz-ui/Jenkinsfile_Platform +++ b/core/jazz-ui/Jenkinsfile_Platform @@ -74,7 +74,7 @@ node () { dir('jazz-ui') { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: config_loader.REPOSITORY.CREDENTIAL_ID, url: scmModule.getCoreRepoCloneUrl("jazz-ui")]]]) def jazz_prod_api_id = utilModule.getAPIIdForCore(config_loader.AWS.API["PROD"]) - + if(config_loader.UI_CONFIG.service_tabs.overview) sh "sed -i 's/{overview}/overview/g' ./src/environments/environment.oss.ts"; if(config_loader.UI_CONFIG.service_tabs.access_control) sh "sed -i 's/{access control}/access control/g' ./src/environments/environment.oss.ts"; if(config_loader.UI_CONFIG.service_tabs.metrics) sh "sed -i 's/{metrics}/metrics/g' ./src/environments/environment.oss.ts"; @@ -90,7 +90,9 @@ node () { sh "sed -i 's/{API_GATEWAY_KEY_PROD}/${jazz_prod_api_id}/g' ./src/environments/environment.oss.ts" sh "sed -i 's/{inst_region}/${config_loader.AWS.REGION}/g' ./src/environments/environment.oss.ts" sh "sed -i 's/{multi_env}/${config_loader.UI_CONFIG.feature.multi_env}/g' ./src/environments/environment.oss.ts" - + + sh "sed -i s!{swagger_editor}!${config_loader.JAZZ.SWAGGER.EDITOR_URL}!g ./src/environments/environment.oss.ts" + def envFile = readFile('./src/environments/environment.oss.ts'); echo "displaying env file :" echo "$envFile"; @@ -143,7 +145,7 @@ def loadBuildModules(buildModuleUrl){ scmModule = load "scm-module.groovy" scmModule.initialize(config_loader) - + utilModule = load "utility-loader.groovy" } }catch(ex) { @@ -158,4 +160,4 @@ def getBuildModuleUrl() { }else { return "http://${repo_base}/scm/${repo_core}/jazz-build-module.git" } -} \ No newline at end of file +} diff --git a/jazz-ui/LICENSE b/core/jazz-ui/LICENSE similarity index 100% rename from jazz-ui/LICENSE rename to core/jazz-ui/LICENSE diff --git a/jazz-ui/README.md b/core/jazz-ui/README.md similarity index 100% rename from jazz-ui/README.md rename to core/jazz-ui/README.md diff --git a/jazz-ui/angular-cli.json b/core/jazz-ui/angular-cli.json similarity index 89% rename from jazz-ui/angular-cli.json rename to core/jazz-ui/angular-cli.json index e007769b18..7eaf3cabb7 100644 --- a/jazz-ui/angular-cli.json +++ b/core/jazz-ui/angular-cli.json @@ -28,13 +28,16 @@ "../node_modules/jquery/dist/jquery.min.js", "../node_modules/bootstrap/dist/js/bootstrap.min.js", - "../node_modules/ion-rangeslider/js/ion.rangeSlider.min.js" + "../node_modules/ion-rangeslider/js/ion.rangeSlider.min.js", + "../node_modules/kotlin/kotlin.js/", + "../node_modules/really-relaxed-json/src/umd.bundle.js" ], "environmentSource": "environments/environment.ts", "environments": { "dev": "environments/environment.ts", "internal": "environments/environment.internal.ts", - "oss": "environments/environment.oss.ts" + "oss": "environments/environment.oss.ts", + "local": "environments/environment.local.ts" } }], diff --git a/jazz-ui/build.website b/core/jazz-ui/build.website similarity index 100% rename from jazz-ui/build.website rename to core/jazz-ui/build.website diff --git a/jazz-ui/e2e/app.e2e-spec.ts b/core/jazz-ui/e2e/app.e2e-spec.ts similarity index 100% rename from jazz-ui/e2e/app.e2e-spec.ts rename to core/jazz-ui/e2e/app.e2e-spec.ts diff --git a/jazz-ui/e2e/app.po.ts b/core/jazz-ui/e2e/app.po.ts similarity index 100% rename from jazz-ui/e2e/app.po.ts rename to core/jazz-ui/e2e/app.po.ts diff --git a/jazz-ui/e2e/tsconfig.json b/core/jazz-ui/e2e/tsconfig.json similarity index 100% rename from jazz-ui/e2e/tsconfig.json rename to core/jazz-ui/e2e/tsconfig.json diff --git a/jazz-ui/karma.conf.js b/core/jazz-ui/karma.conf.js similarity index 100% rename from jazz-ui/karma.conf.js rename to core/jazz-ui/karma.conf.js diff --git a/jazz-ui/ng2-datepicker.textClipping b/core/jazz-ui/ng2-datepicker.textClipping similarity index 100% rename from jazz-ui/ng2-datepicker.textClipping rename to core/jazz-ui/ng2-datepicker.textClipping diff --git a/jazz-ui/package.json b/core/jazz-ui/package.json similarity index 94% rename from jazz-ui/package.json rename to core/jazz-ui/package.json index f572ab4c8f..15ad67bdf8 100644 --- a/jazz-ui/package.json +++ b/core/jazz-ui/package.json @@ -27,6 +27,7 @@ "@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.26", "@ng-idle/core": "2.0.0-beta.12", "@ng-idle/keepalive": "2.0.0-beta.12", + "@types/lodash": "^4.14.111", "angular2-moment": "^1.6.0", "angular2-number-picker": "^0.8.8", "angular2-toaster": "^2.0.0", @@ -35,11 +36,14 @@ "core-js": "^2.4.1", "d3": "^4.9.1", "d3-tip": "^0.7.1", + "kotlin": "^1.2.50", + "lodash": "^4.17.10", "ng-idle": "~1.3.2", "ng2-charts": "^1.6.0", "ng2-dropdown": "0.0.21", "ng2-ion-range-slider": "^1.0.3", "ng2-popover": "0.0.14", + "really-relaxed-json": "^0.2.24", "rxjs": "^5.4.1" }, "devDependencies": { diff --git a/jazz-ui/protractor.conf.js b/core/jazz-ui/protractor.conf.js similarity index 100% rename from jazz-ui/protractor.conf.js rename to core/jazz-ui/protractor.conf.js diff --git a/jazz-ui/src/app/IShared.ts b/core/jazz-ui/src/app/IShared.ts similarity index 100% rename from jazz-ui/src/app/IShared.ts rename to core/jazz-ui/src/app/IShared.ts diff --git a/jazz-ui/src/app/SharedService.service.ts b/core/jazz-ui/src/app/SharedService.service.ts similarity index 100% rename from jazz-ui/src/app/SharedService.service.ts rename to core/jazz-ui/src/app/SharedService.service.ts diff --git a/jazz-ui/src/app/adv-filter.directive.ts b/core/jazz-ui/src/app/adv-filter.directive.ts similarity index 100% rename from jazz-ui/src/app/adv-filter.directive.ts rename to core/jazz-ui/src/app/adv-filter.directive.ts diff --git a/jazz-ui/src/app/advanced-filter.service.spec.ts b/core/jazz-ui/src/app/advanced-filter.service.spec.ts similarity index 100% rename from jazz-ui/src/app/advanced-filter.service.spec.ts rename to core/jazz-ui/src/app/advanced-filter.service.spec.ts diff --git a/jazz-ui/src/app/advanced-filter.service.ts b/core/jazz-ui/src/app/advanced-filter.service.ts similarity index 100% rename from jazz-ui/src/app/advanced-filter.service.ts rename to core/jazz-ui/src/app/advanced-filter.service.ts diff --git a/jazz-ui/src/app/app.component.html b/core/jazz-ui/src/app/app.component.html similarity index 100% rename from jazz-ui/src/app/app.component.html rename to core/jazz-ui/src/app/app.component.html diff --git a/jazz-ui/src/app/app.component.scss b/core/jazz-ui/src/app/app.component.scss similarity index 100% rename from jazz-ui/src/app/app.component.scss rename to core/jazz-ui/src/app/app.component.scss diff --git a/jazz-ui/src/app/app.component.spec.ts b/core/jazz-ui/src/app/app.component.spec.ts similarity index 100% rename from jazz-ui/src/app/app.component.spec.ts rename to core/jazz-ui/src/app/app.component.spec.ts diff --git a/jazz-ui/src/app/app.component.ts b/core/jazz-ui/src/app/app.component.ts similarity index 100% rename from jazz-ui/src/app/app.component.ts rename to core/jazz-ui/src/app/app.component.ts diff --git a/jazz-ui/src/app/app.config.ts b/core/jazz-ui/src/app/app.config.ts similarity index 100% rename from jazz-ui/src/app/app.config.ts rename to core/jazz-ui/src/app/app.config.ts diff --git a/jazz-ui/src/app/app.module.ts b/core/jazz-ui/src/app/app.module.ts similarity index 93% rename from jazz-ui/src/app/app.module.ts rename to core/jazz-ui/src/app/app.module.ts index f718b773d8..b9e0b08b75 100644 --- a/jazz-ui/src/app/app.module.ts +++ b/core/jazz-ui/src/app/app.module.ts @@ -14,11 +14,8 @@ import { AuthenticationService, RouteGuard, DataCacheService, RequestService, Me import { SharedService } from './SharedService.service'; import { CronParserService } from './core/helpers'; import { DropdownModule } from 'ng2-dropdown'; -import { PopoverModule } from 'ng2-popover'; import { AppComponent } from './app.component'; import { ConfigService, ConfigLoader } from './app.config'; -import { AdvancedFilterService } from './advanced-filter.service'; -import { IonRangeSliderModule } from 'ng2-ion-range-slider'; import { LandingComponent } from './pages/landing/landing.component'; import { TestApiComponent } from './pages/testapi/test-api.component'; import { Error404Component } from './pages/error404/error404.component'; diff --git a/jazz-ui/src/app/app.route.ts b/core/jazz-ui/src/app/app.route.ts similarity index 100% rename from jazz-ui/src/app/app.route.ts rename to core/jazz-ui/src/app/app.route.ts diff --git a/jazz-ui/src/app/core/helpers/cronparser.service.ts b/core/jazz-ui/src/app/core/helpers/cronparser.service.ts similarity index 100% rename from jazz-ui/src/app/core/helpers/cronparser.service.ts rename to core/jazz-ui/src/app/core/helpers/cronparser.service.ts diff --git a/jazz-ui/src/app/core/helpers/index.ts b/core/jazz-ui/src/app/core/helpers/index.ts similarity index 100% rename from jazz-ui/src/app/core/helpers/index.ts rename to core/jazz-ui/src/app/core/helpers/index.ts diff --git a/core/jazz-ui/src/app/core/helpers/relaxed-json.service.ts b/core/jazz-ui/src/app/core/helpers/relaxed-json.service.ts new file mode 100644 index 0000000000..1c9957cb57 --- /dev/null +++ b/core/jazz-ui/src/app/core/helpers/relaxed-json.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; + +declare let output; + +export class RelaxedJsonService { + + public getParser() { + return output.tv.twelvetone.rjson.RJsonParserFactory.Companion.getDefault().createParser(); + } + + public getPrinter() { + return output.tv.twelvetone.rjson.PrettyPrinter; + } +} \ No newline at end of file diff --git a/core/jazz-ui/src/app/core/helpers/session-storage.service.ts b/core/jazz-ui/src/app/core/helpers/session-storage.service.ts new file mode 100644 index 0000000000..f32eec718c --- /dev/null +++ b/core/jazz-ui/src/app/core/helpers/session-storage.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; + +declare let window; + +export class SessionStorageService { + + public setItem(key, value) { + return window.sessionStorage.setItem(key, value); + } + + public removeItem(key) { + return window.sessionStorage.removeItem(key); + } + + public clear() { + return window.sessionStorage.clear(); + } + + public getItem(key) { + return window.sessionStorage.getItem(key) + } +} \ No newline at end of file diff --git a/jazz-ui/src/app/core/pipes/safe-html.pipe.ts b/core/jazz-ui/src/app/core/pipes/safe-html.pipe.ts similarity index 100% rename from jazz-ui/src/app/core/pipes/safe-html.pipe.ts rename to core/jazz-ui/src/app/core/pipes/safe-html.pipe.ts diff --git a/jazz-ui/src/app/core/pipes/safe-url.pipe.ts b/core/jazz-ui/src/app/core/pipes/safe-url.pipe.ts similarity index 100% rename from jazz-ui/src/app/core/pipes/safe-url.pipe.ts rename to core/jazz-ui/src/app/core/pipes/safe-url.pipe.ts diff --git a/jazz-ui/src/app/core/services/authentication.service.spec.ts b/core/jazz-ui/src/app/core/services/authentication.service.spec.ts similarity index 100% rename from jazz-ui/src/app/core/services/authentication.service.spec.ts rename to core/jazz-ui/src/app/core/services/authentication.service.spec.ts diff --git a/jazz-ui/src/app/core/services/authentication.service.ts b/core/jazz-ui/src/app/core/services/authentication.service.ts similarity index 100% rename from jazz-ui/src/app/core/services/authentication.service.ts rename to core/jazz-ui/src/app/core/services/authentication.service.ts diff --git a/jazz-ui/src/app/core/services/datacache.service.ts b/core/jazz-ui/src/app/core/services/datacache.service.ts similarity index 100% rename from jazz-ui/src/app/core/services/datacache.service.ts rename to core/jazz-ui/src/app/core/services/datacache.service.ts diff --git a/jazz-ui/src/app/core/services/index.ts b/core/jazz-ui/src/app/core/services/index.ts similarity index 100% rename from jazz-ui/src/app/core/services/index.ts rename to core/jazz-ui/src/app/core/services/index.ts diff --git a/jazz-ui/src/app/core/services/message.service.ts b/core/jazz-ui/src/app/core/services/message.service.ts similarity index 100% rename from jazz-ui/src/app/core/services/message.service.ts rename to core/jazz-ui/src/app/core/services/message.service.ts diff --git a/jazz-ui/src/app/core/services/request.service.ts b/core/jazz-ui/src/app/core/services/request.service.ts similarity index 100% rename from jazz-ui/src/app/core/services/request.service.ts rename to core/jazz-ui/src/app/core/services/request.service.ts diff --git a/jazz-ui/src/app/core/services/route-guard.service.ts b/core/jazz-ui/src/app/core/services/route-guard.service.ts similarity index 100% rename from jazz-ui/src/app/core/services/route-guard.service.ts rename to core/jazz-ui/src/app/core/services/route-guard.service.ts diff --git a/jazz-ui/src/app/core/services/utils.service.ts b/core/jazz-ui/src/app/core/services/utils.service.ts similarity index 60% rename from jazz-ui/src/app/core/services/utils.service.ts rename to core/jazz-ui/src/app/core/services/utils.service.ts index 4ef65a1945..3668adcbc4 100644 --- a/jazz-ui/src/app/core/services/utils.service.ts +++ b/core/jazz-ui/src/app/core/services/utils.service.ts @@ -1,5 +1,6 @@ import {Injectable} from '@angular/core'; - +declare let Promise; +declare let Object; @Injectable() export class UtilsService { @@ -27,10 +28,29 @@ export class UtilsService { }; hyphenToSpace(input) { - return input.replace(/-/g, ' '); + return input ? input.replace(/-/g, ' ') : ''; } queryString(params) { return '?' + Object.keys(params).map(key => key + '=' + params[key]).join('&'); } + + setTimeoutPromise(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); + } + + clone(object) { + return JSON.parse(JSON.stringify(object)); + } + + unique(array, callback) { + let object = {}; + array.forEach((element, index, array) => { + object[callback(element, index, array)] = element; + }); + return Object.values(object) + } + + + } diff --git a/jazz-ui/src/app/environment-module/environment.module.ts b/core/jazz-ui/src/app/environment-module/environment.module.ts similarity index 79% rename from jazz-ui/src/app/environment-module/environment.module.ts rename to core/jazz-ui/src/app/environment-module/environment.module.ts index 752a8b6242..5df6f8030c 100644 --- a/jazz-ui/src/app/environment-module/environment.module.ts +++ b/core/jazz-ui/src/app/environment-module/environment.module.ts @@ -6,9 +6,7 @@ import { EnvAssetsSectionComponent } from '../pages/environment-assets/env-asset import { EnvDeploymentsSectionComponent } from '../pages/environment-deployment/env-deployments-section.component'; import { EnvCodequalitySectionComponent } from '../pages/environment-codequality/env-codequality-section.component'; import { EnvOverviewSectionComponent } from '../pages/environment-overview/env-overview-section.component'; -import { BrowserModule } from '@angular/platform-browser'; import { PopoverModule } from 'ng2-popover'; -import { ChartsModule } from 'ng2-charts'; import { FormsModule } from '@angular/forms'; import { DropdownModule } from 'ng2-dropdown'; import { DatePickerModule } from '../primary-components/daterange-picker/ng2-datepicker'; @@ -18,6 +16,11 @@ import { SharedModule } from '../shared-module/shared.module'; import { RouterModule } from '@angular/router'; import { routes } from './environment.route'; import { AdvancedFilterService } from '../advanced-filter.service'; +import {ChartsModule} from "ng2-charts"; +import {EnvTryServiceSidebarComponent} from '../secondary-components/env-try-service-sidebar/env-try-service-sidebar.component'; +import {SessionStorageService} from "../core/helpers/session-storage.service"; +import {RelaxedJsonService} from "../core/helpers/relaxed-json.service"; + @NgModule({ imports: [ CommonModule, @@ -38,8 +41,13 @@ import { AdvancedFilterService } from '../advanced-filter.service'; EnvCodequalitySectionComponent, EnvLogsSectionComponent, EnvOverviewSectionComponent, + EnvTryServiceSidebarComponent ], - providers: [AdvancedFilterService], + providers: [ + AdvancedFilterService, + SessionStorageService, + RelaxedJsonService, + ] }) export class EnvironmentModule { diff --git a/jazz-ui/src/app/environment-module/environment.route.ts b/core/jazz-ui/src/app/environment-module/environment.route.ts similarity index 100% rename from jazz-ui/src/app/environment-module/environment.route.ts rename to core/jazz-ui/src/app/environment-module/environment.route.ts diff --git a/jazz-ui/src/app/oss/oss.module.ts b/core/jazz-ui/src/app/oss/oss.module.ts similarity index 100% rename from jazz-ui/src/app/oss/oss.module.ts rename to core/jazz-ui/src/app/oss/oss.module.ts diff --git a/jazz-ui/src/app/pages/data-service/data.service.ts b/core/jazz-ui/src/app/pages/data-service/data.service.ts similarity index 100% rename from jazz-ui/src/app/pages/data-service/data.service.ts rename to core/jazz-ui/src/app/pages/data-service/data.service.ts diff --git a/jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html b/core/jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html similarity index 96% rename from jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html rename to core/jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html index 06837145ca..ba5acf5c25 100644 --- a/jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html +++ b/core/jazz-ui/src/app/pages/environment-assets/env-assets-section.component.html @@ -68,19 +68,22 @@
Please enter a valid email Id
{{utils.hyphenToSpace(selectedMetric.name)}}
-{{filterData.headerMessage}}
-