CygwinでAnsibleは卒業

セットアップ中にぶちぶち切れて失敗続きになるわ、local_actionがよく分からない挙動を示すわで嫌になったのでCygwin使うのを止めてしまいましたが、一応色々回避はしたのでメモ。

SSHの接続に失敗する件

  1. 環境変数ANSIBLE_SSH_ARGSを設定する
  2. ansible.cfgに以下を追加する

     [ssh_connection]
     ssh_args = -o ControlMaster=no
    

Vagrant provisionから呼び出すと、ansible-playbookがNot Foundになる件~local_actionが失敗する件

以前の記事で、以下のようなansible-playbook.batをおけば良いと書きましたが、あれだと不十分でした。

    c:\cygwin\bin\python2.7.exe c:\cygwin\bin\ansible-playbook %*

具体的にはlocal_actionを使った時に、実行に必要な一時ディレクトリが存在しないという状態になります。 上記batから呼び出されたansible-playbookでは、次のようなコマンドがきちんと動いていない(ディレクトリを作れない)みたいなんですね。

    sh -c "mkdir -p $HOME/.ansible/tmp/ansible-1380895750.84-137886494894963"

ただし、local_actionでもrawを使用してコマンドを実行した場合は一時ディレクトリは不要らしいので問題ありません。

ですので、きちんとCygwin上のプロセスとして呼び出されるようにしてやる必要があります。

    @echo off
    PATH=C:\cygwin\bin;%PATH%;
    sh -c 'python /bin/ansible-playbook %*'

これで一応、Vagrant provisionが動くようにはなります。