Изменение значения списка в Ansible - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть инвентарь с очень сложной структурой.Для моей конкретной установки я хочу переопределить только некоторые значения.Например, у меня есть структура:

---    
System:
  atr1: 47
  config:
    - nodes:
        - logger:
            id: 'all'
            svr: 'IEW'
        - Database:
            constr: 'login/pass@db'
  atr2: 'some value'

Я хочу переопределить серьезность регистратора, то есть добавить статистическую информацию svr: 'IEWS' .Я хочу предоставить переопределение в параметре - extra-vars .

В ansible.cfg -> hash_behaviour = merge

Я не хочу использовать что-то вроде- svr: "{{svr_custom | default ('IEW')}}}" , поскольку параметров слишком много, и, таким образом, будет сложно написать весь инвентарь таким образом.Я читал о комбинированном фильтре , но не могу его использовать, когда мне пришлось переопределить только один элемент в хэше.

Как мне достичь своей цели?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Я читал о комбинированном фильтре, но не могу его использовать, когда мне пришлось переопределить только один элемент в хэше.

Почему это так?Разве new_svr , определенный в - extra-vars , не достигнет того, что вы хотите?

- set_fact:                                                                                                   
    System: "{{ System | combine({'config':[{'nodes':[{'logger':{'svr':new_svr }}]}]}, recursive=True) }}"
0 голосов
/ 19 сентября 2018
  1. Способ, который вы нашли, самый простой.Это многословно, но очень легко отлаживать и исправлять.
  2. Если вы ДЕЙСТВИТЕЛЬНО хотите сократить эту работу, вы можете написать свой собственный поисковый плагин.(https://docs.ansible.com/ansible/2.5/plugins/lookup.html).

Из моего опыта я действительно хочу сказать, что прямой и тупой подход (напишите многословно) намного лучше для общей ремонтопригодности. Следующий человек увидит тупой сброс (каламбур)это легко исправить, а не какой-то непонятный фрагмент кода Python.

Чтобы упростить жизнь, вы можете сохранить эту конфигурацию в виде отдельного файла (со всеми частями jinja) и использовать поиск (st справа от документов):

# Since 2.4, you can pass in variables during evaluation
 - debug: msg="{{ lookup('template', './some_template.j2', template_vars=dict(x=42)) }} is evaluated with x=42"

Более того, вы можете использовать Jinja |from_yaml (или from_json) для преобразования загруженного и обработанного шаблона в структуру данных.

...