読者です 読者をやめる 読者になる 読者になる

パステル色な日々

気ままに綴るブログ

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

このあたりの理由はこちらに書かれてあることを参考に納得しました。

stackoverflow.com

その後Anaconda2を利用してみましたがこちらも同様のエラーで無理でした。

VagrantVirtualBoxでじゃれ合う

Ansibleの利用シーンとしてプロビジョニングがあると思います。
Vagrantはプロビジョニングの方法としてAnsibleのプロビジョナーを提供してくれています。

www.vagrantup.com

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上での開発ですが誰かの助けになれば幸いです。
では、御年もよろしくお願いいたします!!!