Использование переменной item в поиске шаблона в цикле - PullRequest
0 голосов
/ 04 апреля 2019

Я стараюсь перебрать with_subelements и использовать item.0.id ВНУТРИ файла шаблона, который загружается через lookup('template',...).

Кажется, что переменная недоступна во время шаблонов.

# data:
grafana_app_data:
  pKWGOV9mk:
    boardFiles: [
      "server-ping.json.j2"
    ], 
    id: "2", 
    title: "SERVER"
  kju...

# working:
- name: debug merge result
  debug:
    msg: "{{item.0.id}} --- {{item.1}}"
  with_subelements:
    - "{{ grafana_app_data }}"
    - boardFiles

# not working:
- name: iterate over folders and create respective dashboards
  win_uri:
    url: '{{ grafana_app_external_url }}api/dashboards/db'
    validate_certs: false
    method: POST
    status_code: '200,409'
    headers:
      Accept:        'application/json'
      Content-Type:  'application/json'
      Authorization: '{{ grafana_app_authorization_header }}'
    body: "{{ lookup('template', 'dashboards/' + item.1 ) }}"
  with_subelements:
    - "{{ grafana_app_data }}"
    - boardFiles

win_uri всегда возвращается с ошибкой:

fatal: [....net]: FAILED! => {"msg": "The task includes an option with an
undefined variable. The error was: 'env' is undefined\n\nThe error appears
to have been in '/.../roles/...inject/tasks/main.yml': line 123, column 3,
but may\nbe elsewhere in the file depending on the exact syntax 
problem.\n\nThe offending line appears to be:\n\n\n- name: iterate over
folders and create respective dashboards\n  ^ here\n"}

Есть идеи?

THX заранее!

ОБНОВЛЕНИЕ

Найдена основная причина: мой файл шаблонов - это файл JSON.Это означает:

  1. Может произойти "}}"
  2. Значения иногда уже содержат "{{...}}", что означает, что я должен использовать другой начальныйконечная граница.
  3. Поддержка lookup + template + variable_start / end_string запланирована для ansible 2.8 (https://github.com/ansible/ansible/pull/49711) и должна выглядеть следующим образом: body: "{{ lookup('template', 'dashboards/' + item.1, variable_start_string='[%', variable_end_string='%]' ) }}".

THX !!!

1 Ответ

0 голосов
/ 04 апреля 2019

Похоже, вы не определили grafana_app_external_url и grafana_app_authorization_header

...