Fix environment with env_file bug

This commit is contained in:
Hang Yan 2018-07-10 13:15:36 +08:00
parent e8990233b2
commit 3b04a9178a
6 changed files with 413 additions and 6 deletions

View File

@ -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,

View File

@ -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"

View File

@ -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"

View File

@ -0,0 +1,2 @@
FOO=BAR
BAR=FOO

165
script/test/fixtures/env/output-k8s.json vendored Normal file
View File

@ -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": {}
}
]
}

216
script/test/fixtures/env/output-os.json vendored Normal file
View File

@ -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": {}
}
]
}