From 3b04a9178a984b896bdcee8624e968fbf5b44c23 Mon Sep 17 00:00:00 2001 From: Hang Yan Date: Tue, 10 Jul 2018 13:15:36 +0800 Subject: [PATCH] Fix environment with env_file bug --- pkg/transformer/kubernetes/kubernetes.go | 13 +- script/test/cmd/tests.sh | 10 +- script/test/fixtures/env/docker-compose.yml | 13 ++ .../fixtures/env/hadoop-hive-namenode.env | 2 + script/test/fixtures/env/output-k8s.json | 165 +++++++++++++ script/test/fixtures/env/output-os.json | 216 ++++++++++++++++++ 6 files changed, 413 insertions(+), 6 deletions(-) create mode 100644 script/test/fixtures/env/docker-compose.yml create mode 100644 script/test/fixtures/env/hadoop-hive-namenode.env create mode 100644 script/test/fixtures/env/output-k8s.json create mode 100644 script/test/fixtures/env/output-os.json diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index 5b0ba18bf2..129a8fb981 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -572,8 +572,11 @@ func (k *Kubernetes) ConfigEnvs(name string, service kobject.ServiceConfig, opt envs := transformer.EnvSort{} + keysFromEnvFile := make(map[string]bool) + // If there is an env_file, use ConfigMaps and ignore the environment variables // already specified + if len(service.EnvFile) > 0 { // Load each env_file @@ -600,14 +603,14 @@ func (k *Kubernetes) ConfigEnvs(name string, service kobject.ServiceConfig, opt Key: k, }}, }) + keysFromEnvFile[k] = true } - } + } - } else { - - // Load up the environment variables - for _, v := range service.Environment { + // Load up the environment variables + for _, v := range service.Environment { + if !keysFromEnvFile[v.Name] { envs = append(envs, api.EnvVar{ Name: v.Name, Value: v.Value, diff --git a/script/test/cmd/tests.sh b/script/test/cmd/tests.sh index 032b5de354..bcae73afa9 100755 --- a/script/test/cmd/tests.sh +++ b/script/test/cmd/tests.sh @@ -568,7 +568,6 @@ sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/f convert::expect_success "$cmd" "/tmp/output-k8s.json" - # Test unset environment variables are passed correctly export V3_HOST_ENV_TEST_SET_TO_BAR=BAR cmd="kompose convert --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose-unset-env.yaml" @@ -582,6 +581,15 @@ sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/f convert::expect_success "$cmd" "/tmp/output-k8s.json" +# Test key/value env with env_files +cmd="kompose convert --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/env/docker-compose.yml" +sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/fixtures/env/output-k8s.json > /tmp/output-k8s.json +convert::expect_success "$cmd" "/tmp/output-k8s.json" + +cmd="kompose convert --stdout -j --provider=openshift -f $KOMPOSE_ROOT/script/test/fixtures/env/docker-compose.yml" +sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/fixtures/env/output-os.json > /tmp/output-os.json + convert::expect_success "$cmd" "/tmp/output-os.json" + # Test that two files that are different versions fail convert::expect_failure "kompose convert --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose.yaml -f $KOMPOSE_ROOT/script/test/fixtures/etherpad/docker-compose.yaml" diff --git a/script/test/fixtures/env/docker-compose.yml b/script/test/fixtures/env/docker-compose.yml new file mode 100644 index 0000000000..93b896333d --- /dev/null +++ b/script/test/fixtures/env/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' +services: + namenode: + image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8 + volumes: + - namenode:/hadoop/dfs/name + environment: + - CLUSTER_NAME=test + env_file: + - ./hadoop-hive-namenode.env + ports: + - "50070:50070" + - "8020:8020" \ No newline at end of file diff --git a/script/test/fixtures/env/hadoop-hive-namenode.env b/script/test/fixtures/env/hadoop-hive-namenode.env new file mode 100644 index 0000000000..a3063673d1 --- /dev/null +++ b/script/test/fixtures/env/hadoop-hive-namenode.env @@ -0,0 +1,2 @@ +FOO=BAR +BAR=FOO \ No newline at end of file diff --git a/script/test/fixtures/env/output-k8s.json b/script/test/fixtures/env/output-k8s.json new file mode 100644 index 0000000000..82a3a17ff0 --- /dev/null +++ b/script/test/fixtures/env/output-k8s.json @@ -0,0 +1,165 @@ +{ + "kind": "List", + "apiVersion": "v1", + "metadata": {}, + "items": [ + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + }, + "annotations": { + "kompose.cmd": "%CMD%", + "kompose.version": "%VERSION%" + } + }, + "spec": { + "ports": [ + { + "name": "50070", + "port": 50070, + "targetPort": 50070 + }, + { + "name": "8020", + "port": 8020, + "targetPort": 8020 + } + ], + "selector": { + "io.kompose.service": "namenode" + } + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "Deployment", + "apiVersion": "extensions/v1beta1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + }, + "annotations": { + "kompose.cmd": "%CMD%", + "kompose.version": "%VERSION%" + } + }, + "spec": { + "replicas": 1, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + } + }, + "spec": { + "volumes": [ + { + "name": "namenode", + "persistentVolumeClaim": { + "claimName": "namenode" + } + } + ], + "containers": [ + { + "name": "namenode", + "image": "bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8", + "ports": [ + { + "containerPort": 50070 + }, + { + "containerPort": 8020 + } + ], + "env": [ + { + "name": "BAR", + "valueFrom": { + "configMapKeyRef": { + "name": "namenode-hadoop-hive-namenode-env", + "key": "BAR" + } + } + }, + { + "name": "CLUSTER_NAME", + "value": "test" + }, + { + "name": "FOO", + "valueFrom": { + "configMapKeyRef": { + "name": "namenode-hadoop-hive-namenode-env", + "key": "FOO" + } + } + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "namenode", + "mountPath": "/hadoop/dfs/name" + } + ] + } + ], + "restartPolicy": "Always" + } + }, + "strategy": { + "type": "Recreate" + } + }, + "status": {} + }, + { + "kind": "ConfigMap", + "apiVersion": "v1", + "metadata": { + "name": "namenode-hadoop-hive-namenode-env", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode-hadoop-hive-namenode-env" + } + }, + "data": { + "BAR": "FOO", + "FOO": "BAR" + } + }, + { + "kind": "PersistentVolumeClaim", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + } + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "100Mi" + } + } + }, + "status": {} + } + ] +} \ No newline at end of file diff --git a/script/test/fixtures/env/output-os.json b/script/test/fixtures/env/output-os.json new file mode 100644 index 0000000000..63140ac72b --- /dev/null +++ b/script/test/fixtures/env/output-os.json @@ -0,0 +1,216 @@ +{ + "kind": "List", + "apiVersion": "v1", + "metadata": {}, + "items": [ + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + }, + "annotations": { + "kompose.cmd": "%CMD%", + "kompose.version": "%VERSION%" + } + }, + "spec": { + "ports": [ + { + "name": "50070", + "port": 50070, + "targetPort": 50070 + }, + { + "name": "8020", + "port": 8020, + "targetPort": 8020 + } + ], + "selector": { + "io.kompose.service": "namenode" + } + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "ConfigMap", + "apiVersion": "v1", + "metadata": { + "name": "namenode-hadoop-hive-namenode-env", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode-hadoop-hive-namenode-env" + } + }, + "data": { + "BAR": "FOO", + "FOO": "BAR" + } + }, + { + "kind": "DeploymentConfig", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + }, + "annotations": { + "kompose.cmd": "%CMD%", + "kompose.version": "%VERSION%" + } + }, + "spec": { + "strategy": { + "type": "Recreate", + "resources": {} + }, + "triggers": [ + { + "type": "ConfigChange" + }, + { + "type": "ImageChange", + "imageChangeParams": { + "automatic": true, + "containerNames": [ + "namenode" + ], + "from": { + "kind": "ImageStreamTag", + "name": "namenode:2.0.0-hadoop2.7.4-java8" + } + } + } + ], + "replicas": 1, + "test": false, + "selector": { + "io.kompose.service": "namenode" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + } + }, + "spec": { + "volumes": [ + { + "name": "namenode", + "persistentVolumeClaim": { + "claimName": "namenode" + } + } + ], + "containers": [ + { + "name": "namenode", + "image": " ", + "ports": [ + { + "containerPort": 50070 + }, + { + "containerPort": 8020 + } + ], + "env": [ + { + "name": "BAR", + "valueFrom": { + "configMapKeyRef": { + "name": "namenode-hadoop-hive-namenode-env", + "key": "BAR" + } + } + }, + { + "name": "CLUSTER_NAME", + "value": "test" + }, + { + "name": "FOO", + "valueFrom": { + "configMapKeyRef": { + "name": "namenode-hadoop-hive-namenode-env", + "key": "FOO" + } + } + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "namenode", + "mountPath": "/hadoop/dfs/name" + } + ] + } + ], + "restartPolicy": "Always" + } + } + }, + "status": {} + }, + { + "kind": "ImageStream", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + } + }, + "spec": { + "tags": [ + { + "name": "2.0.0-hadoop2.7.4-java8", + "annotations": null, + "from": { + "kind": "DockerImage", + "name": "bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8" + }, + "generation": null, + "importPolicy": {} + } + ] + }, + "status": { + "dockerImageRepository": "" + } + }, + { + "kind": "PersistentVolumeClaim", + "apiVersion": "v1", + "metadata": { + "name": "namenode", + "creationTimestamp": null, + "labels": { + "io.kompose.service": "namenode" + } + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "100Mi" + } + } + }, + "status": {} + } + ] +} \ No newline at end of file