Windows上でAnsibleを使えるまで試行錯誤
皆様あけましておめでとうございます。
当ブログ2017年最初の記事いってみましょう!!!
WindowsでAnsibleを使うにはどうするか
一番ラクなのはWindows上のターミナルからansibleコマンドを実行する方法でしょうか。
ここを目指して試行錯誤したのですがどうにもうまくいきませんでした。
結局DockerやVagrantを用途ごとに利用する方法が一番ラクだということがわかりました。
以下は試行錯誤した結果をまとめてみます。
最後にWindows上でDockerを使ったAnsibleのRole再利用方法について書き留めます。
MSYS2上でじゃれ合う
Bashの導入にMSYS2を利用しています。
- ConEmu (Terminal)
- Bash (Shell)
まず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
となりまた失敗になりました。
コマンドプロンプト上でじゃれ合う
Python2をwindowsのインストーラーからインストールしてAnsibleのインストールをやってみました。
Python2がビルドに利用するWindowsのコンパイラはありがたいことにMicrosoftから提供されていました。
Download Microsoft Visual C++ Compiler for Python 2.7 from Official Microsoft Download Center
そして見事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の利用シーンとしてプロビジョニングがあると思います。
Vagrantはプロビジョニングの方法としてAnsibleのプロビジョナーを提供してくれています。
Windows上でAnsibleはインストールできていないのでAnsible Localを利用します。
いい感じです。見事Ansibleでプロビジョニングできました。
Roleの再利用とRoleの作成を考える
Ansibleにはansible-galaxyコマンドがあります。
Roleの再利用を目的として提供されているので、Roleを作成してみたいと思います。
しかし、Windows上ではプロビジョニングのシーン以外ではAnsibleを利用できません。
Dockerを利用してじゃれ合う
最後に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とじゃれ合う方法についてでした。
Cygwinについては書いておりませんが以下のサイトに書かれてありました。
Running Ansible within Windows | Jeff Geerling
MSYS2あたりの知識が不足しており誤っている場合があるのでその際にはご教授くださいませ。
どうにもこうにも色々躓くことが多いWindows上での開発ですが誰かの助けになれば幸いです。
では、御年もよろしくお願いいたします!!!