如何在Ansible中检查文件是否为Human readable类型



我需要检查文件是否可读,即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

相关内容

  • 没有找到相关文章

最新更新