mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Correctly handle secret and configMap envs in kubectl describe
This commit is contained in:
parent
4f329516ae
commit
9069cbb086
@ -426,6 +426,46 @@ runTests() {
|
|||||||
# Post-condition: no POD exists
|
# Post-condition: no POD exists
|
||||||
kube::test::get_object_assert "pods -l'name in (valid-pod)'" '{{range.items}}{{$id_field}}:{{end}}' ''
|
kube::test::get_object_assert "pods -l'name in (valid-pod)'" '{{range.items}}{{$id_field}}:{{end}}' ''
|
||||||
|
|
||||||
|
# Detailed tests for describe pod output
|
||||||
|
### Create a new namespace
|
||||||
|
# Pre-condition: the test-secrets namespace does not exist
|
||||||
|
kube::test::get_object_assert 'namespaces' '{{range.items}}{{ if eq $id_field \"test-kubectl-describe-pod\" }}found{{end}}{{end}}:' ':'
|
||||||
|
# Command
|
||||||
|
kubectl create namespace test-kubectl-describe-pod
|
||||||
|
# Post-condition: namespace 'test-secrets' is created.
|
||||||
|
kube::test::get_object_assert 'namespaces/test-kubectl-describe-pod' "{{$id_field}}" 'test-kubectl-describe-pod'
|
||||||
|
|
||||||
|
### Create a generic secret
|
||||||
|
# Pre-condition: no SECRET exists
|
||||||
|
kube::test::get_object_assert 'secrets --namespace=test-kubectl-describe-pod' "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Command
|
||||||
|
kubectl create secret generic test-secret --from-literal=key-1=value1 --type=test-type --namespace=test-kubectl-describe-pod
|
||||||
|
# Post-condition: secret exists and has expected values
|
||||||
|
kube::test::get_object_assert 'secret/test-secret --namespace=test-kubectl-describe-pod' "{{$id_field}}" 'test-secret'
|
||||||
|
kube::test::get_object_assert 'secret/test-secret --namespace=test-kubectl-describe-pod' "{{$secret_type}}" 'test-type'
|
||||||
|
|
||||||
|
### Create a generic configmap
|
||||||
|
# Pre-condition: no CONFIGMAP exists
|
||||||
|
kube::test::get_object_assert 'configmaps --namespace=test-kubectl-describe-pod' "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Command
|
||||||
|
kubectl create configmap test-configmap --from-literal=key-2=value2 --namespace=test-kubectl-describe-pod
|
||||||
|
# Post-condition: configmap exists and has expected values
|
||||||
|
kube::test::get_object_assert 'configmap/test-configmap --namespace=test-kubectl-describe-pod' "{{$id_field}}" 'test-configmap'
|
||||||
|
|
||||||
|
# Create a pod that consumes secret, configmap, and downward API keys as envs
|
||||||
|
kube::test::get_object_assert 'pods --namespace=test-kubectl-describe-pod' "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
kubectl create -f hack/testdata/pod-with-api-env.yaml --namespace=test-kubectl-describe-pod
|
||||||
|
|
||||||
|
kube::test::describe_object_assert 'pods --namespace=test-kubectl-describe-pod' 'env-test-pod' "TEST_CMD_1" "<set to the key 'key-1' in secret 'test-secret'>" "TEST_CMD_2" "<set to the key 'key-2' of config map 'test-configmap'>" "TEST_CMD_3" "env-test-pod (v1:metadata.name)"
|
||||||
|
# Describe command (resource only) should print detailed information about environment variables
|
||||||
|
kube::test::describe_resource_assert 'pods --namespace=test-kubectl-describe-pod' "TEST_CMD_1" "<set to the key 'key-1' in secret 'test-secret'>" "TEST_CMD_2" "<set to the key 'key-2' of config map 'test-configmap'>" "TEST_CMD_3" "env-test-pod (v1:metadata.name)"
|
||||||
|
|
||||||
|
# Clean-up
|
||||||
|
kubectl delete pod env-test-pod --namespace=test-kubectl-describe-pod
|
||||||
|
kubectl delete secret test-secret --namespace=test-kubectl-describe-pod
|
||||||
|
kubectl delete configmap test-configmap --namespace=test-kubectl-describe-pod
|
||||||
|
kubectl delete namespace test-kubectl-describe-pod
|
||||||
|
|
||||||
### Create two PODs
|
### Create two PODs
|
||||||
# Pre-condition: no POD exists
|
# Pre-condition: no POD exists
|
||||||
create_and_use_new_namespace
|
create_and_use_new_namespace
|
||||||
|
25
hack/testdata/pod-with-api-env.yaml
vendored
Normal file
25
hack/testdata/pod-with-api-env.yaml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: env-test-pod
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: test-container
|
||||||
|
image: gcr.io/google_containers/busybox
|
||||||
|
command: [ "/bin/sh", "-c", "env" ]
|
||||||
|
env:
|
||||||
|
- name: TEST_CMD_1
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: test-secret
|
||||||
|
key: key-1
|
||||||
|
- name: TEST_CMD_2
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: test-configmap
|
||||||
|
key: key-2
|
||||||
|
- name: TEST_CMD_3
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
restartPolicy: Never
|
@ -856,14 +856,22 @@ func describeContainers(containers []api.Container, containerStatuses []api.Cont
|
|||||||
}
|
}
|
||||||
fmt.Fprintf(out, " Environment Variables:%s\n", none)
|
fmt.Fprintf(out, " Environment Variables:%s\n", none)
|
||||||
for _, e := range container.Env {
|
for _, e := range container.Env {
|
||||||
if e.ValueFrom != nil && e.ValueFrom.FieldRef != nil {
|
if e.ValueFrom == nil {
|
||||||
|
fmt.Fprintf(out, " %s:\t%s\n", e.Name, e.Value)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case e.ValueFrom.FieldRef != nil:
|
||||||
var valueFrom string
|
var valueFrom string
|
||||||
if resolverFn != nil {
|
if resolverFn != nil {
|
||||||
valueFrom = resolverFn(e)
|
valueFrom = resolverFn(e)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, " %s:\t%s (%s:%s)\n", e.Name, valueFrom, e.ValueFrom.FieldRef.APIVersion, e.ValueFrom.FieldRef.FieldPath)
|
fmt.Fprintf(out, " %s:\t%s (%s:%s)\n", e.Name, valueFrom, e.ValueFrom.FieldRef.APIVersion, e.ValueFrom.FieldRef.FieldPath)
|
||||||
} else {
|
case e.ValueFrom.SecretKeyRef != nil:
|
||||||
fmt.Fprintf(out, " %s:\t%s\n", e.Name, e.Value)
|
fmt.Fprintf(out, " %s:\t<set to the key '%s' in secret '%s'>\n", e.Name, e.ValueFrom.SecretKeyRef.Key, e.ValueFrom.SecretKeyRef.Name)
|
||||||
|
case e.ValueFrom.ConfigMapKeyRef != nil:
|
||||||
|
fmt.Fprintf(out, " %s:\t<set to the key '%s' of config map '%s'>\n", e.Name, e.ValueFrom.ConfigMapKeyRef.Key, e.ValueFrom.ConfigMapKeyRef.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user