ansible_ssh_userはansible_connection=localのときは意味がない

まあ、よく考えるとわかることだけど、ansible_ssh_user以外にユーザを指定する方法がなかったのでつい引っかかってしまった。

普通ならばansible_connection=localで実行する場合は、ターミナルでコマンドを叩くので、叩いたユーザの権限で実行されるのは自然なので引っかかることはないだろう。

今回なぜ引っかかってしまったのか。

  1. Windows上のVagrantでAnsibleでprovision.
  2. 通常はVagrantのprovisionはansible provisionerがあるのでそれを使えばいいが、Windows上では動かない(らしい)ので、AnsibleをゲストOSに押し込んでVagrant環境構築する - Qiitaを参考に、shell provisionerで実行していた。
  3. shell provisionerはデフォルトではroot権限でシェルスクリプトを実行する。
  4. VagrantもAnsibleもログ出力が微妙で、誰で実行しているのかなどは出力してくれない。
  5. Ansibleは、inventoryの設定に問題があってもエラーにしない。

あたりが原因か。

今後同じようなはまり方をしないためにどうすればいいか。

  • よく使われているソフトウェアといえど、特に一般的でない使い方をする場合は、一般的でない問題に引っかかる可能性が高いことを覚悟する。
  • もっとログやエラーを出させる。とはいえ今回の場合はログもエラーも役には立たなかったが。
  • もっと速い開発環境を! 再実行に時間がかかるのも、問題発見に時間がかかった原因。

難しいね。

追記。inventoryに限らないっぽい。

ちょっと気になったので、playbookやtaskごとでもuserやremote_userを書いて試してみたが、どうもまったく効かないようだ。

ansible_connection=local自体基本的に使わないようにした方がいいかも。