Toto jsem před pár dny řešil a došel jsem k názoru, že v Ansible použít jakékoliv moduly s přesně definovaným sudoers nejde. Ansible totiž ve většině případů funguje tak, že na server nauploadouje vlastní python skript, který se potom spouští. Takže výsledný příkaz, který se spustí na systému vypadá při použití become třeba takto (je tam přímo hláška ze sudo):
Sorry, user xxx is not allowed to execute '/bin/sh -c echo BECOME-SUCCESS-vhtkwdodhwmljovxaktortaloznjpoku; /usr/bin/python /opt/whatever/.ansible/tmp/ansible-tmp-1542799062.64-151971256696254/command.py; rm -rf \"/opt/whatever/.ansible/tmp/ansible-tmp-1542799062.64-151971256696254/\" > /dev/null 2>&1' as root on hostname-xxx.
Moje řešení tedy bylo použív v Playbooku modul command, který posílá přímo celý příkaz 'sudo systemctl restart nazev-sluzby'. Tam je problém, že je nutné pak dělat znovu logiku, kterou jinak dělá modul service pomocí when, tj. různé příkazy podle verze systému (např. systemctl pro CentOS >= 7 a service pro CentOS <= 6).
Pokud by účet appuser měl sudo na všechny příkazy, tak by to fungovalo standartní cestou.