如何将Ansible输出作为输入参数访问它

时间:2017-12-22 06:53:17

标签: parameters ansible output

我正在考虑这样的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添加代码来访问这些参数。

所以为了避免这种情况,我必须直接从输出中访问这些参数,并在下一个任务执行中使用它。请帮帮我。

1 个答案:

答案 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}"
...