この記事ではWindowsにインストールしたConEmu、MSYS2およびPython2とDocker Toolboxを使っています。
ユーザー名は適宜読み替えてください。
WindowsでAnsibleを使うにはどうするか
一番ラクなのはWindows上のターミナルからansibleコマンドを実行する方法でしょうか。
ここを目指して試行錯誤したのですがどうにもうまくいきませんでした。
結局DockerやVagrantを用途ごとに利用する方法が一番ラクだということがわかりました。
以下は試行錯誤した結果をまとめてみます。
最後にWindows上でDockerを使ったAnsibleのRole再利用方法について書き留めます。
MSYS2上でAnsibleをインストールしてみる
まずAnsibleをwindowsネイティブのプログラムとしてインストールしてみたいと思います。
MSYS2はMSYSTEM=mingw64としてシェルを起動します。
インストールはpip経由で行いました。
Python2とpipはmingw64リポジトリで公開されているものを利用しました。
途中pycryptoやcryptographyのビルド時にライブラリが足りないことがあります。
そんなときにはCFLAGSをセットしておけばgccコンパイル時にincludeのパスを矯正できます。
結果インストールまではこぎつけました。Windowsネイティブのバイナリが生成できました。
しかし実行してみると ImportError: No module named fcntl
となり失敗になりました。
次にMSYSTEM=msysとしてシェルを起動します。
Python2とpipはmsysリポジトリで公開されているものを利用しました。
しかし実行してみると ImportError: No module named fcntl
となりまた失敗になりました。
コマンドプロンプト上でAnsibleをインストールしてみる
Python2をWindowsのインストーラーからインストールしてAnsibleのインストールをやってみました。
Python2がビルドに利用するWindowsのコンパイラはありがたいことにMicrosoftから提供されていました。
そして見事Ansibleをインストールできます。
しかし実行してみると ImportError: No module named fcntl
となりまたまた失敗になりました。
$ /c/Python27/Scripts/ansible --version
Traceback (most recent call last):
File "C:/Python27/Scripts/ansible", line 45, in <module>
from ansible.utils.display import Display
File "C:\python27\lib\site-packages\ansible\utils\display.py", line 21, in <module>
import fcntl
ImportError: No module named fcntl
その後Anaconda2を利用してみましたがこちらも同様のエラーで無理でした。
VagrantとVirtualBoxでAnsibleを利用する
Ansibleの利用シーンとしてプロビジョニングがあると思います。
Vagrantはプロビジョニングの方法としてAnsibleのプロビジョナーを提供してくれています。
Windows上でAnsibleはインストールできていないのでAnsible Localを利用します。
見事Ansibleでプロビジョニングできました。
Roleの再利用とRoleの作成を考える
Ansibleにはansible-galaxyコマンドがあります。
Roleの再利用を目的として提供されているので、Roleを作成してみたいと思います。
しかし、Windows上ではプロビジョニングのシーン以外ではAnsibleを利用できません。
Dockerを利用してRoleの再利用をやってみる
最後にDockerを利用して、Roleの再利用をする方法を試します。
Docker Machineを使いdockerコマンド利用の準備をします。
$ docker run --rm -v "//c/Users/<username>/ansible/roles:/etc/ansible/roles" ansible/ansible-container-builder:0.3 ansible-galaxy install geerlingguy.apache
後は上記のような感じでRole再利用のためにansible-galaxyコマンドを利用できます。
プロビジョニング以外のシーンではDocker利用が一番捗りそうです。
以上、Windows上でAnsibleを使う方法についてでした。
MSYS2あたりの知識が不足しており誤っている場合があるのでその際にはご教授くださいませ。
どうにもこうにも色々躓くことが多いWindows上での開発ですが誰かの助けになれば幸いです。