Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: Detect duplicate environment variables defined #448

Closed
ryo-yamaoka opened this issue Mar 21, 2022 · 2 comments · Fixed by #451
Closed

Feature request: Detect duplicate environment variables defined #448

ryo-yamaoka opened this issue Mar 21, 2022 · 2 comments · Fixed by #451
Assignees

Comments

@ryo-yamaoka
Copy link
Contributor

Duplicate definitions of environment variables result in unexpected behavior, which we would like to discover.
This issue is reported in the Kubernetes repo but has not yet been fixed.
kubernetes/kubernetes#58477

Propose behavior

# manifest.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: envvars-deployment
  labels:
    app: envvars
  annotations:
    kube-score/ignore: pod-networkpolicy,container-resources,container-image-pull-policy,container-security-context-privileged,container-security-context-user-group-id,container-security-context-readonlyrootfilesystem,container-ephemeral-storage-request-and-limit
spec:
  replicas: 1
  selector:
    matchLabels:
      app: envvars
  template:
    metadata:
      labels:
        app: envvars
    spec:
      containers:
      - name: envvars
        image: busybox:1.34
        command:
        - /bin/sh
        - -c
        - date; env; tail -f /dev/null
        env:
        - name: SAMPLE_ENV_VAR1
          value: sample1
        - name: SAMPLE_ENV_VAR2
          value: sample2
        - name: SAMPLE_ENV_VAR2 # WANT TO DETECT THIS
          value: sample2-duplicated
$ kube-score score manifest.yaml
apps/v1/Deployment envvars-deployment                                         💥
    [CRITICAL] Pod EnvironmentVariable
        · The pod has duplicated environment variables
            bla bla bla ...
@zegl zegl added help wanted Extra attention is needed good first issue Good for newcomers labels Mar 21, 2022
@ryo-yamaoka
Copy link
Contributor Author

If don't mind, I'd like to implement it myself.

@zegl
Copy link
Owner

zegl commented Mar 21, 2022

@ryo-yamaoka Not at all, I'll assign this issue to you! :-)

@zegl zegl removed help wanted Extra attention is needed good first issue Good for newcomers labels Mar 21, 2022
ryo-yamaoka added a commit to ryo-yamaoka/kube-score that referenced this issue Mar 27, 2022
bors bot added a commit that referenced this issue Mar 28, 2022
451: Implement feature request: To detect duplicate defined environment variables r=zegl a=ryo-yamaoka

score/container: To detect duplicate defined environment variables.
    
Fixes #448

### behaviour

```
$ ./kube-score score ~/test.yaml 
apps/v1/Deployment sample-deployment                                          💥
    [CRITICAL] Environment Variable Key Duplication
        · sampleA -> Environment Variable Key Duplication
            Container environment variable key 'SAMPLE_ENV_VAR' duplicated
        · sampleB -> Environment Variable Key Duplication
            Container environment variable key 'SAMPLE_ENV_VAR1' duplicated
        · sampleB -> Environment Variable Key Duplication
            Container environment variable key 'SAMPLE_ENV_VAR2' duplicated
```

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-deployment
  labels:
    app: sample
  annotations:
    kube-score/ignore: pod-networkpolicy,container-resources,container-image-pull-policy,container-security-context-privileged,container-security-context-user-group-id,container-security-context-readonlyrootfilesystem,container-ephemeral-storage-request-and-limit,container-image-tag
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample
  template:
    metadata:
      labels:
        app: sample
    spec:
      containers:
      - name: sampleA
        image: sample:latest
        ports:
        - containerPort: 80
        env:
        - name: SAMPLE_ENV_VAR
          value: sample1
        - name: SAMPLE_ENV_VAR
          value: sample1
      - name: sampleB
        image: sample:latest
        ports:
        - containerPort: 80
        env:
        - name: SAMPLE_ENV_VAR1
          value: sample1
        - name: SAMPLE_ENV_VAR1
          value: sample1
        - name: SAMPLE_ENV_VAR2
          value: sample2
        - name: SAMPLE_ENV_VAR2
          value: sample2
```

Co-authored-by: ryo-yamaoka <20574684+ryo-yamaoka@users.noreply.github.com>
@bors bors bot closed this as completed in b07607a Mar 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants