I have a playbook I'm developing where I'm trying to find any server that
has a 0 length /var/log/messages files. When I find those, I want to
restart the rsyslog service on those. So right now I'm setting this fact
as follows:
---
- hosts: my_hosts
become: true
become_method: sudo
gather_facts: false
tasks:
- name: Determine if /var/log/messages is zero-length
ansible.builtin.find:
paths: /var/log
patterns: messages
register: messages_files
- name: Set fact for all servers that have zero-length /var/log/messages
ansible.builtin.set_fact:
zero: "{{ messages_files.files | selectattr('size', '==', 0) }}"
- name: Print results
ansible.builtin.debug:
msg: "{{ zero }}"
When the debug print happens, I get all servers printing out either the
file attributes, or an empty string:
ok: [server1] => {
"msg": [
{
"atime": 1713683723.242925,
"ctime": 1713683723.242925,
"dev": 64777,
"gid": 10,
"gr_name": "wheel",
"inode": 8212,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"mode": "0640",
"mtime": 1713683723.242925,
"nlink": 1,
"path": "/var/log/messages",
"pw_name": "root",
"rgrp": true,
"roth": false,
"rusr": true,
"size": 0,
"uid": 0,
"wgrp": false,
"woth": false,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}
]
}
ok: [server2] => {
"msg": []
}
So, 2 questions:
1) How can I NOT print what server2 is printing/showing?
2) Once I fix #1, how can I get just the hostnames of those servers where
the size of the file is 0, then start another play to restart rsyslog on
only those?
Thanks,
Harry
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/5617fb1f-3aa7-45a3-ba84-656b7b786c86n%40googlegroups.com.