【发布时间】:2019-05-15 02:41:12
【问题描述】:
我正在使用 Ansible 2.6,我一直在尝试将 json 对象作为 --extra-vars 从 python API 传递。虽然我能够成功发送 json 对象,但是在解析字典时我无法在过滤器中使用{{ inventory_hostname }}。
下面的剧本配置非常适合这个 json 对象:
Python API 部分:
extra_vars = {"example_list":[{"name":"first","foo":"bar","item":"thud"},{"name":"second","foo":"grunt","item":"baz"}]}
extra_vars_json = json.dumps(extra_vars)
self.variable_manager.extra_vars = {'json_var' : extra_vars_json}
executor = PlaybookExecutor(
playbooks=[self.playbook], inventory=self.inventory, variable_manager=self.variable_manager, loader=self.loader, options=self.options, passwords={})
剧本配置:
- name: Get the json string
set_fact:
xyz: "{{({{ json_var }} | from_json).example_list | map(attribute='foo') | list }}"
- debug:
msg: "{{inventory_hostname}}"
现在,如果 example_list 是主机名怎么办。在这种情况下,我将如何使用 {{ inventory_hostname }} 。我试过这个:
xyz: "{{({{ json_var }} | from_json).{{inventory_hostname}} | map(attribute='foo') | list }}"
但它不起作用并抛出异常:
致命:[主机名]:失败! => {"msg": "模板化字符串时出现模板错误:预期的名称或数字。字符串:{{ (json_var | from_json).(inventory_hostname }}"}`**
【问题讨论】:
标签: ansible