首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地不可打印远程配置

本地不可打印远程配置
EN

Stack Overflow用户
提问于 2021-02-03 19:31:11
回答 1查看 76关注 0票数 0

我试图使用Ansible在多台服务器上找到具有不同值的类似设置,然后通过CSV在我的系统上本地输出该设置。问题是,Ansible只会将一行输出到文件中,即使它找到并组装了文件,甚至说它从每个服务器创建了两行。

因此,示例设置:

代码语言:javascript
复制
Server1
file.conf
key=value1

Server2
file.conf
key=value2

Local
result.txt
代码语言:javascript
复制
---
# ansible-playbook pb-get-file.yml -i inventory --limit=server1,server2
- name: Playbook to get a list of all file values
  hosts: all
  gather_facts: no

  tasks:
  - name: Find the status and targetUri of the nested DS Served
    find:
      paths: 
        - /opt/
        - /etc/
      recurse: yes
      contains: '.*key.*'
      patterns: '*file.conf'
    register: ds_status
    become: yes
  
  - name: Get values
    shell:
      cmd: "awk '/key/{print $NF}' {{ item.path }}"
    register: r
    with_items: "{{ ds_status.files }}"
    become: yes
    when: ds_status.matched > 0

  - name: Save results
    lineinfile:
      line: "{{ item.0 }}, {{ item.1.path }}, {{ item.2.stdout }}"
      path: result.txt
      create: yes
    with_items: "{{ result_line }}"
    delegate_to: localhost
    with_together:
      - "{{ inventory_hostname }}"
      - "{{ ds_status.files }}"
      - "{{ r.results }}" 
    when: ds_status.matched > 0 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 22:22:15

run_onceloop ansible_play_hosts_all在任务“保存结果”中。例如,给定文件

代码语言:javascript
复制
shell> ssh admin@test_11 cat /opt/file.conf
key1=value1
key2=value2
key3=value3

shell> ssh admin@test_12 cat /opt/file.conf
key1=value1
key2=value2
key3=value3

shell> ssh admin@test_13 cat /opt/file.conf
key1=value1
key2=value2
key3=value3

使用下面修改过的任务的游戏手册

代码语言:javascript
复制
    - name: Save results
      debug:
        msg: |
          {{ item }},
          {{ hostvars[item].r.results.0.item.path }},
          {{ hostvars[item].r.results.0.stdout }}
      loop: "{{ ansible_play_hosts_all }}"
      delegate_to: localhost
      run_once: true

给出

代码语言:javascript
复制
ok: [test_11 -> localhost] => (item=test_11) => 
  msg: |-
    test_11,
    /opt/file.conf,
    key1=value1
    key2=value2
    key3=value3
ok: [test_11 -> localhost] => (item=test_12) => 
  msg: |-
    test_12,
    /opt/file.conf,
    key1=value1
    key2=value2
    key3=value3
ok: [test_11 -> localhost] => (item=test_13) => 
  msg: |-
    test_13,
    /opt/file.conf,
    key1=value1
    key2=value2
    key3=value3

循环中只显示每个远程主机一个文件。在下一次迭代中保存循环include_tasks中的所有文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66034462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档