ansible - 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 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
推荐阅读
- android - 拒绝安装 OBB 的尝试
- node.js - req.body 返回 null Express
- java - 如何在java中计算数组中的输入
- python - 未关闭的客户端会话
- scala - 在Scala中创建不带参数的匿名函数时会创建什么类型的FunctionN实例
- mysql - 如何编写查询以在 SQL 中检索最接近今天的最新时间值?
- r - 将 docker 与 SQL Server(odbc 包)一起使用时运行错误
- javascript - 无法在 CSS 样式溢出时启用滚动条:滚动
s 或容器 div - python - 带有 COUNT 和 ID 字符串的 SQLite 查询
- ios - 在 Xamarin.Forms.GoogleMaps 中带有点击事件的 pin 标记工具提示内的多个标签