Ansible delegate_to:在远程主机上运行的本地主机任务

时间:2021-07-14 20:03:45

标签: ansible

我必须将 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: ''

1 个答案:

答案 0 :(得分:0)

在 Ansible 2.10 中,委托按预期工作。在输出中,我也看不到代表团。但是,分别在 localhost 和委派的 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