在 jinja2 中过滤或映射

Filter or map in jinja2

我正在尝试过滤或映射此 yml 文件。到目前为止,我可以用这个

访问它
{{services[0].version}}

但是我需要用它的名字访问它,没有位置。

yml 文件

"services":
  - "service": "front"
    "image": "acalls-caselog-web-app"
    "version": "latest" 
  - "service": "back"
    "image": "acalls-caselog-web-service"
    "version": "latest"

docker-compose.yml.j2

version: "3.3"
services:
  front:
    image: url/{{services[0].image}}:{{services[0].version}}
    ports: 
      - "81:81"
    extra_hosts:
      - "backend:172.32.3.46" 
    environment:
      profile: preproduction
   back:
    image: url/ {{services[1].image}} : {{services[1].version}}
    ports: 
      - "82:82"
    extra_hosts:
      - "backend:172.32.3.46" 
    environment:
      profile: preproduction

我现在真的不知道如果我需要使用地图、过滤器或者有另一种形式,比如 service.service(front).image

您可以使用 selectattr 过滤器执行此操作:

{{services | selectattr("service", "equalto", "front")}}

在您的 YAML 中,您可以这样应用它:

version: "3.3"
services:
  front:
    image: {% with front=services|selectattr("service", "equalto", "front") -%}
      url/{{front.image}}:{{front.version}}
    {%- endwith %}
    ports: 
      - "81:81"
    extra_hosts:
      - "backend:172.32.3.46" 
    environment:
      profile: preproduction
   back:
    image: {% with back = services|selectattr("service", "equalto", "back") -%}
      url/ {{back.image}} : {{back.version}}
    {%- endwith %}
    ports: 
      - "82:82"
    extra_hosts:
      - "backend:172.32.3.46" 
    environment:
      profile: preproduction