Windows(Cygwin)でAnsible動かしてみる

最近流行りつつある気がするAnsibleですが、OSXからの実行はすんなりいくし情報もそれなりにあるのに、Windowsがさっぱりです。そんな中試してみたところ、少し注意点はありますが比較的簡単にCygwin上で実行できたのでメモしておきます。

必要なもののインストール

Cygwinのインストーラで以下のパッケージをインストールします。ここでインストールするpythonはバージョン2系列です。

  • Devel
    • gcc-core
  • Network
    • openssh
  • Python
    • python
    • python-setuptools

pip経由でAnsibleインストール

easy_installでpipをインストールして、pipでansibleをインストールします。

easy_install pip
pip install ansible

Ansibleのインストールはこれで終わりです。お手軽。

Ansibleの実行時に引っかかったところ

Cygwinで実行するとき、いくつか引っかかったところがありました。ただ、いくつかのWindowsで試したら引っかからない場合もあったりで根本的に何が原因かわからずじまいです。

OpenSSHでのエラー

Ansilbeで何らかの処理を実行する際、OpenSSHか、pythonのparamikoというライブラリによってssh接続が行われます。OpenSSHを利用して接続するとき以下のエラーが起きる場合があります。

AnsibleはOpenSSHを利用する際、ControlMasterを利用しようとするのですがそれがCygwinだとうまく動かない場合があるようです。この場合はansibleやansible-playbook実行前に、ANSIBLE_SSH_ARGS環境変数でControlMasterをnoにする必要があります。

ssh接続にparamikoを利用する場合はこの問題はおきません。paramikoを明示的に利用する場合はansible実行時にcオプションでparamikoを指定します。

paramikoを利用する場合のデメリットは.ssh/configが参照されないなど、OpenSSHの便利機能の幾つかが使えないところかと思います。

また、OpenSSHかparamikoかの選択はデフォルトではAnsibleが自動で行いますがOpenSSHが選択される場合はそのほうが処理が早い場合のようです。ですので明示的にparamikoを指定した場合OpenSSHに比べてパフォーマンスが落ちる場合があるのだと思いますが、その差を体感するほど重いことをしたことがないのでちょっとわからず。

Vagrantのプロビジョニングとして実行できない

Vagrantfileでansibleをプロビジョニングに利用しようとすると以下のエラーが出る場合があります。

平たく言えばansible-playbookコマンドが見つからんとのことですが、コントロールパネルから環境変数を追加しようがどうしようがこれがなぜか解決できませんでした。普通にCygwinターミナルからはansibleやansible-playbookにパスが通っているのは確認できるんです。

このエラーが出てしまう場合はVagrantからのプロビジョニングは諦めて、ansible-playbookを直接実行する必要があります。

WindowsでもOS XでもAnsible

いくつか引っかかってしまうところはありますが、比較的簡単にCygwinでもAnsibleのインストールと実行ができました。Vagrantとの組み合わせで開発環境をOS XでもWindowsでも建てたい場合はこれでだいぶ便利な感じです。