WindowsでAnsibleを使用する必要がある状況(原則として、それほどストレスはありませんが、どこでも明確に説明されていません)、そして、このビジネスをWindowsでVagrantと統合するのは良いことです-catをお願いします。
おそらく、警告から始めます。 プロジェクトインフラストラクチャの展開を自動化するプロバイダーを選択し、Windowsワークステーションをウィザードとしてのみ使用する場合は、Ansibleを使用しないことをお勧めします。 彼のインストールドキュメントには次のように書かれています 。「現在、AnsibleはPython 2.6がインストールされているどのマシンからも実行できます(Windowsは制御マシンではサポートされていません)。」 以下に説明するものはすべて、緊急時の松葉杖とバックアップのシステムです。 ただし、極端なケースが発生した場合、または簡単な方法を探していない場合は、行きましょう。
設置
一般に、ここで驚くべきことは何もありません。 サブジェクトがそのままWindowsをサポートしていないが、通常は* nixでのみ動作する場合-Cygwinを使用してWindowsで小さな* nixを配置することができます。 さらに、CygwinでAnsibleを作成する方法に関する既製の指示をGoogleで検索することもできますが、私はなんとかこれを行うことができました。たとえば、 この指示の作成者よりも簡単でわかりやすいようです。
今後は、私にとってCygwinの最初の経験でした(私自身は長い間Linuxを使用していましたが、この指示は全体として、チームにWindowsを割引せずに選択されたツールを使って作業する機会を与えるための試みです)、パッケージをインストールすることですそのことは私には明らかではありません。 グーグルで検索する必要がありました。パッケージをインストールするには、リストでそれを見つけてこのアイコンをクリックする必要があることがわかりました -その後、彼のステータスが変更されます。 パッケージを追加または削除するには、インストーラーを実行し、最初のインストール時と同じパスに従う必要があります。
別のメモ。 ベラルーシ出身の場合、Beltelecomミラー(http://ftp.mgts.by/pub/cygwin)を使用してください。経験から、これがすべてを迅速にインストールする唯一の方法です。 これを行うには、ミラーのリストの下にあるフィールドに指定されたアドレスを入力し、[追加]をクリックして、リストで選択します。
Cygwinをインストールするときに、次のパッケージを選択します。
- binutils(Develから)
- libuuid-devel(Libsから)
- python(Pythonから)
- python-crypto(Pythonから)
- python-setuptools(Pythonから)
オプションで、Develのgcc-core、次にいくつかのPythonモジュールがCソースからアセンブルされます。それ以外の場合、Python実装に満足する必要があります。
このセットの説明は何ですか? 通常、AnsibleはPythonパッケージマネージャーpipを介してのみインストールでき、少なくともx86_64のCygwinのバージョンでは、libuuid-develなしでは機能しません。 binutilsにより、pipはCygwin libuuid実装を使用できます。 残りは理解できると思います-Ansible自身にとって。
Cygwinをインストールした直後に、ホームディレクトリの場所を説明することをお勧めします。 デフォルトでは、彼はいくつかのフォルダーを自分のフォルダーとして使用します。 Windowsユーザーフォルダーを使用することは、これがやや理解しやすく、透過的に見えるためです。 さらに、Cygwin'a Vagrant'aの下から開始するときに発生するいくつかの問題を解決します。追加のシャーマニズムパスなしで、彼は常に仮想マシンを再作成します。
これは、Cygwinで実行される次のコマンドで実行できます。
mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
ハーネスが完成しました。 現在、Ansible自体。 ここではすべてが予期せず、Cygwinのいくつかのコマンドだけで完了です。
-
easy_install pip
-
pip install ansible==1.5.3
1.5.3を使用する理由 これはWindowsで実行されている最新バージョンであり、迷惑なバグはありません。
さらに、ControlMasterなどのssh機能を使用する必要がないことをAnsibleに説明する必要があります(Windowsでは機能しません)。 その本質は次のとおりです。sshは、ホストとの接続を確立し、ソケットを作成し、設定可能な時間の間、ソケットを強制終了しません。 可能な場合、次に接続するときに、このソケット(既に確立されている接続)を使用して再確立しないようにし、Ansibleは各タスクの接続を設定するオーバーヘッドなしで動作します。 これを行うには、環境変数
ANSIBLE_SSH_ARGS=-o ControlMaster=no
またはAnsible configを使用して、
[ssh_connection]
セクションで
ssh_args = -o ControlMaster=no
オプションを指定します。 stackoverflowで、 このトピックに関する情報を見つけることができます。
全体として、それだけです。 その後、* nixのようにCygwinの
ansible-playbook
を使用できます。
VagrantによるAnsible:大気との接続
理論的には、 VagrantはAnsibleと美しく透明に統合します。 しかし、Windowsではそうではありません。 AnsibleをWindowsプロバイダーとして使用してvagrant provisionを初めて実行しようとすると、ある種の派手なエラーが発生します。 理由は非常に単純です:AnsibleはCygwinでのみ動作します。 浮浪者に必要な方法でそれを呼び出すように強制する簡単な方法を見つけることができませんでした。 トラブルは素晴らしいように思えます:Cygwinで既に実際のansible-playbookを実行するansible-playbook.batと呼ばれるバッチファイルを作成し、Vagrantがそれに乗るように
%Path%
入れます-それだけです! しかし、そこにありました。
WindowsのVagrantは、bashと* nixユーティリティのコレクションを備えた同じ松葉杖およびバックアップシステムです。 したがって、単純に
bash
を書くことは機能しません:Vagrantは* nixユーティリティでディレクトリへ
%Path%
パスで
%Path%
希釈します(ちなみに、GitBashも罪深いです)。Cygwinとそのユーティリティが必要です。
その結果、試行錯誤と長期にわたる苦痛を経て、 このバッチが生まれました。 うんざりするかもしれませんが、私はWindows用のスクリプト作成の知識がなかったので、StackOverflow Driven Developmentの方法論に従って、それが何であるかということに目を奪います。
また、その過程で、上記の
ANSIBLE_SSH_ARGS
環境変数を設定するのに最適な場所であることが
ANSIBLE_SSH_ARGS
。 Ansibleは設定を保持せず、最初に見つかった設定をそれぞれ取得するため、設定で設定するのは不便です。プロジェクトコンテキストでAnsible設定を使用することはできません。プロビジョニングが非常に遅くなります)。 Vagrantファイルでも指定できますが、追加のバウンスなしでは、Vagrantなしでansible-playbookを使用することはできませんでした。
この.batは、Cygwinビンが
%Path%
追加され(どの部分であっても)、Cygwinビンの前に
%Path%
にバッチファイル自体への
%Path%
が追加されることを前提としています。
その結果、上記のすべては、プロジェクトを展開する手順の文字通りかなり簡単な指示に収まり、さまざまなレベルでプロジェクトに来た開発者で多かれ少なかれ正常に実行されました。