ansible — шаблон json для переменной среды в контейнере докеров

Я пытаюсь назначить однострочную строку json переменной среды в контейнере докера. Вот как выглядит json:

      {"ip_access": {"IP_whitelist": {"192.168.99.19/32": "grafana/status (Provider)"}}, "vhosts": {"prometheus1": {"dns_names": ["prometheus1.company.internal"], "add_lines_443": ["include IP_whitelist;", "set $prometheus http://prometheus:9090;", "location / { proxy_pass $prometheus; }"], "options": {"cert_path": "/etc/ssl/certs/prometheus1.crt", "key_path": "/etc/ssl/private/prometheus1.key"}}}}

Поэтому вместо["prometheus1.company.internal"]я хочу иметь["{{ inventory_hostname }} .company.internal"](а также для других случаевprometheus1.

Я использую docker_container следующим образом:

      - name: create nginx reverse proxy container
  docker_container:
    image: registry.company.com/devops/nginx-reverseproxy:{{ nginx_version }}
    name: nginx-reverseproxy
    labels:
      role=metrics
    volumes:
      - /etc/ssl/certs/{{ inventory_hostname }}.crt:/etc/ssl/certs/{{ inventory_hostname }}.crt
      - /etc/ssl/private/{{ inventory_hostname }}.key:/etc/ssl/private/{{ inventory_hostname }}.key
    container_default_behavior: compatibility
    networks_cli_compatible: yes
    network_mode: default
    purge_networks: yes
    networks:
      - name: metrics-net
      - name: proxy-net
    env:
      STAGING_ENVIRONMENT: 'production'
      NGINX_VHOSTS_JSON: '{{ lookup("template", "rproxy/nginx_vhosts_prometheus_develop.j2") }}'

К сожалению, я продолжаю получать:

      TASK [prometheus : create nginx reverse proxy container] **********************************************
fatal: [prometheus_vag]: FAILED! => {"changed": false, "msg": "Non-string value found for env option. Ambiguous env options must be wrapped in quotes to avoid them being interpreted. Key: NGINX_VHOSTS_JSON"}

Странно то, что если я просто использую модуль шаблона, он работает так, как ожидалось:

        template:
    src: rproxy/nginx_vhosts_prometheus_develop.j2
    dest: /tmp/tempo.json
  when: "prometheus_host in inventory_hostname"
  tags:
    - copytmp

inventory_hostnameбудет заменено фактической стоимостью в инвентаре, и я получу нужную вещь. Более того, если я вставлю этот точный результат в книгу воспроизведения как значение NGINX_VHOSTS_JSON в книге воспроизведения yaml, это также будет работать без каких-либо проблем.

Но шаблон поиска, похоже, не доставляет ожидаемую строку.

Есть идеи, как я могу обойти эту проблему?

1 ответ

В конце концов мне удалось решить эту проблему, превратив ее в json следующим образом:

      NGINX_VHOSTS_JSON: '{{ lookup("template", "rproxy/nginx_vhosts_prometheus_develop.j2") | to_json }}'

Больше ничего менять мне не нужно было.

Другие вопросы по тегам