gpt4 book ai didi

ansible - 如何检查文件列表的大小

转载 作者:行者123 更新时间:2023-12-05 02:36:24 25 4
gpt4 key购买 nike

使用 Ansible,我需要检查目录中的文件是否大于 50M。我用 ls 的结果做了一个 set_fact,然后我循环统计所有文件。这可行,但当文件大于 50M 时,我无法解析结果以创建失败条件。

我这样做:

  - shell: ls -1 "{{ logs_directory }}"*.log  
register: list_logs
- set_fact:
list_logs: "{{ list_logs.stdout_lines }}"
- debug:
msg: "{{ list_logs}}"

- name: Get size
stat:
path: "{{ item }}"
with_items: "{{ list_logs }}"
register: size_log

- name: debug
fail:
msg: "Problem with log size > 50M"
when: 'size_log.stat.size / 1024 / 1024 | int > 50'

如果我只有 1 个文件,它可以工作,但是如果有多个服务器和多个文件,它就不能工作...如何解析 size_log_result

这里是一个输出 size_log 的例子:

ok: [192.168.1.2] => {
"msg": {
"changed": false,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"path": "/var/logs/admin.log"
}
},
"item": "/var/logs/admin.log",
"stat": {
"size": 21711,
}
},
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"path": "/var/logs/database.log"
}
},
"item": "/var/logs/database.log",
"stat": {
"size": 11162,
}
}
]
}
}
ok: [192.168.1.5] => {
"msg": {
"changed": false,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"path": "/var/logs/database.log"
}
},
"item": "/var/logs/database.log",
"stat": {
"size": 128453958,
}
}
]
}
}

最佳答案

在我看来,您是在重新发明轮子,而 find module似乎已经完美地回答了您的用例。

给定:

- hosts: localhost
gather_facts: no

tasks:
####
## You do not need this task, it is just to create a file
## big enough for demonstration purpose
####
- community.general.filesize:
path: /var/log/heavy.log
size: 51m

- find:
paths: /var/log
patterns: '*.log'
size: 51m
register: _logs

- fail:
msg: >-
Due to file(s): {{
_logs.files | map(attribute='path') | join(', ')
}}
when: _logs.files | length > 0

这将产生:

TASK [community.general.filesize] *********************************
ok: [localhost]

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

TASK [fail] *******************************************************
fatal: [localhost]: FAILED! => changed=false
msg: 'Due to file(s): /var/log/heavy.log'

关于ansible - 如何检查文件列表的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70259783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com