Arhn - архитектура программирования

Ansible: ссылка на Jinja в динамическом инвентаре

Итак, я использую playbook, основанный на group_vars, которые используются для предоставления настроек IIS для самых разных веб-сайтов.

Group_vars состоит из 2 основных dicts (один из них содержит сложные списки dicts или списки dicts.)

В сложном есть ссылки на переменные из firstdict в Jinja2 (например, {{firstdic.sitename}})

Это отлично работает с group_vars, ссылки обрабатываются движком jinja2 в Ansible. Но когда дело доходит до динамического инвентаря, при ссылке на vars из первого dict весь dict сбрасывается.

А вот и JSON (из моего динамического инвентаря):

"firstdict": { "sitename": "mysitename" }

"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}

При использовании этого JSON модуль отладки обнаружит, что complexdict не определен.

Однако часть jinja2 правильно анализируется и выполняется, так как это будет работать.

Ввод динамического инвентаря:

"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}}

Модуль отладки возвращает:

  "complexdict": {
        "someotherdict": {
            "sitepath": "foo"
        }
    }

Есть ли проблема с приоритетом переменных? Что еще я должен знать, почему это не может работать так?

Спасибо за помощь, мастера Ansible :)

PS: Я уже много пробовал эмпирическим экранированием, экранированием фигурных скобок, двойных кавычек и так далее.


Ответы:


1

Работает для меня:

./inventory/test.sh:

#!/bin/bash

cat << EndOfJSON
{
    "test"   : {
    "hosts"  : [ "localhost" ],
    "vars"   : {
      "firstdict": { "sitename": "mysitename" },
      "complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}
        }
    }
}
EndOfJSON

./playbook.yml

---
- hosts: test
  connection: local
  gather_facts: no
  tasks:
    - debug:
        var: complexdict

выход:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "complexdict": {
        "someotherdict": {
            "sitepath": "mysitename"
        }
    }
}

Если это не так, обновите свой вопрос, указав полное MCVE.

06.03.2017
  • Да, ты прав. Это прекрасно работает. Проблема заключалась в некоторых экранирующих символах в файле json. Спасибо большое за вашу помощь ! 07.03.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..