@itbidlo

Как осуществить выборку значения из списка по ключу при помощи jinja?

Приветствую всех.
Есть список значений:
services: 
  - name: es
    dirs:
      - { type: "es_script", path: "/opt/distrib/efk/script", user: "elasticsearch", group: "elasticsearch", mode: '0765' }
      - { type: "es_config", path: "/etc/elasticsearch", user: "elasticsearch", group: "elasticsearch", mode: '0765' } 
      - { type: es_data, path: /opt/data/elasticsearch, user: elasticsearch, group: elasticsearch, mode: '0765' }
      - { type: es_log, path: /opt/log/elasticsearch, user: elasticsearch, group: elasticsearch, mode: '0765' }


Хочется по ключу type при помощи j2 выдёргивать другие значения строки path,usr.
Примерно пытаюсь так:

- name: Set the l_env
  set_fact:  
    l_env: "{% for tmp in service.dirs %}{% if tmp.type == 'es_script' %}{% set t_env = tmp.path %}{{- t_env }}{% endif %}{%- endfor %}"
  
- name: Ensure Systemd unit file is present.
  template:
    src: jinja2.j2
    dest:  "{{ l_env  }}"
  • Вопрос задан
  • 256 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov
Если вы хотите получить только dirs., у которых атрибут type == "es_script"
то можно так (если, я, конечно, правильно понял задачу)
set_fact:
  scriptdirs: {{ dirs. | selectattr(type, 'equalto', 'es_script') | list }}

template:
  src: template.j2
  dest: " {{ item.path }}"
  mode: "{{ item.mode }}"
loop: "{{ scriptdirs }}"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы