我正在考虑这样的Ansible输出。
ok: [localhost] => {
"ansible_facts": {
"filter3": [
"id = 1",
"type = DM",
"status = started",
"provisioning = completed",
"build = yes",
我的要求是将此输出用作ansible脚本中的参数。
例如id为变量名,10001为id的值。
这里我的方式是,我将输出存储到像
这样的文件中[prod]
id = 1
type = DM
status = started
provisioning = completed
build = yes
我正在访问
- set_fact: id="{{ lookup('ini', 'id section=prod file=/home/var.properties') }}"
- set_fact: provisioning="{{ lookup('ini', 'provisioning section=prod file=/home/var.properties') }}"
- set_fact: build="{{ lookup('ini', 'build section=prod file=/home/var.properties') }}"
将来有可能在输出中获得更多额外参数。所以每次我必须在set_fact添加代码来访问这些参数。
所以为了避免这种情况,我必须直接从输出中访问这些参数,并在下一个任务执行中使用它。请帮帮我。
答案 0 :(得分:0)
我不确定你的问题,但基本上,你要找的是使用Register。
它们的工作方式与事实相同,但如果您拥有动态内容,则会更灵活。
然后,您可以使用查询语言访问寄存器的任何部分。 (在线语法测试器:http://jmespath.org/tutorial.html)
示例:
---
- name: List packages
shell: /usr/bin/dpkg-query -l '*{{ item }}*' | grep '^ii ' | awk 'BEGIN { OFS = "-" } { print $2,$3,$4 }'
with_items:
- openssh
- openssl
- vim
- python
failed_when: false
register: pkg
- debug:
msg: |
{{ "Installed packages found #" | comment('plain', prefix='############################', postfix='############################')}}
{{ pkg | json_query(query) | to_nice_yaml }}
vars:
query: "results[].{name: item, version: stdout_lines}"
...