Kubernetes: Reference Previously-Defined ConfigMap key-value pair
up vote
0
down vote
favorite
TL;DR
Can I reference a previously-defined key-value pair in a ConfigMap?
Full Version
I'm writing a deployment specification for an application which accepts
its configuration from environment variables at startup. Some of the
environment variables are derived from others. If I were setting
them up as file to be sourced at application startup, I would simply
do:
[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
However, the analagous way to do this in a ConfigMap by referencing
previously-defined key-value pairs doesn't work (see sample ConfigMap
and Pod, below). Here are the results:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Hoped-for value of MY_CONFIGMAP_FOOBAR
is foobar
.
I attempted to cross-apply the following instructions under
Use ConfigMap-defined environment variables in Pod commands
from the documentation:
You can use ConfigMap-defined environment variables in the
command
section of the Pod specification using the$(VAR_NAME)
Kubernetes substitution syntax.
However, this obviously did not work, and I've been unable to find an
answer in my research.
I suspect I already know the answer, but is there any way to accomplish
this?
MCVE
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
data:
MY_CONFIGMAP_FOO: foo
MY_CONFIGMAP_BAR: bar
# Desired concatenation would be `foobar`
MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: alpine
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: my-app
command:
- /bin/sh
args:
- -c
- "while true; do sleep 3600; done"
docker kubernetes
add a comment |
up vote
0
down vote
favorite
TL;DR
Can I reference a previously-defined key-value pair in a ConfigMap?
Full Version
I'm writing a deployment specification for an application which accepts
its configuration from environment variables at startup. Some of the
environment variables are derived from others. If I were setting
them up as file to be sourced at application startup, I would simply
do:
[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
However, the analagous way to do this in a ConfigMap by referencing
previously-defined key-value pairs doesn't work (see sample ConfigMap
and Pod, below). Here are the results:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Hoped-for value of MY_CONFIGMAP_FOOBAR
is foobar
.
I attempted to cross-apply the following instructions under
Use ConfigMap-defined environment variables in Pod commands
from the documentation:
You can use ConfigMap-defined environment variables in the
command
section of the Pod specification using the$(VAR_NAME)
Kubernetes substitution syntax.
However, this obviously did not work, and I've been unable to find an
answer in my research.
I suspect I already know the answer, but is there any way to accomplish
this?
MCVE
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
data:
MY_CONFIGMAP_FOO: foo
MY_CONFIGMAP_BAR: bar
# Desired concatenation would be `foobar`
MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: alpine
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: my-app
command:
- /bin/sh
args:
- -c
- "while true; do sleep 3600; done"
docker kubernetes
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
TL;DR
Can I reference a previously-defined key-value pair in a ConfigMap?
Full Version
I'm writing a deployment specification for an application which accepts
its configuration from environment variables at startup. Some of the
environment variables are derived from others. If I were setting
them up as file to be sourced at application startup, I would simply
do:
[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
However, the analagous way to do this in a ConfigMap by referencing
previously-defined key-value pairs doesn't work (see sample ConfigMap
and Pod, below). Here are the results:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Hoped-for value of MY_CONFIGMAP_FOOBAR
is foobar
.
I attempted to cross-apply the following instructions under
Use ConfigMap-defined environment variables in Pod commands
from the documentation:
You can use ConfigMap-defined environment variables in the
command
section of the Pod specification using the$(VAR_NAME)
Kubernetes substitution syntax.
However, this obviously did not work, and I've been unable to find an
answer in my research.
I suspect I already know the answer, but is there any way to accomplish
this?
MCVE
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
data:
MY_CONFIGMAP_FOO: foo
MY_CONFIGMAP_BAR: bar
# Desired concatenation would be `foobar`
MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: alpine
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: my-app
command:
- /bin/sh
args:
- -c
- "while true; do sleep 3600; done"
docker kubernetes
TL;DR
Can I reference a previously-defined key-value pair in a ConfigMap?
Full Version
I'm writing a deployment specification for an application which accepts
its configuration from environment variables at startup. Some of the
environment variables are derived from others. If I were setting
them up as file to be sourced at application startup, I would simply
do:
[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
However, the analagous way to do this in a ConfigMap by referencing
previously-defined key-value pairs doesn't work (see sample ConfigMap
and Pod, below). Here are the results:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Hoped-for value of MY_CONFIGMAP_FOOBAR
is foobar
.
I attempted to cross-apply the following instructions under
Use ConfigMap-defined environment variables in Pod commands
from the documentation:
You can use ConfigMap-defined environment variables in the
command
section of the Pod specification using the$(VAR_NAME)
Kubernetes substitution syntax.
However, this obviously did not work, and I've been unable to find an
answer in my research.
I suspect I already know the answer, but is there any way to accomplish
this?
MCVE
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
data:
MY_CONFIGMAP_FOO: foo
MY_CONFIGMAP_BAR: bar
# Desired concatenation would be `foobar`
MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: alpine
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: my-app
command:
- /bin/sh
args:
- -c
- "while true; do sleep 3600; done"
docker kubernetes
docker kubernetes
asked Nov 9 at 14:54
Doug R.
2,0421539
2,0421539
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
You can achieve your expected result with help of this tool: envsubst.
Create the ConfigMap
following way,
envsubst < my-app-config.yaml | kubectl apply -f -
Now, all environment variables on your ConfigMap
will be replaced with resolved value.
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?
– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variablesFOO
andBAR
both separately and combined together as variableFOOBAR
. It would be convenient and less prone to error to be able to deriveFOOBAR
fromFOO
andBAR
.
– Doug R.
Nov 9 at 15:33
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53228090%2fkubernetes-reference-previously-defined-configmap-key-value-pair%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
You can achieve your expected result with help of this tool: envsubst.
Create the ConfigMap
following way,
envsubst < my-app-config.yaml | kubectl apply -f -
Now, all environment variables on your ConfigMap
will be replaced with resolved value.
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?
– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variablesFOO
andBAR
both separately and combined together as variableFOOBAR
. It would be convenient and less prone to error to be able to deriveFOOBAR
fromFOO
andBAR
.
– Doug R.
Nov 9 at 15:33
add a comment |
up vote
2
down vote
accepted
You can achieve your expected result with help of this tool: envsubst.
Create the ConfigMap
following way,
envsubst < my-app-config.yaml | kubectl apply -f -
Now, all environment variables on your ConfigMap
will be replaced with resolved value.
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?
– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variablesFOO
andBAR
both separately and combined together as variableFOOBAR
. It would be convenient and less prone to error to be able to deriveFOOBAR
fromFOO
andBAR
.
– Doug R.
Nov 9 at 15:33
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
You can achieve your expected result with help of this tool: envsubst.
Create the ConfigMap
following way,
envsubst < my-app-config.yaml | kubectl apply -f -
Now, all environment variables on your ConfigMap
will be replaced with resolved value.
You can achieve your expected result with help of this tool: envsubst.
Create the ConfigMap
following way,
envsubst < my-app-config.yaml | kubectl apply -f -
Now, all environment variables on your ConfigMap
will be replaced with resolved value.
answered Nov 9 at 15:08
Emruz Hossain
1,054210
1,054210
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?
– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variablesFOO
andBAR
both separately and combined together as variableFOOBAR
. It would be convenient and less prone to error to be able to deriveFOOBAR
fromFOO
andBAR
.
– Doug R.
Nov 9 at 15:33
add a comment |
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?
– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variablesFOO
andBAR
both separately and combined together as variableFOOBAR
. It would be convenient and less prone to error to be able to deriveFOOBAR
fromFOO
andBAR
.
– Doug R.
Nov 9 at 15:33
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
Not the answer I was hoping for, but better than expected. But unless someone gives an answer which relies solely on Kubernetes, I will certainly accept it.
– Doug R.
Nov 9 at 15:13
This also works.
You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?– Emruz Hossain
Nov 9 at 15:15
This also works.
You can use ConfigMap-defined environment variables in the command section of the Pod specification using the $(VAR_NAME) Kubernetes substitution syntax.
What problem are you facing here?– Emruz Hossain
Nov 9 at 15:15
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variables
FOO
and BAR
both separately and combined together as variable FOOBAR
. It would be convenient and less prone to error to be able to derive FOOBAR
from FOO
and BAR
.– Doug R.
Nov 9 at 15:33
Indeed. I even cited that in my initial question. ;-) The issue I'm trying to solve is that the application uses various environment variables both separately and combined together, but when they're combined together, it expects them to be combined into a third environment variable. I.e., it uses variables
FOO
and BAR
both separately and combined together as variable FOOBAR
. It would be convenient and less prone to error to be able to derive FOOBAR
from FOO
and BAR
.– Doug R.
Nov 9 at 15:33
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53228090%2fkubernetes-reference-previously-defined-configmap-key-value-pair%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown