diff --git a/kubernetes/ansible/badger.yml b/kubernetes/ansible/badger.yml deleted file mode 100644 index e9634a5ea4e0b9647f0f83cd95f03fd4d478a39b..0000000000000000000000000000000000000000 --- a/kubernetes/ansible/badger.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- hosts: local - gather_facts: no - vars_files: - - "{{inventory_dir}}/secrets.yml" - environment: - KUBECONFIG: "{{ kubeconfig_path }}" - roles: - - deploy-badger diff --git a/kubernetes/ansible/deploy_core_service.yml b/kubernetes/ansible/deploy_core_service.yml index ff7b9629e80fb985ffc9442af80f72e2f14aef53..0c0782b8eb9d960e43a9abd4d705de721fd74cbe 100644 --- a/kubernetes/ansible/deploy_core_service.yml +++ b/kubernetes/ansible/deploy_core_service.yml @@ -7,3 +7,38 @@ KUBECONFIG: "{{ kubeconfig_path }}" roles: - sunbird-deploy + tags: + - deploy-core + +- hosts: local + gather_facts: no + vars_files: + - "{{inventory_dir}}/secrets.yml" + environment: + KUBECONFIG: "{{ kubeconfig_path }}" + roles: + - deploy-player + tags: + - deploy-player + +- hosts: local + gather_facts: no + vars_files: + - "{{inventory_dir}}/secrets.yml" + environment: + KUBECONFIG: "{{ kubeconfig_path }}" + roles: + - deploy-content + tags: + - deploy-content + +- hosts: local + gather_facts: no + vars_files: + - "{{inventory_dir}}/secrets.yml" + environment: + KUBECONFIG: "{{ kubeconfig_path }}" + roles: + - deploy-badger + tags: + - deploy-badger \ No newline at end of file diff --git a/kubernetes/ansible/player.yml b/kubernetes/ansible/player.yml deleted file mode 100644 index 8a0f5ad92e4751bc9741be18e94389cb63b4feef..0000000000000000000000000000000000000000 --- a/kubernetes/ansible/player.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- hosts: local - gather_facts: no - vars_files: - - "{{inventory_dir}}/secrets.yml" - environment: - KUBECONFIG: "{{ kubeconfig_path }}" - roles: - - deploy-player diff --git a/kubernetes/ansible/roles/deploy-content/tasks/main.yml b/kubernetes/ansible/roles/deploy-content/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..2e3953f0e745cebb3e9739c8a5a884d7e97e44e0 --- /dev/null +++ b/kubernetes/ansible/roles/deploy-content/tasks/main.yml @@ -0,0 +1,26 @@ +- name: Create a directory if it does not exist + file: + path: /var/lib/jenkins/content_config + state: directory + +- name: copy new index file + template: src="application.conf" dest="/var/lib/jenkins/content_config/application.conf" mode=0644 + +- name: remove whitespaces in index file + shell: 'sed -i s/\\s\\+$//e /var/lib/jenkins/content_config/application.conf' + +- name: Remove the existing content config + shell: "kubectl delete configmap content-config --namespace={{namespace}}" + ignore_errors: true + +- name: Create content service configmap + shell: "kubectl create configmap content-config --from-file=/var/lib/jenkins/content_config/application.conf --namespace={{namespace}}" + +- name: rename template + template: + src: "{{ chart_path }}/values.j2" + dest: "{{ chart_path }}/values.yaml" + +- name: helm install + shell: helm upgrade --install {{ release_name }} {{ chart_path }} + #shell: helm template {{ chart_path }} > /tmp/test.yaml \ No newline at end of file diff --git a/kubernetes/ansible/roles/deploy-content/templates/application.conf b/kubernetes/ansible/roles/deploy-content/templates/application.conf new file mode 100644 index 0000000000000000000000000000000000000000..1888dec88a81596aa4735871085e4a4c1718d975 --- /dev/null +++ b/kubernetes/ansible/roles/deploy-content/templates/application.conf @@ -0,0 +1,328 @@ +# This is the main configuration file for the application. +# https://www.playframework.com/documentation/latest/ConfigFile +# ~~~~~ +# Play uses HOCON as its configuration file format. HOCON has a number +# of advantages over other config formats, but there are two things that +# can be used when modifying settings. +# +# You can include other configuration files in this main application.conf file: +#include "extra-config.conf" +# +# You can declare variables and substitute for them: +#mykey = ${some.value} +# +# And if an environment variable exists when there is no other substitution, then +# HOCON will fall back to substituting environment variable: +#mykey = ${JAVA_HOME} + +## Akka +# https://www.playframework.com/documentation/latest/ScalaAkka#Configuration +# https://www.playframework.com/documentation/latest/JavaAkka#Configuration +# ~~~~~ +# Play uses Akka internally and exposes Akka Streams and actors in Websockets and +# other streaming HTTP responses. +akka { + # "akka.log-config-on-start" is extraordinarly useful because it log the complete + # configuration at INFO level, including defaults and overrides, so it s worth + # putting at the very top. + # + # Put the following in your conf/logback.xml file: + # + # <logger name="akka.actor" level="INFO" /> + # + # And then uncomment this line to debug the configuration. + # + #log-config-on-start = true +} + +## Secret key +# http://www.playframework.com/documentation/latest/ApplicationSecret +# ~~~~~ +# The secret key is used to sign Play's session cookie. +# This must be changed for production, but we don't recommend you change it in this file. +play.http.secret.key="{{ graph_passport_key }}" + +## Modules +# https://www.playframework.com/documentation/latest/Modules +# ~~~~~ +# Control which modules are loaded when Play starts. Note that modules are +# the replacement for "GlobalSettings", which are deprecated in 2.5.x. +# Please see https://www.playframework.com/documentation/latest/GlobalSettings +# for more information. +# +# You can also extend Play functionality by using one of the publically available +# Play modules: https://playframework.com/documentation/latest/ModuleDirectory +play.modules { + # By default, Play will load any class called Module that is defined + # in the root package (the "app" directory), or you can define them + # explicitly below. + # If there are any built-in modules that you want to enable, you can list them here. + #enabled += my.application.Module + + # If there are any built-in modules that you want to disable, you can list them here. + #disabled += "" +} + +## IDE +# https://www.playframework.com/documentation/latest/IDE +# ~~~~~ +# Depending on your IDE, you can add a hyperlink for errors that will jump you +# directly to the code location in the IDE in dev mode. The following line makes +# use of the IntelliJ IDEA REST interface: +#play.editor="http://localhost:63342/api/file/?file=%s&line=%s" + +## Internationalisation +# https://www.playframework.com/documentation/latest/JavaI18N +# https://www.playframework.com/documentation/latest/ScalaI18N +# ~~~~~ +# Play comes with its own i18n settings, which allow the user's preferred language +# to map through to internal messages, or allow the language to be stored in a cookie. +play.i18n { + # The application languages + langs = [ "en" ] + + # Whether the language cookie should be secure or not + #langCookieSecure = true + + # Whether the HTTP only attribute of the cookie should be set to true + #langCookieHttpOnly = true +} + +## Play HTTP settings +# ~~~~~ +play.http { + ## Router + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # Define the Router object to use for this application. + # This router will be looked up first when the application is starting up, + # so make sure this is the entry point. + # Furthermore, it's assumed your route file is named properly. + # So for an application router like `my.application.Router`, + # you may need to define a router file `conf/my.application.routes`. + # Default to Routes in the root package (aka "apps" folder) (and conf/routes) + #router = my.application.Router + + ## Action Creator + # https://www.playframework.com/documentation/latest/JavaActionCreator + # ~~~~~ + #actionCreator = null + + ## ErrorHandler + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # If null, will attempt to load a class called ErrorHandler in the root package, + #errorHandler = null + + ## Session & Flash + # https://www.playframework.com/documentation/latest/JavaSessionFlash + # https://www.playframework.com/documentation/latest/ScalaSessionFlash + # ~~~~~ + session { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + + # Sets the max-age field of the cookie to 5 minutes. + # NOTE: this only sets when the browser will discard the cookie. Play will consider any + # cookie value with a valid signature to be a valid session forever. To implement a server side session timeout, + # you need to put a timestamp in the session and check it at regular intervals to possibly expire it. + #maxAge = 300 + + # Sets the domain on the session cookie. + #domain = "example.com" + } + + flash { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + } +} + +play.http.parser.maxDiskBuffer = 10MB +parsers.anyContent.maxLength = 10MB + +## Netty Provider +# https://www.playframework.com/documentation/latest/SettingsNetty +# ~~~~~ +play.server.netty { + # Whether the Netty wire should be logged + log.wire = true + + # If you run Play on Linux, you can use Netty's native socket transport + # for higher performance with less garbage. + transport = "native" +} + +## WS (HTTP Client) +# https://www.playframework.com/documentation/latest/ScalaWS#Configuring-WS +# ~~~~~ +# The HTTP client primarily used for REST APIs. The default client can be +# configured directly, but you can also create different client instances +# with customized settings. You must enable this by adding to build.sbt: +# +# libraryDependencies += ws // or javaWs if using java +# +play.ws { + # Sets HTTP requests not to follow 302 requests + #followRedirects = false + + # Sets the maximum number of open HTTP connections for the client. + #ahc.maxConnectionsTotal = 50 + + ## WS SSL + # https://www.playframework.com/documentation/latest/WsSSL + # ~~~~~ + ssl { + # Configuring HTTPS with Play WS does not require programming. You can + # set up both trustManager and keyManager for mutual authentication, and + # turn on JSSE debugging in development with a reload. + #debug.handshake = true + #trustManager = { + # stores = [ + # { type = "JKS", path = "exampletrust.jks" } + # ] + #} + } +} + +## Cache +# https://www.playframework.com/documentation/latest/JavaCache +# https://www.playframework.com/documentation/latest/ScalaCache +# ~~~~~ +# Play comes with an integrated cache API that can reduce the operational +# overhead of repeated requests. You must enable this by adding to build.sbt: +# +# libraryDependencies += cache +# +play.cache { + # If you want to bind several caches, you can bind the individually + #bindCaches = ["db-cache", "user-cache", "session-cache"] +} + +## Filter Configuration +# https://www.playframework.com/documentation/latest/Filters +# ~~~~~ +# There are a number of built-in filters that can be enabled and configured +# to give Play greater security. +# +play.filters { + + # Enabled filters are run automatically against Play. + # CSRFFilter, AllowedHostFilters, and SecurityHeadersFilters are enabled by default. + enabled = [filters.AccessLogFilter] + + # Disabled filters remove elements from the enabled list. + # disabled += filters.CSRFFilter + + + ## CORS filter configuration + # https://www.playframework.com/documentation/latest/CorsFilter + # ~~~~~ + # CORS is a protocol that allows web applications to make requests from the browser + # across different domains. + # NOTE: You MUST apply the CORS configuration before the CSRF filter, as CSRF has + # dependencies on CORS settings. + cors { + # Filter paths by a whitelist of path prefixes + #pathPrefixes = ["/some/path", ...] + + # The allowed origins. If null, all origins are allowed. + #allowedOrigins = ["http://www.example.com"] + + # The allowed HTTP methods. If null, all methods are allowed + #allowedHttpMethods = ["GET", "POST"] + } + + ## Security headers filter configuration + # https://www.playframework.com/documentation/latest/SecurityHeaders + # ~~~~~ + # Defines security headers that prevent XSS attacks. + # If enabled, then all options are set to the below configuration by default: + headers { + # The X-Frame-Options header. If null, the header is not set. + #frameOptions = "DENY" + + # The X-XSS-Protection header. If null, the header is not set. + #xssProtection = "1; mode=block" + + # The X-Content-Type-Options header. If null, the header is not set. + #contentTypeOptions = "nosniff" + + # The X-Permitted-Cross-Domain-Policies header. If null, the header is not set. + #permittedCrossDomainPolicies = "master-only" + + # The Content-Security-Policy header. If null, the header is not set. + #contentSecurityPolicy = "default-src 'self'" + } + + ## Allowed hosts filter configuration + # https://www.playframework.com/documentation/latest/AllowedHostsFilter + # ~~~~~ + # Play provides a filter that lets you configure which hosts can access your application. + # This is useful to prevent cache poisoning attacks. + hosts { + # Allow requests to example.com, its subdomains, and localhost:9000. + #allowed = [".example.com", "localhost:9000"] + } +} + +play.http.parser.maxMemoryBuffer = 50MB +akka.http.parsing.max-content-length = 50MB +schema.base_path="https://{{ azure_account_name }}.blob.core.windows.net/{{ azure_public_container }}/schemas/" + +# Cassandra Configuration +cassandra.lp.connection="{{ lp_cassandra_connection }}" +cassandra.lpa.connection="{{ dp_cassandra_connection }}" + +# Redis Configuration +redis.host=localhost +redis.port=6379 +redis.maxConnections=128 + +#--Maximum Content Package File Size Limit in Bytes (50 MB) +MAX_CONTENT_PACKAGE_FILE_SIZE_LIMIT=52428800 + +#--Maximum Asset File Size Limit in Bytes (20 MB) +MAX_ASSET_FILE_SIZE_LIMIT=20971520 + +#--No of Retry While File Download Fails +RETRY_ASSET_DOWNLOAD_COUNT=1 + +#Current environment +cloud_storage.env="{{env}}" + +# Configuration +graph.dir=/data/graphDB +akka.request_timeout=30 +environment.id={{ environment_id }} +graph.ids=["domain"] +graph.passport.key.base="{{ graph_passport_key }}" +route.domain="{{ learning_neo4j_bolt_url }}" +route.bolt.write.domain="{{ learning_write_elb_url }}" +route.bolt.read.domain="{{ learning_read_elb_url }}" +route.all="{{ language_neo4j_bolt_url }}" +route.bolt.write.all="{{ language_write_elb_url }}" +route.bolt.read.all="{{ language_read_elb_url }}" + +shard.id={{ mw_shard_id }} +platform.auth.check.enabled=false +platform.cache.ttl=3600000 + +#Top N Config for Search Telemetry +telemetry_env="{{env}}" + +installation.id=ekstep + +channel.default=in.ekstep + +content.cache.ttl=86400 +content.cache.read=true +content.cache.hierarchy=true \ No newline at end of file diff --git a/kubernetes/helm_charts/core/content/templates/configmap.yaml b/kubernetes/helm_charts/core/content/templates/configmap.yaml deleted file mode 100644 index dd3b426b9fe79b81b092c8f10177df21212bba79..0000000000000000000000000000000000000000 --- a/kubernetes/helm_charts/core/content/templates/configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -data: - {{- range $key, $val := .Values.contentenv }} - {{ $key }}: {{ $val }} - {{- end }} - graph.ids: {{ .Values.graph_ids | toJson }} -kind: ConfigMap -metadata: - creationTimestamp: null - name: {{ .Chart.Name }}-config - namespace: {{ .Values.namespace }} - diff --git a/kubernetes/helm_charts/core/content/templates/deployment.yaml b/kubernetes/helm_charts/core/content/templates/deployment.yaml index 405e85784937b034bdfad0bdf7bc50871ba28f83..d8d5bb9bb183d26bc08868dcb1ded4d911667fd1 100644 --- a/kubernetes/helm_charts/core/content/templates/deployment.yaml +++ b/kubernetes/helm_charts/core/content/templates/deployment.yaml @@ -24,6 +24,10 @@ spec: spec: imagePullSecrets: - name: {{ .Values.imagepullsecrets }} + volumes: + - name: {{ .Chart.Name }}-config + configMap: + name: {{ .Chart.Name }}-config containers: - name: {{ .Chart.Name }} image: "{{ .Values.dockerhub }}/{{ .Values.repository }}:{{ .Values.image_tag }}" @@ -34,6 +38,9 @@ spec: {{ toYaml .Values.resources | indent 10 }} ports: - containerPort: {{ .Values.network.port }} + volumeMounts: + - name: {{ .Chart.Name }}-config + mountPath: /home/sunbird/learning-service-1.0-SNAPSHOT/config/applicaton.conf --- apiVersion: v1 diff --git a/kubernetes/helm_charts/core/content/values.j2 b/kubernetes/helm_charts/core/content/values.j2 index 99f417b33e87fefb3340c2f2eef468fa29f7138b..c39bdca8461dba96d884ec319351bc2e7ad9edd8 100644 --- a/kubernetes/helm_charts/core/content/values.j2 +++ b/kubernetes/helm_charts/core/content/values.j2 @@ -22,34 +22,3 @@ strategy: maxsurge: 1 maxunavailable: 0 -contentenv: - cassandra.lp.connection: {{ lp_cassandra_connection }} - cassandra.lpa.connection: {{ dp_cassandra_connection }} - redis.host: localhost - redis.port: '"6379"' - redis.maxConnections: '"128"' - MAX_CONTENT_PACKAGE_FILE_SIZE_LIMIT: '"52428800"' - MAX_ASSET_FILE_SIZE_LIMIT: '"20971520"' - RETRY_ASSET_DOWNLOAD_COUNT: '"1"' - cloud_storage.env: dev - graph.dir: /data/graphDB - akka.request_timeout: '"30"' - environment.id: '"{{ environment_id }}"' - graph.passport.key.base: {{ graph_passport_key }} - route.domain: {{ learning_neo4j_bolt_url }} - route.bolt.write.domain: {{ learning_write_elb_url }} - route.bolt.read.domain: {{ learning_read_elb_url }} - route.all: {{ language_neo4j_bolt_url }} - route.bolt.write.all: {{ language_write_elb_url }} - route.bolt.read.all: {{ language_read_elb_url }} - shard.id: '"{{ mw_shard_id }}"' - platform.auth.check.enabled: "'false'" - platform.cache.ttl: '"3600000"' - telemetry_env: dev - installation.id: ekstep - channel.default: in.ekstep - content.cache.ttl: '"86400"' - content.cache.read: "'true'" - content.cache.hierarchy: "'true'" - -graph_ids: '["domain"]' diff --git a/kubernetes/pipelines/deploy_core/Jenkinsfile b/kubernetes/pipelines/deploy_core/Jenkinsfile index c38691bc13ce378e9e8787d9a97d75897d8edb69..961537a5fe543a326aad13d8828943cc01a141dc 100644 --- a/kubernetes/pipelines/deploy_core/Jenkinsfile +++ b/kubernetes/pipelines/deploy_core/Jenkinsfile @@ -11,7 +11,7 @@ node() { jobName = sh(returnStdout: true, script: "echo $JOB_NAME").split('/')[-1].trim().toLowerCase() currentWs = sh(returnStdout: true, script: 'pwd').trim() ansiblePlaybook = "$currentWs/kubernetes/ansible/deploy_core_service.yml" - ansibleExtraArgs = "--extra-vars \"chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName image_tag=$values.image_tag\" --vault-password-file /var/lib/jenkins/secrets/vault-pass" + ansibleExtraArgs = "--extra-vars \"chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName image_tag=$values.image_tag\" --vault-password-file /var/lib/jenkins/secrets/vault-pass --tags deploy-core" values.put('currentWs', currentWs) values.put('ansiblePlaybook', ansiblePlaybook) values.put('ansibleExtraArgs', ansibleExtraArgs) diff --git a/kubernetes/pipelines/deploy_core/Jenkinsfile.badger b/kubernetes/pipelines/deploy_core/Jenkinsfile.badger index d73e3aedeca72875c34811eda4b6c48ad420e554..6d0140cac1e3285a85c616d0c5837408ebdc8edc 100644 --- a/kubernetes/pipelines/deploy_core/Jenkinsfile.badger +++ b/kubernetes/pipelines/deploy_core/Jenkinsfile.badger @@ -10,8 +10,8 @@ node() { values = docker_params() jobName = sh(returnStdout: true, script: "echo $JOB_NAME").split('/')[-1].trim().toLowerCase() currentWs = sh(returnStdout: true, script: 'pwd').trim() - ansiblePlaybook = "$currentWs/kubernetes/ansible/badger.yml" - ansibleExtraArgs = "--extra-vars \"chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName image_tag=$values.image_tag\" --vault-password-file /var/lib/jenkins/secrets/vault-pass" + ansiblePlaybook = "$currentWs/kubernetes/ansible/deploy_core_service.yml" + ansibleExtraArgs = "--extra-vars \"chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName image_tag=$values.image_tag\" --vault-password-file /var/lib/jenkins/secrets/vault-pass --tags deploy-badger" values.put('currentWs', currentWs) values.put('ansiblePlaybook', ansiblePlaybook) values.put('ansibleExtraArgs', ansibleExtraArgs) diff --git a/kubernetes/pipelines/deploy_core/Jenkinsfile.content b/kubernetes/pipelines/deploy_core/Jenkinsfile.content new file mode 100644 index 0000000000000000000000000000000000000000..913461cd2f7a32dc99c3e9f38c4c786464104f3f --- /dev/null +++ b/kubernetes/pipelines/deploy_core/Jenkinsfile.content @@ -0,0 +1,31 @@ +@Library('deploy-conf') _ +node() { + try { + stage('checkout public repo') { + cleanWs() + checkout scm + } + + stage('deploy') { + values = docker_params() + jobName = sh(returnStdout: true, script: "echo $JOB_NAME").split('/')[-1].trim().toLowerCase() + currentWs = sh(returnStdout: true, script: 'pwd').trim() + ansiblePlaybook = "$currentWs/kubernetes/ansible/deploy_core_service.yml" + ansibleExtraArgs = "--extra-vars \"chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName image_tag=$values.image_tag\" --vault-password-file /var/lib/jenkins/secrets/vault-pass --tags deploy-content" + values.put('currentWs', currentWs) + values.put('ansiblePlaybook', ansiblePlaybook) + values.put('ansibleExtraArgs', ansibleExtraArgs) + ansible_playbook_run(values) + archiveArtifacts 'metadata.json' + currentBuild.description = "Image: ${values.image_tag}, Private: ${params.private_branch}, Public: ${params.branch_or_tag}" + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } + finally { + slack_notify(currentBuild.result) + email_notify() + } +} diff --git a/pipelines/deploy/player/Jenkinsfile b/pipelines/deploy/player/Jenkinsfile index ba2ae59d0cbc03acb2170a1866ade023f56eb02b..af4088581a8bbc251150e50239cf36f1e48e9f8e 100644 --- a/pipelines/deploy/player/Jenkinsfile +++ b/pipelines/deploy/player/Jenkinsfile @@ -16,14 +16,14 @@ node() { values = docker_params() jobName = sh(returnStdout: true, script: "echo $JOB_NAME").split('/')[-1].trim().toLowerCase() currentWs = sh(returnStdout: true, script: 'pwd').trim() - ansiblePlaybook = "$currentWs/kubernetes/ansible/player.yml" + ansiblePlaybook = "$currentWs/kubernetes/ansible/deploy_core_service.yml" cdn_file_exists = new File("$currentWs/index_cdn.ejs") if (cdn_file_exists.exists()) { println(ANSI_BOLD + ANSI_GREEN + "Found index_cdn.ejs file. Deploying player with CDN.." + ANSI_NORMAL) - ansibleExtraArgs = "--extra-vars \"hub_org=$hub_org image_name=$values.image_name image_tag=$values.image_tag cdn_file_path=$currentWs/index_cdn.ejs chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName\" --vault-password-file /var/lib/jenkins/secrets/vault-pass " + ansibleExtraArgs = "--extra-vars \"hub_org=$hub_org image_name=$values.image_name image_tag=$values.image_tag cdn_file_path=$currentWs/index_cdn.ejs chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName\" --vault-password-file /var/lib/jenkins/secrets/vault-pass --tags deploy-player " } else { println(ANSI_BOLD + ANSI_YELLOW + "Could not find index_cdn.ejs file. Deploying player without CDN.." + ANSI_NORMAL) - ansibleExtraArgs = "--extra-vars \"hub_org=$hub_org image_name=$values.image_name image_tag=$values.image_tag chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName\" --vault-password-file /var/lib/jenkins/secrets/vault-pass " + ansibleExtraArgs = "--extra-vars \"hub_org=$hub_org image_name=$values.image_name image_tag=$values.image_tag chart_path=${currentWs}/kubernetes/helm_charts/core/$jobName release_name=$jobName\" --vault-password-file /var/lib/jenkins/secrets/vault-pass --tags deploy-player " } values.put('currentWs', currentWs) values.put('ansiblePlaybook', ansiblePlaybook)