Skip to content
This repository was archived by the owner on Jul 26, 2022. It is now read-only.

Commit 87a3ecb

Browse files
authored
feat!: drop helm v2 and builtin CRD management (#663)
Signed-off-by: Markus Maga <[email protected]>
1 parent 2ac54fc commit 87a3ecb

15 files changed

+79
-517
lines changed

.github/workflows/workflow.yml

+1-13
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,6 @@ jobs:
4040
test-e2e:
4141
runs-on: ubuntu-latest
4242
name: E2E
43-
strategy:
44-
matrix:
45-
disableCustomResourceManager: ["true", "false"]
46-
helmVersion: ["V2", "V3"]
4743
steps:
4844
- uses: actions/checkout@v2
49-
- uses: azure/setup-helm@v1
50-
with:
51-
version: v2.17.0
52-
if: matrix.helmVersion == 'V2'
53-
- name: configure helm v2
54-
run: |
55-
helm init --client-only
56-
if: matrix.helmVersion == 'V2'
57-
- run: ./e2e/run-e2e-suite.sh ${{ matrix.disableCustomResourceManager }} ${{ matrix.helmVersion }}
45+
- run: ./e2e/run-e2e-suite.sh

README.md

+65-79
Large diffs are not rendered by default.

bin/daemon.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ const PollerFactory = require('../lib/poller-factory')
1717
const {
1818
backends,
1919
kubeClient,
20-
customResourceManager,
2120
customResourceManifest,
2221
logger,
2322
metricsPort,
@@ -34,7 +33,8 @@ async function main () {
3433
logger.info('loading kube specs')
3534
await kubeClient.loadSpec()
3635
logger.info('successfully loaded kube specs')
37-
await customResourceManager.manageCrd({ customResourceManifest })
36+
37+
kubeClient.addCustomResourceDefinition(customResourceManifest)
3838

3939
const externalSecretEvents = getExternalSecretEvents({
4040
kubeClient,

charts/kubernetes-external-secrets/README.md

+3-34
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44

55
## TL;DR;
66

7-
Assumes you are using Helm V3:
8-
97
```bash
108
$ helm repo add external-secrets https://external-secrets.github.io/kubernetes-external-secrets/
11-
$ helm install external-secrets/kubernetes-external-secrets --skip-crds
9+
$ helm install external-secrets/kubernetes-external-secrets
1210
```
1311

1412
See below for [Helm V2 considerations](#helm-v2-considerations) when installing the chart.
@@ -22,39 +20,13 @@ See below for [Helm V2 considerations](#helm-v2-considerations) when installing
2220
To install the chart with the release named `my-release`:
2321

2422
```bash
25-
$ helm install my-release external-secrets/kubernetes-external-secrets --skip-crds
23+
$ helm install my-release external-secrets/kubernetes-external-secrets
2624
```
2725

28-
> **Tip:** A namespace can be specified by the `Helm` option '`--namespace kube-external-secrets`', however know this will not [autocreate a namespace](https://helm.sh/docs/faq/#automatically-creating-namespaces) like in Helm V2. To do that, also add the `--create-namespace` flag.
29-
30-
> **Note**: `--skip-crds` is required in order to ensure the custom resource manager is used and will work for backwards compatibility. In future 4.x releases, this will not be required. See below for how to [disable the custom resource manager](#installing-the-crd) via the chart.
31-
3226
To install the chart with [AWS IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html):
3327

3428
```bash
35-
$ helm install my-release external-secrets/kubernetes-external-secrets --skip-crds --set securityContext.fsGroup=65534 --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"='arn:aws:iam::111111111111:role/ROLENAME'
36-
```
37-
38-
### Installing the CRD
39-
40-
To install the `ExternalSecret` CRD via the chart and disable the custom resource manager, you can omit `--skip-crds` and set `customResourceManagerDisabled`:
41-
42-
```bash
43-
$ helm install external-secrets/kubernetes-external-secrets --name my-release --set customResourceManagerDisabled=true
44-
```
45-
46-
### Helm V2 Considerations
47-
48-
For Helm V2, `--skip-crds` is not needed, but `--name` is in order to set the release name:
49-
50-
```bash
51-
$ helm install external-secrets/kubernetes-external-secrets --name my-release
52-
```
53-
54-
If you wish to disable the custom resource manager and install the CRD via Helm V2, then `crds.create` must also be set:
55-
56-
```bash
57-
$ helm install external-secrets/kubernetes-external-secrets --name my-release --set customResourceManagerDisabled=true --set crds.create=true
29+
$ helm install my-release external-secrets/kubernetes-external-secrets --set securityContext.fsGroup=65534 --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"='arn:aws:iam::111111111111:role/ROLENAME'
5830
```
5931

6032
## Uninstalling the Chart
@@ -71,8 +43,6 @@ The following table lists the configurable parameters of the `kubernetes-externa
7143

7244
| Parameter | Description | Default |
7345
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
74-
| `crds.create` | For Helm V2 installations of the chart to install the CRD, for V3 installations use `--skip-crds` appropriately | `false` |
75-
| `customResourceManagerDisabled` | Disables the custom resource manager, requiring the CRD be installed via the chart or other means | `false` |
7646
| `env.AWS_REGION` | Set AWS_REGION in Deployment Pod | `us-west-2` |
7747
| `env.AWS_INTERMEDIATE_ROLE_ARN` | Specifies a role to be assumed before assuming role arn specified in external secrets | |
7848
| `env.LOG_LEVEL` | Set the application log level | `info` |
@@ -122,7 +92,6 @@ Specify each parameter using the `--set key=value[,key=value]` argument to `helm
12292

12393
```bash
12494
helm install my-release external-secrets/kubernetes-external-secrets \
125-
--set customResourceManagerDisabled=true
12695
--set env.POLLER_INTERVAL_MILLISECONDS='300000' \
12796
--set podAnnotations."iam\.amazonaws\.com/role"='Name-Of-IAM-Role-With-SecretManager-Access'
12897
```

charts/kubernetes-external-secrets/crds/kubernetes-client.io_externalsecrets_crd.yaml

-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ kind: CustomResourceDefinition
44
metadata:
55
name: externalsecrets.kubernetes-client.io
66
annotations:
7-
# for helm v2 backwards compatibility
8-
helm.sh/hook: crd-install
97
# used in e2e testing
108
app.kubernetes.io/managed-by: helm
119
spec:

charts/kubernetes-external-secrets/templates/crds.yaml

-8
This file was deleted.

charts/kubernetes-external-secrets/templates/deployment.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ spec:
4545
resources:
4646
{{- toYaml .Values.resources | nindent 12 }}
4747
env:
48-
{{- if .Values.customResourceManagerDisabled }}
49-
- name: DISABLE_CUSTOM_RESOURCE_MANAGER
50-
value: "true"
51-
{{- end }}
5248
{{- range $name, $value := .Values.env }}
5349
{{- if not (empty $value) }}
5450
- name: {{ $name | quote }}

charts/kubernetes-external-secrets/templates/rbac.yaml

-5
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ rules:
2929
- apiGroups: ["kubernetes-client.io"]
3030
resources: ["externalsecrets/status"]
3131
verbs: ["get", "update"]
32-
{{- if .Values.customResourceManagerDisabled | not }}
33-
- apiGroups: ["apiextensions.k8s.io"]
34-
resources: ["customresourcedefinitions"]
35-
verbs: ["create"]
36-
{{- end }}
3732
{{- if .Values.customClusterRoles }}
3833
{{- toYaml .Values.customClusterRoles | nindent 2 }}
3934
{{- end }}

charts/kubernetes-external-secrets/values.yaml

+5-12
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,15 @@
22
# This is a YAML-formatted file.
33
# Declare variables to be passed into your templates.
44

5-
# Determines whether the Helm chart or kubernetes-external-secrets
6-
# will handle the ExternalSecret CRD
7-
customResourceManagerDisabled: false
8-
9-
crds:
10-
# only needed for helm v2, leave this disabled for helm v3
11-
create: false
12-
135
# Environment variables to set on deployment pod
146
env:
157
AWS_REGION: us-west-2
168
AWS_DEFAULT_REGION: us-west-2
17-
POLLER_INTERVAL_MILLISECONDS: 10000 # Caution, setting this frequency may incur additional charges on some platforms
9+
POLLER_INTERVAL_MILLISECONDS: 10000 # Caution, setting this frequency may incur additional charges on some platforms
1810
WATCH_TIMEOUT: 60000
19-
WATCHED_NAMESPACES: '' # Comma separated list of namespaces, empty or unset means ALL namespaces.
11+
WATCHED_NAMESPACES: "" # Comma separated list of namespaces, empty or unset means ALL namespaces.
2012
LOG_LEVEL: info
21-
LOG_MESSAGE_KEY: 'msg'
13+
LOG_MESSAGE_KEY: "msg"
2214
# Print logs level as string ("info") rather than integer (30)
2315
# USE_HUMAN_READABLE_LOG_LEVELS: true
2416
METRICS_PORT: 3001
@@ -103,7 +95,8 @@ securityContext:
10395
# Required for use of IRSA, see https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-technical-overview.html
10496
# fsGroup: 65534
10597

106-
resources: {}
98+
resources:
99+
{}
107100
# We usually recommend not to specify default resources and to leave this as a conscious
108101
# choice for the user. This also increases chances charts run on environments with little
109102
# resources, such as Minikube. If you do want to specify resources, uncomment the following

config/environment.js

-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ const enforceNamespaceAnnotation = 'ENFORCE_NAMESPACE_ANNOTATIONS' in process.en
3838

3939
const metricsPort = process.env.METRICS_PORT || 3001
4040

41-
const customResourceManagerDisabled = 'DISABLE_CUSTOM_RESOURCE_MANAGER' in process.env
4241
const watchTimeout = process.env.WATCH_TIMEOUT ? parseInt(process.env.WATCH_TIMEOUT) : 60000
4342

4443
// A comma-separated list of watched namespaces. If set, only ExternalSecrets in those namespaces will be handled.
@@ -66,7 +65,6 @@ module.exports = {
6665
enforceNamespaceAnnotation,
6766
pollingDisabled,
6867
logLevel,
69-
customResourceManagerDisabled,
7068
useHumanReadableLogLevels,
7169
logMessageKey,
7270
watchTimeout,

config/index.js

-9
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ const azureConfig = require('./azure-config')
1313
const alicloudConfig = require('./alicloud-config')
1414
const gcpConfig = require('./gcp-config')
1515
const envConfig = require('./environment')
16-
const CustomResourceManager = require('../lib/custom-resource-manager')
1716
const SecretsManagerBackend = require('../lib/backends/secrets-manager-backend')
1817
const SystemManagerBackend = require('../lib/backends/system-manager-backend')
1918
const VaultBackend = require('../lib/backends/vault-backend')
@@ -24,7 +23,6 @@ const AliCloudSecretsManagerBackend = require('../lib/backends/alicloud-secrets-
2423
// Get document, or throw exception on error
2524
// eslint-disable-next-line security/detect-non-literal-fs-filename
2625
const customResourceManifest = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname, '../charts/kubernetes-external-secrets/crds/kubernetes-client.io_externalsecrets_crd.yaml'), 'utf8'))
27-
customResourceManifest.metadata.annotations['app.kubernetes.io/managed-by'] = 'custom-resource-manager'
2826

2927
const kubeconfig = new kube.KubeConfig()
3028
kubeconfig.loadFromDefault()
@@ -46,12 +44,6 @@ const logger = pino({
4644
timestamp: () => `,"message_time":"${new Date(Date.now()).toISOString()}"`
4745
})
4846

49-
const customResourceManager = new CustomResourceManager({
50-
kubeClient,
51-
logger,
52-
disabled: envConfig.customResourceManagerDisabled
53-
})
54-
5547
const secretsManagerBackend = new SecretsManagerBackend({
5648
clientFactory: awsConfig.secretsManagerFactory,
5749
assumeRole: awsConfig.assumeRole,
@@ -122,7 +114,6 @@ backends.secretManager = secretsManagerBackend
122114
module.exports = {
123115
awsConfig,
124116
backends,
125-
customResourceManager,
126117
customResourceManifest,
127118
...envConfig,
128119
kubeClient,

e2e/run-e2e-suite.sh

+1-21
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
DISABLE_CUSTOM_RESOURCE_MANAGER=${1:-true}
18-
HELM_VERSION=${2:-V3}
19-
2017
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
2118
KIND_LOGGING=""
2219
if ! [ -z "$DEBUG" ]; then
@@ -72,25 +69,9 @@ kubectl apply -f ${DIR}/localstack.deployment.yaml
7269

7370
CHART_DIR="$(dirname "$DIR")/charts/kubernetes-external-secrets"
7471
HELM_TEMPLATE_ARGS="e2e ${CHART_DIR}"
75-
HELM_TEMPLATE_EXTRA_ARGS="--include-crds --set customResourceManagerDisabled=true"
76-
E2E_EXTRA_ARGS="--env=DISABLE_CUSTOM_RESOURCE_MANAGER=true"
77-
if [[ "$HELM_VERSION" == "V3" ]]; then
78-
if [[ "$DISABLE_CUSTOM_RESOURCE_MANAGER" == "false" ]]; then
79-
HELM_TEMPLATE_EXTRA_ARGS="--skip-crds"
80-
E2E_EXTRA_ARGS=""
81-
fi
82-
else
83-
HELM_TEMPLATE_ARGS="${CHART_DIR} --name e2e"
84-
if [[ "$DISABLE_CUSTOM_RESOURCE_MANAGER" == "true" ]]; then
85-
HELM_TEMPLATE_EXTRA_ARGS="--set crds.create=true --set customResourceManagerDisabled=true"
86-
else
87-
HELM_TEMPLATE_EXTRA_ARGS=""
88-
E2E_EXTRA_ARGS=""
89-
fi
90-
fi
9172

9273
helm template ${HELM_TEMPLATE_ARGS} \
93-
${HELM_TEMPLATE_EXTRA_ARGS} \
74+
--include-crds \
9475
--set image.repository=external-secrets \
9576
--set image.tag=test \
9677
--set env.LOG_LEVEL=debug \
@@ -132,7 +113,6 @@ kubectl run \
132113
--env="AWS_DEFAULT_REGION=us-east-1" \
133114
--env="AWS_REGION=us-east-1" \
134115
--env="LOCALSTACK_STS_URL=http://sts" \
135-
${E2E_EXTRA_ARGS} \
136116
--generator=run-pod/v1 \
137117
--overrides='{ "apiVersion": "v1", "spec":{"serviceAccountName": "external-secrets-e2e"}}' \
138118
e2e --image=external-secrets-e2e:test

e2e/tests/crd.test.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ const { expect } = require('chai')
55

66
const {
77
kubeClient,
8-
customResourceManifest,
9-
customResourceManagerDisabled
8+
customResourceManifest
109
} = require('../../config')
1110

1211
const {
@@ -21,11 +20,7 @@ describe('CRD', () => {
2120
.customresourcedefinitions(customResourceManifest.metadata.name)
2221
.get()
2322

24-
let managedBy = 'custom-resource-manager'
25-
if (customResourceManagerDisabled) {
26-
managedBy = 'helm'
27-
}
28-
23+
const managedBy = 'helm'
2924
expect(res).to.not.equal(undefined)
3025
expect(res.statusCode).to.equal(200)
3126
expect(res.body.metadata.annotations['app.kubernetes.io/managed-by']).to.equal(managedBy)

0 commit comments

Comments
 (0)