@codefresh-io/kube-integration 1.23.6 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -113,6 +113,8 @@ spec:
113
113
  value: {{ default (printf "%s-%s" .Release.Name .Values.global.postgresService) .Values.global.postgresHostname | quote }}
114
114
  - name: POSTGRES_DATABASE
115
115
  value: {{ .Values.global.postgresDatabase }}
116
+ - name: POSTGRES_PORT
117
+ value: {{ .Values.global.postgresPort | quote }}
116
118
  - name: POSTGRES_USER
117
119
  valueFrom:
118
120
  secretKeyRef:
@@ -134,6 +136,10 @@ spec:
134
136
  value: {{ template "kube-integration.name" . }}
135
137
  - name: FORMAT_LOGS_TO_ELK
136
138
  value: "{{ .Values.formatLogsToElk }}"
139
+ {{- if $.Values.global.mongoTLS }}
140
+ - name: MTLS_CERT_PATH
141
+ value: /etc/ssl/mongodb/ca.pem
142
+ {{- end }}
137
143
  ports:
138
144
  - containerPort: {{ .Values.targetPort }}
139
145
  protocol: TCP
@@ -154,16 +160,28 @@ spec:
154
160
  failureThreshold: 3
155
161
  initialDelaySeconds: 30
156
162
  timeoutSeconds: 10
157
- {{- if .Values.global.addResolvConf }}
158
163
  volumeMounts:
164
+ {{- if .Values.global.addResolvConf }}
159
165
  - mountPath: /etc/resolv.conf
160
166
  name: resolvconf
161
167
  subPath: resolv.conf
162
168
  readOnly: true
169
+ {{- end }}
170
+ {{- if $.Values.global.mongoTLS }}
171
+ - mountPath: /etc/ssl/mongodb/
172
+ name: mongodb-tls
173
+ readOnly: true
174
+ {{- end }}
163
175
  volumes:
176
+ {{- if .Values.global.addResolvConf }}
164
177
  - name: resolvconf
165
178
  configMap:
166
179
  name: {{ .Release.Name }}-{{ .Values.global.codefresh }}-resolvconf
167
- {{- end }}
180
+ {{- end }}
181
+ {{- if $.Values.global.mongoTLS }}
182
+ - name: mongodb-tls
183
+ secret:
184
+ secretName: {{ $.Release.Name }}-{{ $.Values.global.codefresh }}-mongodb-tls
185
+ {{- end }}
168
186
  restartPolicy: Always
169
187
  {{- end }}
File without changes
@@ -13,9 +13,9 @@ imagePullPolicy: Always
13
13
  replicaCount: 1
14
14
  redeploy: false
15
15
 
16
- image: codefresh/kube-integration
16
+ image: codefresh-inc/codefresh/kube-integration
17
17
  imageTag: master
18
- dockerRegistry: gcr.io/codefresh-inc/
18
+ dockerRegistry: 839151377425.dkr.ecr.us-east-1.amazonaws.com/
19
19
 
20
20
  # Service type (ClusterIP, NodePort, LoadBalancer)
21
21
  #serviceType: ClusterIP
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- v12.21.0
1
+ v12.22.4
package/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM node:12.21.0-alpine
1
+ FROM node:12.22.4-alpine
2
2
 
3
3
  WORKDIR /kube-integration
4
4
 
package/config/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const _ = require('lodash');
4
3
  const path = require('path');
5
- const os = require('os');
4
+ const os = require('os');
5
+ const fs = require('fs');
6
6
  const { getRequestId, getAuthenticatedEntity } = require('@codefresh-io/http-infra');
7
7
 
8
8
  const name = 'kube-integration';
9
9
 
10
10
  const base = {};
11
11
 
12
- base.env = process.env.NODE_ENV || 'kubernetes';
12
+ base.env = process.env.NODE_ENV || 'kubernetes';
13
13
  base.port = process.env.PORT || 9003;
14
14
  base.name = name;
15
15
 
@@ -36,8 +36,8 @@ base.logger = {
36
36
  }
37
37
  // human readable format
38
38
  return `${options.timestamp()} ${options.level.toUpperCase()} >> ` +
39
- `${options.message || ''}` +
40
- `${options.meta && Object.keys(options.meta).length ? ` << ${JSON.stringify(options.meta)}` : ''}`;
39
+ `${options.message || ''}` +
40
+ `${options.meta && Object.keys(options.meta).length ? ` << ${JSON.stringify(options.meta)}` : ''}`;
41
41
  }
42
42
  },
43
43
  basePath: null,
@@ -74,8 +74,10 @@ base.newrelic = {
74
74
 
75
75
  base.mongo = {
76
76
  uri: process.env.MONGO_URI || 'mongodb://codefresh.dev:27017/kube',
77
- reconnectTries: process.env.MONGO_RECONNECT_TRIES || Number.MAX_VALUE,
78
- reconnectInterval: process.env.MONGO_RECONNECT_INTERVAL || 30 * 1000
77
+ options: {
78
+ reconnectTries: process.env.MONGO_RECONNECT_TRIES || Number.MAX_VALUE,
79
+ reconnectInterval: process.env.MONGO_RECONNECT_INTERVAL || 30 * 1000
80
+ }
79
81
  };
80
82
 
81
83
  base.eventbus = {
@@ -88,10 +90,20 @@ base.postgres = {
88
90
  host: process.env.POSTGRES_HOST || 'codefresh.dev',
89
91
  database: process.env.POSTGRES_DATABASE || 'postgres',
90
92
  user: process.env.POSTGRES_USER || 'postgres',
91
- password: process.env.POSTGRES_PASSWORD || 'postgres'
93
+ password: process.env.POSTGRES_PASSWORD || 'postgres',
94
+ port: process.env.POSTGRES_PORT || 5432
92
95
  };
93
96
 
94
- require(`./environment/kubernetes`)(base);
97
+ base.helm = {
98
+ maxHelmHistorySize: process.env.MAX_HELM_HISTORY_SIZE, // If set, limits history in release
99
+ };
95
100
 
101
+ if (process.env.MTLS_CERT_PATH) {
102
+ const credentials = fs.readFileSync(process.env.MTLS_CERT_PATH);
103
+ base.mongo.options.sslKey = credentials;
104
+ base.mongo.options.sslCert = credentials;
105
+ }
106
+
107
+ require(`./environment/kubernetes`)(base);
96
108
 
97
109
  module.exports = base;
package/index.js CHANGED
@@ -18,4 +18,3 @@ function start(){
18
18
  require('./infra').init();
19
19
  }
20
20
  }
21
-
package/infra/eventbus.js CHANGED
@@ -38,7 +38,8 @@ class Eventbus {
38
38
  host: this.config.postgres.host,
39
39
  database: this.config.postgres.database,
40
40
  user: this.config.postgres.user,
41
- password: this.config.postgres.password
41
+ password: this.config.postgres.password,
42
+ port: this.config.postgres.port,
42
43
  },
43
44
  microServiceName: this.config.eventbus.serviceName
44
45
  });
@@ -100,4 +101,4 @@ class Eventbus {
100
101
  }
101
102
 
102
103
 
103
- module.exports = new Eventbus();
104
+ module.exports = new Eventbus();
@@ -56,7 +56,7 @@ function resolveNamespacesFromQuery(req, res, next) {
56
56
  }
57
57
 
58
58
  function resolveQueryString(req, res, next) { // jshint ignore:line
59
- const query = _.omit(_.get(req, 'query', {}), ['namespace', 'selector', 'omit', 'helm3', 'exactly']);
59
+ const query = _.omit(_.get(req, 'query', {}), ['namespace', 'selector', 'labelSelector', 'omit', 'helm3', 'exactly']);
60
60
  const keys = _.keys(query);
61
61
  const filters = [];
62
62
  return Promise.map(keys, (key) => {
package/infra/mongo.js CHANGED
@@ -19,8 +19,7 @@ class Mongo {
19
19
  init(config) {
20
20
  console.log(`Conncting to mongo uri: ${config.mongo.uri}`);
21
21
  return mongoose.connect(config.mongo.uri, {
22
- reconnectTries: config.mongo.reconnectTries,
23
- reconnectInterval: config.mongo.reconnectInterval,
22
+ ...config.mongo.options,
24
23
  autoReconnect: true
25
24
  }).then(() => {
26
25
  console.log(`Mongoose connected to: ${config.mongo.uri}`);
@@ -5,7 +5,7 @@ class BaseRevision {
5
5
  }
6
6
  getCommitMessage() {
7
7
  return this._getNormalizedTemplates()
8
- .then(tpl => tpl.find(name => name === 'templates/NOTES.txt'))
8
+ .then(tpl => tpl.find(name => 'templates/NOTES.txt'))
9
9
  .then((content) => {
10
10
  if (!content) {
11
11
  return '';
@@ -9,23 +9,21 @@ const CFError = require('cf-errors');
9
9
  class ReleaseController extends Base {
10
10
 
11
11
  _getRelevantSecrets(name, revisions = []) {
12
- const cmCtl = this._kubeManager
13
- .getSecretController(this._ns);
14
- if (!revisions || revisions.length === 0) {
15
- return cmCtl
16
- .get({
17
- labelSelector: 'owner=helm'
18
- });
19
- } else {
12
+ const cmCtl = this._kubeManager.getSecretController(this._ns);
13
+
14
+ if (name && revisions.length) {
20
15
  return Promise.map(revisions, (revision) => {
21
- return cmCtl
22
- .get({
23
- labelSelector: `VERSION=${revision},${name}`
24
- });
16
+ return cmCtl.get({ labelSelector: `version=${revision},name=${name}` });
25
17
  })
26
18
  .then(_.flattenDeep)
27
19
  .then(_.compact);
28
20
  }
21
+
22
+ if (name) {
23
+ return cmCtl.get({ labelSelector: `name=${name}` });
24
+ }
25
+
26
+ return cmCtl.get({ labelSelector: 'owner=helm' });
29
27
  }
30
28
 
31
29
  /**
@@ -55,7 +53,7 @@ class ReleaseController extends Base {
55
53
  }
56
54
 
57
55
  describe(name, revisions = []) {
58
- return this._getRelevantSecrets()
56
+ return this._getRelevantSecrets(name, revisions)
59
57
  .then((secrets) => {
60
58
  if(!secrets || _.isEmpty(secrets)){
61
59
  throw new CFError({
@@ -2,8 +2,9 @@
2
2
 
3
3
  const _ = require('lodash');
4
4
  const Promise = require('bluebird');
5
- const Revision = require('./revision');
6
5
  const CFError = require('cf-errors');
6
+ const config = require('../../../../config');
7
+ const Revision = require('./revision');
7
8
  class Release {
8
9
 
9
10
  constructor(firstRevision, tillerNamespace){
@@ -24,7 +25,13 @@ class Release {
24
25
  return this._namespace;
25
26
  }
26
27
 
27
- addRevision(revision){
28
+ addRevision(revision) {
29
+ const rootRevision = parseInt(this._version);
30
+ const isOutOfRange = revision => config.helm.maxHelmHistorySize && (rootRevision - revision.version) >= config.helm.maxHelmHistorySize;
31
+
32
+ if (!isOutOfRange(revision)) {
33
+ this._history.push(revision);
34
+ }
28
35
 
29
36
  if(revision.createdAt){
30
37
  this._createdAt = revision.createdAt;
@@ -38,8 +45,7 @@ class Release {
38
45
  this._setRevisionAsRoot(revision);
39
46
  }
40
47
 
41
-
42
- this._history.push(revision);
48
+ _.remove(this._history, isOutOfRange);
43
49
  }
44
50
 
45
51
  _setRevisionAsRoot(revision){
@@ -5,6 +5,8 @@ const sinonChai = require('sinon-chai');
5
5
  const _ = require('lodash');
6
6
  const proxyquire = require('proxyquire');
7
7
  const Revision = require('./../revision');
8
+ const Release = require('../release')
9
+ const config = require('../../../../../config');
8
10
 
9
11
  const expect = chai.expect;
10
12
  chai.use(sinonChai);
@@ -75,3 +77,34 @@ describe('revision', () => {
75
77
  });
76
78
  });
77
79
  });
80
+
81
+ describe('Release', () => {
82
+ it('Should build limited history', () => {
83
+ const firstRelease = {
84
+ name: 'rel',
85
+ version: 5,
86
+ _decodedObject: { chart: { metadata: { name: 'chartName' } }, namespace: 'ns' }
87
+ };
88
+ const revisions = [8, 4, 10, 30, 45, 46, 42, 50, 49, 41, 20, 43, 44, 47, 48, 11];
89
+ const release = new Release(firstRelease, 'tillerNs');
90
+ config.helm.maxHelmHistorySize = 10;
91
+ _.forEach(revisions, r => {
92
+ release.addRevision({ version: r });
93
+ });
94
+ expect(_.orderBy(_.map(release._history, r => r.version))).to.eql([41,42,43,44,45,46,47,48,49,50]);
95
+ });
96
+ it('Should build full history', () => {
97
+ const firstRelease = {
98
+ name: 'rel',
99
+ version: 5,
100
+ _decodedObject: { chart: { metadata: { name: 'chartName' } }, namespace: 'ns' }
101
+ };
102
+ const revisions = [8, 4, 10, 30, 45, 46, 42, 50, 49, 41, 20, 43, 44, 47, 48, 11];
103
+ const release = new Release(firstRelease, 'tillerNs');
104
+ config.helm.maxHelmHistorySize = undefined;
105
+ _.forEach(revisions, r => {
106
+ release.addRevision({ version: r });
107
+ });
108
+ expect(_.orderBy(_.map(release._history, r => r.version))).to.eql([4,5,8,10,11,20,30,41,42,43,44,45,46,47,48,49,50]);
109
+ });
110
+ })
@@ -50,6 +50,127 @@ describe('revision', () => {
50
50
  expect(r).to.have.all.keys(['_name', '_createdAt', '_modifiedAt', '_rawData', '_status', '_version']);
51
51
  });
52
52
 
53
+ it('should get commit message for revision', async () => {
54
+ const r = new Revision({
55
+ NAME: 'release-name',
56
+ STATUS: 'DEPLOYED',
57
+ VERSION: '1',
58
+ MODIFIED_AT: 'some-time',
59
+ CREATED_AT: 'some-time',
60
+ dataAsBase64: ''
61
+ });
62
+ r._setDecodedObject({
63
+ "name": "tomcat",
64
+ "info": {
65
+ "first_deployed": "2021-11-11T12:41:43.664250115Z",
66
+ "last_deployed": "2022-01-27T09:50:29.752777998Z",
67
+ "deleted": "",
68
+ "description": "Upgrade complete",
69
+ "status": "deployed",
70
+ "notes": "1. Get the application URL by running these commands:\n NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n You can watch the status of by running 'kubectl get svc -w tomcat'\n export SERVICE_IP=$(kubectl get svc --namespace default tomcat -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n echo http://$SERVICE_IP:\ncommit_message:test\n"
71
+ },
72
+ "chart": {
73
+ "metadata": {
74
+ "name": "tomcat",
75
+ "home": "https://github.com/yahavb",
76
+ "version": "0.4.3",
77
+ "description": "DEPRECATED - Deploy a basic tomcat application server with sidecar as web archive container",
78
+ "icon": "http://tomcat.apache.org/res/images/tomcat.png",
79
+ "apiVersion": "v1",
80
+ "appVersion": "7.0",
81
+ "deprecated": true
82
+ },
83
+ "lock": null,
84
+ "templatesList": [
85
+ {
86
+ "name": "templates/NOTES.txt",
87
+ "data": "MS4gR2V0IHRoZSBhcHBsaWNhdGlvbiBVUkwgYnkgcnVubmluZyB0aGVzZSBjb21tYW5kczoKe3stIGlmIC5WYWx1ZXMuaW5ncmVzcy5lbmFibGVkIH19Cnt7LSByYW5nZSAuVmFsdWVzLmluZ3Jlc3MuaG9zdHMgfX0KICBodHRwe3sgaWYgJC5WYWx1ZXMuaW5ncmVzcy50bHMgfX1ze3sgZW5kIH19Oi8ve3sgLiB9fXt7ICQuVmFsdWVzLmluZ3Jlc3MucGF0aCB9fQp7ey0gZW5kIH19Cnt7LSBlbHNlIGlmIGNvbnRhaW5zICJOb2RlUG9ydCIgLlZhbHVlcy5zZXJ2aWNlLnR5cGUgfX0KICBleHBvcnQgTk9ERV9QT1JUPSQoa3ViZWN0bCBnZXQgLS1uYW1lc3BhY2Uge3sgLlJlbGVhc2UuTmFtZXNwYWNlIH19IC1vIGpzb25wYXRoPSJ7LnNwZWMucG9ydHNbMF0ubm9kZVBvcnR9IiBzZXJ2aWNlcyB7eyB0ZW1wbGF0ZSAidG9tY2F0LmZ1bGxuYW1lIiAuIH19KQogIGV4cG9ydCBOT0RFX0lQPSQoa3ViZWN0bCBnZXQgbm9kZXMgLS1uYW1lc3BhY2Uge3sgLlJlbGVhc2UuTmFtZXNwYWNlIH19IC1vIGpzb25wYXRoPSJ7Lml0ZW1zWzBdLnN0YXR1cy5hZGRyZXNzZXNbMF0uYWRkcmVzc30iKQogIGVjaG8gaHR0cDovLyROT0RFX0lQOiROT0RFX1BPUlQKe3stIGVsc2UgaWYgY29udGFpbnMgIkxvYWRCYWxhbmNlciIgLlZhbHVlcy5zZXJ2aWNlLnR5cGUgfX0KICAgICBOT1RFOiBJdCBtYXkgdGFrZSBhIGZldyBtaW51dGVzIGZvciB0aGUgTG9hZEJhbGFuY2VyIElQIHRvIGJlIGF2YWlsYWJsZS4KICAgICAgICAgICBZb3UgY2FuIHdhdGNoIHRoZSBzdGF0dXMgb2YgYnkgcnVubmluZyAna3ViZWN0bCBnZXQgc3ZjIC13IHt7IHRlbXBsYXRlICJ0b21jYXQuZnVsbG5hbWUiIC4gfX0nCiAgZXhwb3J0IFNFUlZJQ0VfSVA9JChrdWJlY3RsIGdldCBzdmMgLS1uYW1lc3BhY2Uge3sgLlJlbGVhc2UuTmFtZXNwYWNlIH19IHt7IHRlbXBsYXRlICJ0b21jYXQuZnVsbG5hbWUiIC4gfX0gLW8ganNvbnBhdGg9J3suc3RhdHVzLmxvYWRCYWxhbmNlci5pbmdyZXNzWzBdLmhvc3RuYW1lfScpCiAgZWNobyBodHRwOi8vJFNFUlZJQ0VfSVA6e3sgLlZhbHVlcy5zZXJ2aWNlLnBvcnQgfX0Ke3stIGVsc2UgaWYgY29udGFpbnMgIkNsdXN0ZXJJUCIgLlZhbHVlcy5zZXJ2aWNlLnR5cGUgfX0KICBleHBvcnQgUE9EX05BTUU9JChrdWJlY3RsIGdldCBwb2RzIC0tbmFtZXNwYWNlIHt7IC5SZWxlYXNlLk5hbWVzcGFjZSB9fSAtbCAiYXBwPXt7IHRlbXBsYXRlICJ0b21jYXQubmFtZSIgLiB9fSxyZWxlYXNlPXt7IC5SZWxlYXNlLk5hbWUgfX0iIC1vIGpzb25wYXRoPSJ7Lml0ZW1zWzBdLm1ldGFkYXRhLm5hbWV9IikKICBlY2hvICJWaXNpdCBodHRwOi8vMTI3LjAuMC4xOjgwODAgdG8gdXNlIHlvdXIgYXBwbGljYXRpb24iCiAga3ViZWN0bCBwb3J0LWZvcndhcmQgJFBPRF9OQU1FIDgwODA6ODAKe3stIGVuZCB9fQpjb21taXRfbWVzc2FnZTp0ZXN0Cg=="
88
+ },
89
+ {
90
+ "name": "templates/_helpers.tpl",
91
+ "data": "e3svKiB2aW06IHNldCBmaWxldHlwZT1tdXN0YWNoZTogKi99fQp7ey8qCkV4cGFuZCB0aGUgbmFtZSBvZiB0aGUgY2hhcnQuCiovfX0Ke3stIGRlZmluZSAidG9tY2F0Lm5hbWUiIC19fQp7ey0gZGVmYXVsdCAuQ2hhcnQuTmFtZSAuVmFsdWVzLm5hbWVPdmVycmlkZSB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbmQgLX19Cgp7ey8qCkNyZWF0ZSBhIGRlZmF1bHQgZnVsbHkgcXVhbGlmaWVkIGFwcCBuYW1lLgpXZSB0cnVuY2F0ZSBhdCA2MyBjaGFycyBiZWNhdXNlIHNvbWUgS3ViZXJuZXRlcyBuYW1lIGZpZWxkcyBhcmUgbGltaXRlZCB0byB0aGlzIChieSB0aGUgRE5TIG5hbWluZyBzcGVjKS4KSWYgcmVsZWFzZSBuYW1lIGNvbnRhaW5zIGNoYXJ0IG5hbWUgaXQgd2lsbCBiZSB1c2VkIGFzIGEgZnVsbCBuYW1lLgoqL319Cnt7LSBkZWZpbmUgInRvbWNhdC5mdWxsbmFtZSIgLX19Cnt7LSBpZiAuVmFsdWVzLmZ1bGxuYW1lT3ZlcnJpZGUgLX19Cnt7LSAuVmFsdWVzLmZ1bGxuYW1lT3ZlcnJpZGUgfCB0cnVuYyA2MyB8IHRyaW1TdWZmaXggIi0iIC19fQp7ey0gZWxzZSAtfX0Ke3stICRuYW1lIDo9IGRlZmF1bHQgLkNoYXJ0Lk5hbWUgLlZhbHVlcy5uYW1lT3ZlcnJpZGUgLX19Cnt7LSBpZiBjb250YWlucyAkbmFtZSAuUmVsZWFzZS5OYW1lIC19fQp7ey0gLlJlbGVhc2UuTmFtZSB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbHNlIC19fQp7ey0gcHJpbnRmICIlcy0lcyIgLlJlbGVhc2UuTmFtZSAkbmFtZSB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbmQgLX19Cnt7LSBlbmQgLX19Cnt7LSBlbmQgLX19Cgp7ey8qCkNyZWF0ZSBjaGFydCBuYW1lIGFuZCB2ZXJzaW9uIGFzIHVzZWQgYnkgdGhlIGNoYXJ0IGxhYmVsLgoqL319Cnt7LSBkZWZpbmUgInRvbWNhdC5jaGFydCIgLX19Cnt7LSBwcmludGYgIiVzLSVzIiAuQ2hhcnQuTmFtZSAuQ2hhcnQuVmVyc2lvbiB8IHJlcGxhY2UgIisiICJfIiB8IHRydW5jIDYzIHwgdHJpbVN1ZmZpeCAiLSIgLX19Cnt7LSBlbmQgLX19Cg=="
92
+ },
93
+ {
94
+ "name": "templates/appsrv-svc.yaml",
95
+ "data": "YXBpVmVyc2lvbjogdjEKa2luZDogU2VydmljZQptZXRhZGF0YToKICBuYW1lOiB7eyB0ZW1wbGF0ZSAidG9tY2F0LmZ1bGxuYW1lIiAuIH19CiAgbGFiZWxzOgogICAgYXBwOiB7eyB0ZW1wbGF0ZSAidG9tY2F0Lm5hbWUiIC4gfX0KICAgIGNoYXJ0OiB7eyB0ZW1wbGF0ZSAidG9tY2F0LmNoYXJ0IiAuIH19CiAgICByZWxlYXNlOiB7eyAuUmVsZWFzZS5OYW1lIH19CiAgICBoZXJpdGFnZToge3sgLlJlbGVhc2UuU2VydmljZSB9fQpzcGVjOgogIHR5cGU6IHt7IC5WYWx1ZXMuc2VydmljZS50eXBlIH19CiAgcG9ydHM6CiAgICAtIHBvcnQ6IHt7IC5WYWx1ZXMuc2VydmljZS5leHRlcm5hbFBvcnQgfX0KICAgICAgdGFyZ2V0UG9ydDoge3sgLlZhbHVlcy5zZXJ2aWNlLmludGVybmFsUG9ydCB9fQogICAgICBwcm90b2NvbDogVENQCiAgICAgIG5hbWU6IHt7IC5WYWx1ZXMuc2VydmljZS5uYW1lIH19CiAgc2VsZWN0b3I6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJ0b21jYXQubmFtZSIgLiB9fQogICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB9fQo="
96
+ },
97
+ {
98
+ "name": "templates/appsrv.yaml",
99
+ "data": "YXBpVmVyc2lvbjogYXBwcy92MQpraW5kOiBEZXBsb3ltZW50Cm1ldGFkYXRhOgogIG5hbWU6IHt7IHRlbXBsYXRlICJ0b21jYXQuZnVsbG5hbWUiIC4gfX0KICBsYWJlbHM6CiAgICBhcHA6IHt7IHRlbXBsYXRlICJ0b21jYXQubmFtZSIgLiB9fQogICAgY2hhcnQ6IHt7IHRlbXBsYXRlICJ0b21jYXQuY2hhcnQiIC4gfX0KICAgIHJlbGVhc2U6IHt7IC5SZWxlYXNlLk5hbWUgfX0KICAgIGhlcml0YWdlOiB7eyAuUmVsZWFzZS5TZXJ2aWNlIH19CnNwZWM6CiAgcmVwbGljYXM6IHt7IC5WYWx1ZXMucmVwbGljYUNvdW50IH19CiAgc2VsZWN0b3I6CiAgICBtYXRjaExhYmVsczoKICAgICAgYXBwOiB7eyB0ZW1wbGF0ZSAidG9tY2F0Lm5hbWUiIC4gfX0KICAgICAgcmVsZWFzZToge3sgLlJlbGVhc2UuTmFtZSB9fQogIHRlbXBsYXRlOgogICAgbWV0YWRhdGE6CiAgICAgIGxhYmVsczoKICAgICAgICBhcHA6IHt7IHRlbXBsYXRlICJ0b21jYXQubmFtZSIgLiB9fQogICAgICAgIHJlbGVhc2U6IHt7IC5SZWxlYXNlLk5hbWUgfX0KICAgIHNwZWM6CiAgICAgIHZvbHVtZXM6CiAgICAgICAgLSBuYW1lOiBhcHAtdm9sdW1lCiAgICAgICAgICBlbXB0eURpcjoge30KICAgICAgICB7ey0gd2l0aCAuVmFsdWVzLmV4dHJhVm9sdW1lcyB9fQp7eyB0b1lhbWwgLiB8IGluZGVudCA4IH19CiAgICAgICAge3stIGVuZCB9fQogICAgICBpbml0Q29udGFpbmVyczoKICAgICAgICAtIG5hbWU6IHdhcgogICAgICAgICAgaW1hZ2U6IHt7IC5WYWx1ZXMuaW1hZ2Uud2ViYXJjaGl2ZS5yZXBvc2l0b3J5IH19Ont7IC5WYWx1ZXMuaW1hZ2Uud2ViYXJjaGl2ZS50YWcgfX0KICAgICAgICAgIGltYWdlUHVsbFBvbGljeToge3sgLlZhbHVlcy5pbWFnZS5wdWxsUG9saWN5IH19CiAgICAgICAgICBjb21tYW5kOgogICAgICAgICAgICAtICJzaCIKICAgICAgICAgICAgLSAiLWMiCiAgICAgICAgICAgIC0gImNwIC8qLndhciAvYXBwIgogICAgICAgICAgdm9sdW1lTW91bnRzOgogICAgICAgICAgICAtIG5hbWU6IGFwcC12b2x1bWUKICAgICAgICAgICAgICBtb3VudFBhdGg6IC9hcHAKICAgICAgICB7ey0gd2l0aCAuVmFsdWVzLmV4dHJhSW5pdENvbnRhaW5lcnMgfX0Ke3sgdG9ZYW1sIC4gfCBpbmRlbnQgOCB9fQogICAgICAgIHt7LSBlbmQgfX0KCiAgICAgIGNvbnRhaW5lcnM6CiAgICAgICAgLSBuYW1lOiB7eyAuQ2hhcnQuTmFtZSB9fQogICAgICAgICAgaW1hZ2U6IHt7IC5WYWx1ZXMuaW1hZ2UudG9tY2F0LnJlcG9zaXRvcnkgfX06e3sgLlZhbHVlcy5pbWFnZS50b21jYXQudGFnIH19CiAgICAgICAgICBpbWFnZVB1bGxQb2xpY3k6IHt7IC5WYWx1ZXMuaW1hZ2UucHVsbFBvbGljeSB9fQogICAgICAgICAge3stIHdpdGggLlZhbHVlcy5lbnYgfX0KICAgICAgICAgIGVudjoKe3sgdG9ZYW1sIC4gfCBpbmRlbnQgMTIgfX0KICAgICAgICAgIHt7LSBlbmQgfX0KICAgICAgICAgIHZvbHVtZU1vdW50czoKICAgICAgICAgICAgLSBuYW1lOiBhcHAtdm9sdW1lCiAgICAgICAgICAgICAgbW91bnRQYXRoOiB7eyAuVmFsdWVzLmRlcGxveS5kaXJlY3RvcnkgfX0KICAgICAgICAgICAge3stIHdpdGggLlZhbHVlcy5leHRyYVZvbHVtZU1vdW50cyB9fQp7eyB0b1lhbWwgLiB8IGluZGVudCAxMiB9fQogICAgICAgICAgICB7ey0gZW5kIH19CiAgICAgICAgICBwb3J0czoKICAgICAgICAgICAgLSBjb250YWluZXJQb3J0OiB7eyAuVmFsdWVzLnNlcnZpY2UuaW50ZXJuYWxQb3J0IH19CiAgICAgICAgICAgICAge3stIHdpdGggLlZhbHVlcy5ob3N0UG9ydCB9fQogICAgICAgICAgICAgIGhvc3RQb3J0OiB7eyAuIH19CiAgICAgICAgICAgICAge3stIGVuZCB9fQogICAgICAgICAgbGl2ZW5lc3NQcm9iZToKICAgICAgICAgICAgaHR0cEdldDoKICAgICAgICAgICAgICBwYXRoOiB7eyAuVmFsdWVzLmxpdmVuZXNzUHJvYmUucGF0aCB9fQogICAgICAgICAgICAgIHBvcnQ6IHt7IC5WYWx1ZXMuc2VydmljZS5pbnRlcm5hbFBvcnQgfX0KICAgICAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczoge3sgLlZhbHVlcy5saXZlbmVzc1Byb2JlLmluaXRpYWxEZWxheVNlY29uZHMgfX0KICAgICAgICAgICAgcGVyaW9kU2Vjb25kczoge3sgLlZhbHVlcy5saXZlbmVzc1Byb2JlLnBlcmlvZFNlY29uZHMgfX0KICAgICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDoge3sgLlZhbHVlcy5saXZlbmVzc1Byb2JlLmZhaWx1cmVUaHJlc2hvbGQgfX0KICAgICAgICAgICAgdGltZW91dFNlY29uZHM6IHt7IC5WYWx1ZXMubGl2ZW5lc3NQcm9iZS50aW1lb3V0U2Vjb25kcyB9fQogICAgICAgICAgcmVhZGluZXNzUHJvYmU6CiAgICAgICAgICAgIGh0dHBHZXQ6CiAgICAgICAgICAgICAgcGF0aDoge3sgLlZhbHVlcy5yZWFkaW5lc3NQcm9iZS5wYXRoIH19CiAgICAgICAgICAgICAgcG9ydDoge3sgLlZhbHVlcy5zZXJ2aWNlLmludGVybmFsUG9ydCB9fQogICAgICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiB7eyAuVmFsdWVzLnJlYWRpbmVzc1Byb2JlLmluaXRpYWxEZWxheVNlY29uZHMgfX0KICAgICAgICAgICAgcGVyaW9kU2Vjb25kczoge3sgLlZhbHVlcy5yZWFkaW5lc3NQcm9iZS5wZXJpb2RTZWNvbmRzIH19CiAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IHt7IC5WYWx1ZXMucmVhZGluZXNzUHJvYmUuZmFpbHVyZVRocmVzaG9sZCB9fQogICAgICAgICAgICB0aW1lb3V0U2Vjb25kczoge3sgLlZhbHVlcy5yZWFkaW5lc3NQcm9iZS50aW1lb3V0U2Vjb25kcyB9fQogICAgICAgICAgcmVzb3VyY2VzOgp7eyB0b1lhbWwgLlZhbHVlcy5yZXNvdXJjZXMgfCBpbmRlbnQgMTIgfX0KICAgIHt7LSBpZiAuVmFsdWVzLmltYWdlLnB1bGxTZWNyZXRzIH19CiAgICAgIGltYWdlUHVsbFNlY3JldHM6Cnt7IHRvWWFtbCAuVmFsdWVzLmltYWdlLnB1bGxTZWNyZXRzIHwgaW5kZW50IDggfX0KICAgIHt7LSBlbmQgfX0KICAgIHt7LSBpZiAuVmFsdWVzLm5vZGVTZWxlY3RvciB9fQogICAgICBub2RlU2VsZWN0b3I6Cnt7IHRvWWFtbCAuVmFsdWVzLm5vZGVTZWxlY3RvciB8IGluZGVudCA4IH19CiAgICB7ey0gZW5kIH19CiAgICB7ey0gaWYgLlZhbHVlcy50b2xlcmF0aW9ucyB9fQogICAgICB0b2xlcmF0aW9uczoKe3sgdG9ZYW1sIC5WYWx1ZXMudG9sZXJhdGlvbnMgfCBpbmRlbnQgOCB9fQogICAge3stIGVuZCB9fQo="
100
+ }
101
+ ],
102
+ "values": {
103
+ "affinity": {},
104
+ "deploy": {
105
+ "directory": "/usr/local/tomcat/webapps"
106
+ },
107
+ "env": [],
108
+ "extraInitContainers": [],
109
+ "extraVolumeMounts": [],
110
+ "extraVolumes": [],
111
+ "hostPort": 8009,
112
+ "image": {
113
+ "pullPolicy": "IfNotPresent",
114
+ "pullSecrets": [],
115
+ "tomcat": {
116
+ "repository": "tomcat",
117
+ "tag": "7.0"
118
+ },
119
+ "webarchive": {
120
+ "repository": "ananwaresystems/webarchive",
121
+ "tag": "1.0"
122
+ }
123
+ },
124
+ "ingress": {
125
+ "annotations": {},
126
+ "enabled": false,
127
+ "hosts": [
128
+ "chart-example.local"
129
+ ],
130
+ "path": "/",
131
+ "tls": []
132
+ },
133
+ "livenessProbe": {
134
+ "failureThreshold": 6,
135
+ "initialDelaySeconds": 60,
136
+ "path": "/sample",
137
+ "periodSeconds": 30,
138
+ "timeoutSeconds": 5
139
+ },
140
+ "nodeSelector": {},
141
+ "readinessProbe": {
142
+ "failureThreshold": 6,
143
+ "initialDelaySeconds": 60,
144
+ "path": "/sample",
145
+ "periodSeconds": 30,
146
+ "timeoutSeconds": 5
147
+ },
148
+ "replicaCount": 1,
149
+ "resources": {},
150
+ "service": {
151
+ "externalPort": 80,
152
+ "internalPort": 8080,
153
+ "name": "http",
154
+ "type": "LoadBalancer"
155
+ },
156
+ "tolerations": []
157
+ },
158
+ "schema": null,
159
+ "files": [
160
+ {
161
+ "name": "README.md",
162
+ "data": "IyDimqDvuI8gUmVwbyBBcmNoaXZlIE5vdGljZQoKQXMgb2YgTm92IDEzLCAyMDIwLCBjaGFydHMgaW4gdGhpcyByZXBvIHdpbGwgbm8gbG9uZ2VyIGJlIHVwZGF0ZWQuCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIEhlbG0gQ2hhcnRzIFtEZXByZWNhdGlvbiBhbmQgQXJjaGl2ZSBOb3RpY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxtL2NoYXJ0cyMlRUYlQjglOEYtZGVwcmVjYXRpb24tYW5kLWFyY2hpdmUtbm90aWNlKSwgYW5kIFtVcGRhdGVdKGh0dHBzOi8vaGVsbS5zaC9ibG9nL2NoYXJ0cy1yZXBvLWRlcHJlY2F0aW9uLykuCgojIFRvbWNhdAoKW1RvbWNhdF0oaHR0cDovL3RvbWNhdC5hcGFjaGUub3JnKSBpcyBpcyBhbiBvcGVuIHNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSmF2YSBTZXJ2bGV0LCBKYXZhU2VydmVyIFBhZ2VzLCBKYXZhIEV4cHJlc3Npb24gTGFuZ3VhZ2UgYW5kIEphdmEgV2ViU29ja2V0IHRlY2hub2xvZ2llcy4KCiMjIERFUFJFQ0FUSU9OIE5PVElDRQoKVGhpcyBjaGFydCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgc3VwcG9ydGVkLgoKIyMgSW50cm9kdWN0aW9uCgpUaGlzIGNoYXJ0IGNyZWF0ZXMgYSBbdG9tY2F0IGFwcGxpY2F0aW9uIHNlcnZlcl0oaHR0cDovL3RvbWNhdC5hcGFjaGUub3JnKSBEZXBsb3ltZW50LCBwbHVzIGh0dHAgU2VydmljZXMgZm9yIHRoZSBzZXJ2ZXIuClRoZSBjaGFydCBvZmZlcnMgYW4gb3B0aW1pemF0aW9uIGZvciBhcHBsaWNhdGlvbiB1cGRhdGVzIHJ1bm5pbmcgaW4gYSBzZXJ2bGV0IGNvbnRhaW5lci10eXBlIGVuZ2luZXMgbGlrZSB0b21jYXQgYW5kIFtKYm9zc10oaHR0cDovL2pib3NzYXMuamJvc3Mub3JnKS4gVGhlIGNoYXJ0IHVzZXMgdGhlIFdBUiwgRUFSLCBhbmQgb3RoZXIgZGVwbG95YWJsZSBjb21wb25lbnRzIG91dHNpZGUgb2YgdGhlIFNlcnZsZXQgZW5naW5lIGFzIHNpZGVjYXIgY29udGFpbmVyIHNvIGFwcGxpY2F0aW9uIHVwZ3JhZGVzIHJlcXVpcmVzIHRoZSBzaWRlY2FyIGNvbnRhaW5lciBpbWFnZSBvbmx5IHRvIGJlIHVwZGF0ZWQgYW5kIG5vdCB0aGUgU2VydmxldCBlbmdpbmUgYXMgaWYgYm90aCB3b3VsZCBydW4gYXQgdGhlIHNhbWUgaW1hZ2UuIAoKCiMjIFByZXJlcXVpc2l0ZXMKCi0gS3ViZXJuZXRlcyAxLjEwKyAKCiMjIFByb3ZpZGVyLXNwZWNpZmljIFByZXJlcXVpc2l0ZXMKCgojIyBJbnN0YWxsaW5nIHRoZSBDaGFydAoKVG8gaW5zdGFsbCB0aGUgY2hhcnQgd2l0aCB0aGUgcmVsZWFzZSBuYW1lIGBteS1yZWxlYXNlYDoKCmBgYGJhc2gKJCBoZWxtIGluc3RhbGwgLS1uYW1lIG15LXJlbGVhc2Ugc3RhYmxlL3RvbWNhdApgYGAKClRoaXMgY29tbWFuZCBkZXBsb3lzIGEgdG9tY2F0IGRlZGljYXRlZCBzZXJ2ZXIgd2l0aCBzYW5lIGRlZmF1bHRzLgoKPiAqKlRpcCoqOiBMaXN0IGFsbCByZWxlYXNlcyB1c2luZyBgaGVsbSBsaXN0YAoKIyMgVW5pbnN0YWxsaW5nIHRoZSBDaGFydAoKVG8gdW5pbnN0YWxsL2RlbGV0ZSB0aGUgYG15LXJlbGVhc2VgIGRlcGxveW1lbnQ6CgpgYGBiYXNoCiQgaGVsbSBkZWxldGUgbXktcmVsZWFzZQpgYGAKClRoZSBjb21tYW5kIHJlbW92ZXMgYWxsIHRoZSBLdWJlcm5ldGVzIGNvbXBvbmVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFydCBhbmQgZGVsZXRlcyB0aGUgcmVsZWFzZS4KCiMjIENvbmZpZ3VyYXRpb24KClRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgdGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSB0b21jYXQgY2hhcnQgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgoKUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgaW1hZ2Uud2ViYXJjaGl2ZS5yZXBvc2l0b3J5YCAgIHwgU2lkZWNhciBpbWFnZSBzb3VyY2UgcmVwb3NpdG9yeSBuYW1lICB8IGBhbmFud2FyZXN5c3RlbXMvd2ViYXJjaGl2ZWAKYGltYWdlLndlYmFyY2hpdmUudGFnYCAgICAgICAgICB8IGB3ZWJhcmNoaXZlYCByZWxlYXNlIHRhZy4gICAgICAgICAgICAgfCBgMS4wYApgaW1hZ2UudG9tY2F0LnJlcG9zaXRvcnlgICAgICAgIHwgVG9tYWN0IGltYWdlIHNvdXJjZSByZXBvc2l0b3J5IG5hbWUgICB8IGB0b21jYXRgCmBpbWFnZS50b21jYXQudGFnYCAgICAgICAgICAgICAgfCBgdG9tY2F0YCByZWxlYXNlIHRhZy4gICAgICAgICAgICAgICAgIHwgYDcuMGAKYGltYWdlLnB1bGxQb2xpY3lgICAgICAgICAgICAgICB8IEltYWdlIHB1bGwgcG9saWN5ICAgICAgICAgICAgICAgICAgICAgfCBgSWZOb3RQcmVzZW50YApgaW1hZ2UucHVsbFNlY3JldHNgICAgICAgICAgICAgIHwgSW1hZ2UgcHVsbCBzZWNyZXRzICAgICAgICAgICAgICAgICAgICB8IGBbXWAKYGRlcGxveS5kaXJlY3RvcnlgICAgICAgICAgICAgICB8IFdlYmFyY2hpdmUgZGVwbG95bWVudCBkaXJlY3RvcnkgICAgICAgfCBgL3Vzci9sb2NhbC90b21jYXQvd2ViYXBwc2AKYGVudmAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVudmlyb25tZW50IHZhcmlhYmxlcyAgICAgICAgICAgICAgICAgfCBgW11gCmBleHRyYVZvbHVtZXNgICAgICAgICAgICAgICAgICAgfCBFeHRyYSB2b2x1bWVzICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFtdYApgZXh0cmFWb2x1bWVNb3VudHNgICAgICAgICAgICAgIHwgRXh0cmEgdm9sdW1lIG1vdW50cyAgICAgICAgICAgICAgICAgICB8IGBbXWAKYGV4dHJhSW5pdENvbnRhaW5lcnNgICAgICAgICAgICB8IEV4dHJhIGluaXQgY29udGFpbmVycyAgICAgICAgICAgICAgICAgfCBgW11gCmBob3N0UG9ydGAgICAgICAgICAgICAgICAgICAgICAgfCBob3N0UG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYDgwMDlgCmBzZXJ2aWNlLm5hbWVgICAgICAgICAgICAgICAgICAgfCBUb21jYXQgc2VydmljZSBuYW1lICAgICAgICAgICAgICAgICAgIHwgYGh0dHBgCmBzZXJ2aWNlLmV4dGVybmFsUG9ydGAgICAgICAgICAgfCBLdWJlcm5ldGVzIHNlcnZpY2UgcG9ydCAgICAgICAgICAgICAgIHwgYDgwYApgc2VydmljZS5pbnRlcm5hbFBvcnRgICAgICAgICAgIHwgVG9tY2F0IGZyb250IHBvcnQgICAgICAgICAgICAgICAgICAgICB8IGA4MDgwYApgc2VydmljZS50eXBlYCAgICAgICAgICAgICAgICAgIHwgS3ViZXJuZXRlcyBzZXJ2aWNlIHR5cGUgICAgICAgICAgICAgICB8IGBMb2FkQmFsYW5jZXJgCmByZWFkaW5lc3NQcm9iZS5wYXRoYCAgICAgICAgICAgfCBIVFRQIHBhdGggdG8gY2hlY2sgZm9yIHJlYWRpbmVzcyAgICAgIHwgYC9zYW1wbGVgCmBsaXZlbmVzc1Byb2JlLnBhdGhgICAgICAgICAgICAgfCBIVFRQIHBhdGggdG8gY2hlY2sgZm9yIHJlYWRpbmVzcyAgICAgIHwgYC9zYW1wbGVgCmByZXNvdXJjZXNgICAgICAgICAgICAgICAgICAgICAgfCBDUFUvTWVtb3J5IHJlc291cmNlIHJlcXVlc3RzL2xpbWl0cyAgIHwgYHt9YApgbm9kZVNlbGVjdG9yYCAgICAgICAgICAgICAgICAgIHwgTm9kZSBhZmZpbml0eSAgICAgICAgICAgICAgICAgICAgICAgICB8IGB7fWAKYHRvbGVyYXRpb25zYCAgICAgICAgICAgICAgICAgICB8IE5vZGUgdG9sZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgfCBge31gCgpSZWZlciB0byBbdmFsdWVzLnlhbWxdKHZhbHVlcy55YW1sKSBmb3IgdGhlIGZ1bGwgcnVuLWRvd24gb24gZGVmYXVsdHMuIFRoZXNlIGFyZSBhIG1peHR1cmUgb2YgS3ViZXJuZXRlcyBhbmQgdG9tY2F0LXJlbGF0ZWQgZGlyZWN0aXZlcyB0aGF0IG1hcCB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIAoKU3BlY2lmeSBlYWNoIHBhcmFtZXRlciB1c2luZyB0aGUgYC0tc2V0IGtleT12YWx1ZVssa2V5PXZhbHVlXWAgYXJndW1lbnQgdG8gYGhlbG0gaW5zdGFsbGAuIEZvciBleGFtcGxlLAoKYGBgYmFzaAokIGhlbG0gaW5zdGFsbCAtLW5hbWUgbXktcmVsZWFzZSBcCiAgLS1zZXQgVmFsdWVzLnNvbWV2YWw9TXkgU2VydmVyLEltYWdlVGFnPTEuMCBcCiAgICBzdGFibGUvdG9tY2F0CmBgYAoKVGhlIGFib3ZlIGNvbW1hbmQgZGVwbG95cyBUb21jYXQgZGVkaWNhdGVkIHdpdGggYSBzZXJ2ZXIgbmFtZSBvZiBgTXkgU2VydmVyYCBhbmQgZG9ja2VyLXRvbWNhdCBpbWFnZSB2ZXJzaW9uIGAxLjBgLgoKQWx0ZXJuYXRpdmVseSwgYSBZQU1MIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgY2FuIGJlIHByb3ZpZGVkIHdoaWxlIGluc3RhbGxpbmcgdGhlIGNoYXJ0LiBGb3IgZXhhbXBsZSwKCmBgYGJhc2gKJCBoZWxtIGluc3RhbGwgLS1uYW1lIG15LXJlbGVhc2UgLWYgdmFsdWVzLnlhbWwgc3RhYmxlL3N0YWJsZQpgYGAKCj4gKipUaXAqKjogWW91IGNhbiB1c2UgdGhlIGRlZmF1bHQgW3ZhbHVlcy55YW1sXSh2YWx1ZXMueWFtbCkKCiMjIFBlcnNpc3RlbmNlCgo+ICoiQW4gZW1wdHlEaXIgdm9sdW1lIGlzIGZpcnN0IGNyZWF0ZWQgd2hlbiBhIFBvZCBpcyBhc3NpZ25lZCB0byBhIE5vZGUsIGFuZCBleGlzdHMgYXMgbG9uZyBhcyB0aGF0IFBvZCBpcyBydW5uaW5nIG9uIHRoYXQgbm9kZS4gV2hlbiBhIFBvZCBpcyByZW1vdmVkIGZyb20gYSBub2RlIGZvciBhbnkgcmVhc29uLCB0aGUgZGF0YSBpbiB0aGUgZW1wdHlEaXIgaXMgZGVsZXRlZCBmb3JldmVyLiIqCgojIyBDcmVkaXRzCgpbSmF2YSBXZWIgQXBwbGljYXRpb24gd2l0aCBUb21jYXQgYW5kIFNpZGVjYXIgQ29udGFpbmVyXShodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9leGFtcGxlcy90cmVlL21hc3Rlci9zdGFnaW5nL2phdmF3ZWItdG9tY2F0LXNpZGVjYXIpCg=="
163
+ }
164
+ ]
165
+ },
166
+ "manifest": "---\n# Source: tomcat/templates/appsrv-svc.yaml\napiVersion: v1\nkind: Service\nmetadata:\n name: tomcat\n labels:\n app: tomcat\n chart: tomcat-0.4.3\n release: tomcat\n heritage: Helm\nspec:\n type: LoadBalancer\n ports:\n - port: 80\n targetPort: 8080\n protocol: TCP\n name: http\n selector:\n app: tomcat\n release: tomcat\n---\n# Source: tomcat/templates/appsrv.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: tomcat\n labels:\n app: tomcat\n chart: tomcat-0.4.3\n release: tomcat\n heritage: Helm\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: tomcat\n release: tomcat\n template:\n metadata:\n labels:\n app: tomcat\n release: tomcat\n spec:\n volumes:\n - name: app-volume\n emptyDir: {}\n initContainers:\n - name: war\n image: ananwaresystems/webarchive:1.0\n imagePullPolicy: IfNotPresent\n command:\n - \"sh\"\n - \"-c\"\n - \"cp /*.war /app\"\n volumeMounts:\n - name: app-volume\n mountPath: /app\n\n containers:\n - name: tomcat\n image: tomcat:7.0\n imagePullPolicy: IfNotPresent\n volumeMounts:\n - name: app-volume\n mountPath: /usr/local/tomcat/webapps\n ports:\n - containerPort: 8080\n hostPort: 8009\n livenessProbe:\n httpGet:\n path: /sample\n port: 8080\n initialDelaySeconds: 60\n periodSeconds: 30\n failureThreshold: 6\n timeoutSeconds: 5\n readinessProbe:\n httpGet:\n path: /sample\n port: 8080\n initialDelaySeconds: 60\n periodSeconds: 30\n failureThreshold: 6\n timeoutSeconds: 5\n resources:\n {}\n",
167
+ "version": 22,
168
+ "namespace": "default"
169
+ })
170
+ const test = await r.getCommitMessage()
171
+ expect(test).to.be.deep.equal('test');
172
+ });
173
+
53
174
  it('should init revision', () => {
54
175
  const RevisionProxy = getProxyRevision();
55
176
  const r = new RevisionProxy(getFakeDataToInitiateRevision());
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.23.6",
2
+ "version": "1.24.0",
3
3
  "name": "@codefresh-io/kube-integration",
4
4
  "main": "index.js",
5
5
  "description": "",
@@ -19,7 +19,7 @@
19
19
  "url": "git+https://github.com/codefresh-io/kube-integration.git"
20
20
  },
21
21
  "engines": {
22
- "node": "12.21.0"
22
+ "node": "12.22.4"
23
23
  },
24
24
  "author": "Oleg Sucharevich <olegs@codefresh.io>",
25
25
  "license": "ISC",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@codefresh-io/docker-reference": "^0.0.5",
36
- "@codefresh-io/eventbus": "^1.3.3",
36
+ "@codefresh-io/eventbus": "1.4.1",
37
37
  "@codefresh-io/http-infra": "^1.8.9",
38
38
  "bluebird": "^3.5.0",
39
39
  "body-parser": "^1.17.2",
@@ -13,11 +13,13 @@ class CrudController {
13
13
  getAll(request, response, next) {
14
14
  const filters = request.filters;
15
15
  const kubeResourceController = request.kubeResourceController;
16
+ const labelSelector = request.query.labelSelector;
17
+ const searchFilter = labelSelector ? { labelSelector } : {};
16
18
  if (this._shouldLookForNs) {
17
19
  const namespaces = request.namespaces;
18
20
  Promise.map((namespaces), (ns) => {
19
21
  return kubeResourceController(ns)
20
- .get()
22
+ .get(searchFilter)
21
23
  .map(resource => resource.getBasicData());
22
24
  })
23
25
  .then(_.flattenDeep)
@@ -171,4 +173,4 @@ class CrudController {
171
173
  }
172
174
  }
173
175
 
174
- module.exports = CrudController;
176
+ module.exports = CrudController;
package/service.yaml CHANGED
@@ -1 +1 @@
1
- version: 1.23.6
1
+ version: 1.25.4