Как раскрыть составную переменную ansible в python плагине?
Пишу action плагин для ansible, замена jinja2 на DotLiquid. Генерирую json файл с значениями переменных для шаблонизатора. Не могу найти как добраться до значений составных переменных. Вместо значения переменой в шаблон рендерится содержимое строки.
То есть:
- hosts: localhost
vars:
target:
porta: 8080
tasks:
- name: DotLiquid template
template_dotliquid:
src: template.liquid
dest: /tmp/template.txt
vars:
v_smth: "{{ target.porta }}"
TASK [DotLiquid template] ********************************************************************************************************************************************************
Monday 04 October 2021 10:11:44 +0300 (0:00:03.819) 0:00:04.051 ********
Monday 04 October 2021 10:11:44 +0300 (0:00:03.823) 0:00:04.054 ********
--- before: /tmp/template.txt
+++ after: /home/sheridan/.ansible/tmp/ansible-local-31413T5LRa8/tmpUT3WJo/result.output
@@ -1,6 +1,6 @@
+{{ target.porta }}
В целом - надо взять ansible факты относящиеся к таску и сохранить из в json файл. Но при этом переменные вида var2: '{{ var1 }}' не раскрываются.
Делаю так:
class ActionModule(ActionBase):
def run(self, tmp=None, task_vars=None):
''' handler for template_dotliquid operations '''
self.variables = dict()
if task_vars is not None:
self.variables = task_vars.copy()
...
def prepare_data(self):
self.variables.update(generate_ansible_template_vars(self.source, self.dest))
self.variables.update(self._templar.available_variables)
with open(self.data_file, "w") as outfile:
json.dump(self.variables, outfile, indent=4, cls=AnsibleJSONEncoder)
Несколько раз пробовал разобраться в исходниках обработки шаблонов сквозь jinja но постоянно залезаю в какие-то дебри (такое впечатление, что существует решение специально для jinja), хотя есть ощущение что должно быть всё просто.