pod-porter Templates

pod-porter uses Jinja2 templates to render the compose files. The templates are stored in the templates directory in the map. The templates are rendered using the values from the values.yaml file.

Example template for MongoDB service
---
services:
  mongo:
    image: "{{ values.image.mongo.repository }}:{{ values.image.mongo.tag }}"
    hostname: "{{ release.name }}-mongo"
    container_name: "{{ release.name }}-mongo"
    ports:
      - "{{ values.service.mongo.node_port }}:{{ values.service.mongo.container_port }}"
    environment:
      {% for env in values.environment.mongo %}
      {{ env.name }}: "{{ env.value }}"
      {% endfor %}
    volumes:
      {% for volume in values.volumes.mongo %}
      - "{{ volume.name }}:{{ volume.value }}"
      {% endfor %}
Example template for MongoDB Express service
---
services:
  mongo-express:
    image: "{{ values.image.mongo_express.repository }}:{{ values.image.mongo_express.tag }}"
    hostname: "{{ release.name }}-mongo-express"
    container_name: "{{ release.name }}-mongo-express"
    ports:
      - "{{ values.service.mongo_express.node_port }}:{{ values.service.mongo_express.container_port }}"
    environment:
      ME_CONFIG_MONGODB_SERVER: "{{ release.name }}-mongo"
      {% for env in values.environment.mongo_express %}
      {{ env.name }}: "{{ env.value }}"
      {% endfor %}
Example template for MongoDB volumes
---
volumes:
  {% for volume in values.volumes.mongo %}
  {{ volume.name }}:
  {% endfor %}
Example template for MongoDB volumes
---
volumes:
  {% for volume in values.volumes.mongo %}
  {{ volume.name }}:
  {% endfor %}
Example template for Batfish service
---
services:
  batfish:
    image: "{{ values.image.batfish.repository }}:{{ values.image.batfish.tag }}"
    hostname: "{{ release.name }}-batfish"
    container_name: "{{ release.name }}-batfish"
    ports:
      {% for port in values.service.batfish %}
      - "{{ port.node_port }}:{{ port.container_port }}"
      {% endfor %}
    volumes:
      - "batfish-data-compose:/data"
Example template for Batfish volumes
---
volumes:
  batfish-data-compose:

Using these templates and the values from the values.yaml file, pod-porter will render the compose files.

pod-porter write -n thing -m docs\source\directions\examples\structure\multi_map\mongo -o docs\source\directions\examples\structure\multi_map
Example rendered compose file for MongoDB service it names itself thing-mongo-1.0.0.yaml
---
configs: {}
networks: {}
secrets:
  key:
    external: true
services:
  batfish:
    container_name: thing-batfish
    hostname: thing-batfish
    image: docker.io/batfish/allinone:latest
    ports:
    - 8888:8888
    - 9997:9997
    - 9996:9996
    volumes:
    - batfish-data-compose:/data
  mongo:
    container_name: thing-mongo
    environment:
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_ROOT_USERNAME: root
    hostname: thing-mongo
    image: docker.io/library/mongo:8.0.3
    ports:
    - 27017:27017
    volumes:
    - mongo-data-db-compose:/data/db
    - mongo-data-configdb-compose:/data/configdb
  mongo-express:
    container_name: thing-mongo-express
    environment:
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_SERVER: thing-mongo
    hostname: thing-mongo-express
    image: docker.io/library/mongo-express:1.0.2
    ports:
    - 8181:8081
volumes:
  batfish-data-compose: null
  mongo-data-configdb-compose: null
  mongo-data-db-compose: null