Hi all, I’ve a very simple role to copy and validate a monit configuration file
cat roles/monit_install/tasks/main.yml
- name: copy configuration file
template:
mode: 0600
dest: /etc/monitrc
src: monitrc.j2
validate: /usr/bin/sudo /usr/bin/monit -c %s -t
now if I validate the configuration on the target server works like a charm:
[root@server2 ~]# monit -c /etc/monitrc -t
Control file syntax OK
and so if I launch the playbook with the user root (after having removed the configuration file on the target server)
$ ansible-playbook monit_install.yml -u root -k
SSH password:
PLAY [server2] ****************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [server2]
TASK [monit_install : copy configuration file] ********************************************************************************************************************************************************************************************************************************
changed: [server2]
TASK [monit_install : debug variable] *****************************************************************************************************************************************************************************************************************************************
ok: [server2] => {
…
}
PLAY RECAP ********************************************************************************************************************************************************************************************************************************************************************
server2 : ok=3 changed=1 unreachable=0 failed=0
but it fails when I try to launch it with sudo/become as follows:
(after having removed the file monitrc on server2)
$ ansible-playbook monit_install.yml --become --ask-become-pass
SUDO password:
PLAY [server2] ****************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [server2]
TASK [monit_install : copy configuration file] ********************************************************************************************************************************************************************************************************************************
fatal: [server2]: FAILED! => {“changed”: false, “checksum”: “435dbc73eaa2ccd4efd4c442e75e59e080088c02”, “exit_status”: 1, “msg”: “failed to validate”, “stderr”: “The control file ‘/home/fusillator/.ansible/tmp/ansible-tmp-1551782364.37-11770304984221/source’ must be owned by you.\n”, “stderr_lines”: [“The control file ‘/home/fusillator/.ansible/tmp/ansible-tmp-1551782364.37-11770304984221/source’ must be owned by you.”], “stdout”: “”, “stdout_lines”: }
to retry, use: --limit @/home/fusillator/Code/ansible/monit_install.retry
PLAY RECAP ********************************************************************************************************************************************************************************************************************************************************************
server2 : ok=1 changed=0 unreachable=0 failed=1
I tried to add fusillator user in sudo configuration to allow the execution of /usr/bin/monit without password but it fails anyway.
fusillator ALL=(ALL) NOPASSWD: /usr/bin/monit
So I miss something… isn’t the validation program run as the become user?
Any idea to resolve the issue?
regards
Luca