How to set dynamic values with Kubernetes yaml file

前端 未结 13 2077
旧巷少年郎
旧巷少年郎 2020-12-04 16:22

For example, a deployment yaml file:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: guestbook
spec:
  replicas: 2
  template:
    metadata         


        
13条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-04 16:45

    My approach:

    tools/jinja2-cli.py:

    #!/usr/bin/env python3
    import os
    import sys
    from jinja2 import Environment, FileSystemLoader
    
    sys.stdout.write(Environment(loader=FileSystemLoader('templates/')).from_string(sys.stdin.read()).render(env=os.environ) + "\n")
    

    Make rule:

    _GENFILES = $(basename $(TEMPLATES))
    GENFILES = $(_GENFILES:templates/%=%)
    
    $(GENFILES): %: templates/%.j2 $(MKFILES) tools/jinja2-cli.py .env
            env $$(cat .env | xargs) tools/jinja2-cli.py < $< > $@ || (rm -f $@; false)
    

    Inside the .j2 template file you can use any jinja syntax construct, e.g. {{env.GUEST}} will be replaced by the value of GUEST defined in .env

    So your templates/deploy.yaml.j2 would look like:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: guestbook
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: guestbook
          spec:
            container:
              - name: guestbook
                image: {{env.GUEST}}
    

    Another approach (using just bash builtins and xargs) might be

    env $(cat .env | xargs) cat <

提交回复
热议问题