首页 > 解决方案 > Ansible delegate_to:在远程主机上运行的 localhost 任务

问题描述

我必须将 Web 服务器日志从远程机器复制到 Ansible 机器。在剧本的最后,我想找到带有模式的文件并将其删除。在我定义的任务中,delegate_to: 127.0.0.1但该任务正在运行远程机器之一。

如何使这些任务仅localhost运行并运行一次:

- name: Finds files and folders
  find:
    paths: "/tmp/"
    patterns: "access-*.tar.gz"
    recurse: no
    use_regex: yes
  register: result
  delegate_to: 127.0.0.1
  run_once: true
  tags:
    - pulllogs

- name: display filename
  debug:
    msg: "{{ result }}"
  delegate_to: 127.0.0.1
  run_once: true
  tags:
    - pulllogs

输出:

TASK [operate : Finds files and folders] ***********************************************************************************************************************************************
ok: [host01]
 

TASK [operate : display filename] ******************************************************************************************************************************************************
ok: [host01] =>
  msg:
    changed: false
    examined: 640
    failed: false
    files: []
    matched: 0
    msg: ''

标签: ansible

解决方案


在 Ansible 2.10 中,委托按预期工作。在输出中,我也看不到代表团。但是,分别在 localhost 和委派的 localhost 上运行的两个游戏都显示了相同的结果。例如,给定本地主机上的存档

shell> sudo find /tmp -name 'access-*.tar.gz'
/tmp/access-01.tar.gz

并且远程主机上没有档案

shell> ssh admin@test_11 sudo find /tmp -name 'access-*.tar.gz'

剧本

- hosts: localhost
  tasks:
    - find:
        paths: /tmp
        patterns: "access-*.tar.gz"
        recurse: false
        use_regex: false
      register: result
    - debug:
        msg: "{{ result.files|map(attribute='path')|list }}"

- hosts: test_11,test_12,test_13
  tasks:
    - block:
        - find:
            paths: /tmp
            patterns: "access-*.tar.gz"
            recurse: false
            use_regex: false
          register: result
        - debug:
            msg: "{{ result.files|map(attribute='path')|list }}"
      delegate_to: 127.0.0.1
      run_once: true

在本地主机和委托本地主机上显示相同的结果

PLAY [localhost] **********************************************************

TASK [find] ***************************************************************
ok: [localhost]

TASK [debug] **************************************************************
ok: [localhost] => 
  msg:
  - /tmp/access-01.tar.gz

PLAY [test_11,test_12,test_13] ********************************************

TASK [find] ***************************************************************
ok: [test_11]

TASK [debug] **************************************************************
ok: [test_11] => 
  msg:
  - /tmp/access-01.tar.gz

PLAY RECAP ****************************************************************
localhost : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
test_11   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

推荐阅读