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"









share|improve this question

























    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"









    share|improve this question























      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"









      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 14:54









      Doug R.

      2,0421539




      2,0421539






















          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.






          share|improve this answer




















          • 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 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










          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
          );



          );













          draft saved

          draft discarded


















          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.






          share|improve this answer




















          • 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 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














          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.






          share|improve this answer




















          • 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 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












          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.






          share|improve this answer












          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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










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
















          • 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 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















          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

















          draft saved

          draft discarded
















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          Edmonton

          Crossroads (UK TV series)