あるタスクだけ実行ユーザーを変更して実行する

やりたかった事

定期的にjcmdを使ってGCを強制的に発生をさせたかった。
そこでAnsibleを用いて実行をさせようとしたが、root権限のままではAttachできないとJVMに怒られるので、
Tomcat(正確にはTomEEだが)を起動させているユーザであるtomcatユーザにてsudo実行を行おうとした。

shell: sudo -u tomcat jcmd `jps | grep Bootstrap | awk '{print $1}` GC.run

しかし、上記内容にて実行を行うと、以下の様なウォーニングが発生した。

Consider using 'become', 'become_method', and 'become_user' rather than runnig sudo

原因

Ansibleではsudoコマンドを直接利用するのは、現在非推奨になっているため。

対応方法

以下の様に書き換える事で無事解決した。
なお、become_methodのデフォルト値はsudoなので、この場合はbecome_method節を書く必要はない。

-name : GC Run
become: yes
become_user: tomcat
shell: jcmd `jps | grep Bootstrap | awk '{print $1}` GC.run