Ansible—将远程脚本的输出读入变量,以便由另一个播放进行处理

Ansible—将远程脚本的输出读入变量,以便由另一个播放进行处理,ansible,ansible-facts,Ansible,Ansible Facts,我正在写一个剧本,将在许多远程盒子上运行脚本。运行这些遥控器的stdout_行需要整理成一个数组,可以传递给本地运行的书中的另一个剧本,然后将这个大的整理数组传递给一个模块 我似乎找不到办法来做这件事。下面是一些代码类型的东西(不起作用): --- - name: Gather information from hosts hosts: remote-hosts become: yes become_method: sudo vars: information: |

我正在写一个剧本,将在许多远程盒子上运行脚本。运行这些遥控器的stdout_行需要整理成一个数组,可以传递给本地运行的书中的另一个剧本,然后将这个大的整理数组传递给一个模块

我似乎找不到办法来做这件事。下面是一些代码类型的东西(不起作用):

---

- name: Gather information from hosts
  hosts: remote-hosts
  become: yes
  become_method: sudo

  vars:
    information: |
      {%- set o=[] %}
      {%- for i in play_hosts %}
        {%- for line in hostvars[i].info_script_output_lines %}
          {%- if o.append(hostvars[i].info_script_output_lines[line]) %}
          {%- endif %}
        {%- endfor %}
      {%- endfor %}
      {{ o }}

  tasks:
    - name: Run info retrieval script
      script: /script_folder/script_that_outputs_lines.sh
      register: info_script_output

    - set_fact:
        info_script_output_lines: "{{ info_script_output.stdout_lines }}"

    - set_fact:
        final_info: "{{ info_script_output_lines }}"
        run_once: true
        delegate_to: 127.0.0.1
        delegate_facts: true

- name: Output result
  hosts: localhost

  tasks:
    - debug:
        msg: Output = {{ hostvars['localhost']['final_info'] }}
hostvars['localhost']['final_info']
在第二个重头戏中不存在

有人能解释一下我是否(a)使用每个远程设备的输出事实正确构建了阵列,以及(b)如何将最终整合的阵列放入另一个重头戏中,以便我可以使用它吗?

给你:

---
- hosts: mygroup
  gather_facts: no
  tasks:
    - shell: echo begin; echo {{ inventory_hostname }}; echo end;
      register: cmd_output
    - set_fact:
        my_lines: "{{ cmd_output.stdout_lines }}"

- hosts: localhost
  gather_facts: no
  vars:
    combined_lines: "{{ groups['mygroup'] | map('extract',hostvars,'my_lines') | sum(start=[]) }}"
  tasks:
    - debug:
        msg: "{{ combined_lines }}"

使用filter,然后使用
sum(start=[])
将列表展平为一长串行。

就像一个符咒。谢谢