我需要检查文件是否可读,即tail -500f <filename>
应该工作。
是否有一种方法来检查文件是否为tail
有人类可读的数据?
如果没有,我希望使用ansible的fail
模块并失败播放。
在shell脚本中,-f
和-r
帮助确定但不确定如何在可见中检查相同。
我在可读文件上看到了stat
模块,但我不确定哪个可见模块/属性可以帮助实现我的要求。
:
- hosts: localhost
gather_facts: no
tasks:
- name: Get stats of a file
ansible.builtin.stat:
path: ~/notes.txt
register: st
- name: displayx
debug:
msg: "{{ st }}"
输出:
PLAY [localhost] *********************************************************************
TASK [Get stats of a file] ***********************************************************
Tuesday 17 January 2023 07:33:06 -0600 (0:00:00.013) 0:00:00.013 *******
ok: [localhost]
TASK [displayx] **********************************************************************
Tuesday 17 January 2023 07:33:06 -0600 (0:00:00.446) 0:00:00.459 *******
ok: [localhost] => {
"msg": {
"changed": false,
"failed": false,
"stat": {
"atime": 1667926553.8257182,
"attr_flags": "",
"attributes": [],
"block_size": 4096,
"blocks": 8,
"charset": "us-ascii",
"checksum": "f427d59898770c15084a339bb2cd0d7e5354a4d3",
"ctime": 1667918971.8145092,
"dev": 64772,
"device_type": 0,
"executable": false,
"exists": true,
"gid": 64395,
"gr_name": "aces",
"inode": 3529825,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"mimetype": "text/plain",
"mode": "0644",
"mtime": 1667918971.812509,
"nlink": 1,
"path": "/home/wladmin/notes.txt",
"pw_name": "wladmin",
"readable": true,
"rgrp": true,
"roth": true,
"rusr": true,
"size": 700,
"uid": 600000008,
"version": "1489589917",
"wgrp": false,
"woth": false,
"writeable": true,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}
}
}
在Ansible中没有可以开箱即用的模块。这将留给您shell
模块,或者根据您的基础结构和其他功能,您可能能够创建一个用Bash或Shell编写的自定义模块,作为特定find
命令的包装器。
find $path -type f -exec grep -Iq . {} ; -printf '%Pn'
使用上述方法,然后使用最小的剧本
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Get human-readable files
human_readable:
path: "/home/{{ ansible_user }}/test/library"
register: result
- name: Show result
debug:
msg: "{{ result }}"
- name: Show human-readable files
debug:
msg: "{{ item | basename }}"
loop: "{{ result.stdout_lines }}"
将在列表结果集中提供具有指定属性的文件。
TASK [Show human-readable files] *************
ok: [localhost] => (item=size.sh) =>
msg: size.sh
ok: [localhost] => (item=human_readable.sh) =>
msg: human_readable.sh
ok: [localhost] => (item=between.sh) =>
msg: between.sh
ok: [localhost] => (item=icmp_ping.py) =>
msg: icmp_ping.py
ok: [localhost] => (item=hardware_facts.py) =>
msg: hardware_facts.py
主要基于的
- 如何在远程服务器上使用Ansible执行Shell脚本?
- Linux命令:如何'查找'仅文本文件?
- 当与
-exec echo {}
选项一起使用时,从find
命令输出中删除导点
进一步阅读
- 文件搜索…与Ansible