Windowsでもansible使ってvagrant provisionしたい

ゴチャゴチャいろいろやったのを記憶を頼りにまとめてみます。

  1. vagrantをインストール

    これは本家サイトからmsiパッケージをダウンロードしてインストールすれば良い

    ついでにvagrant-ansibleプラグインもインストール

  2. ansibleをインストール

     cinst python
     cinst pip
     pip install ansible
    

    は何となく成功するものの、ansible起動でなんかのモジュールが見つかりませんとか言われてコケる。

    cygwinでおkという記事を見たのでその通りに方針転換。記事通りおk。

  3. playbook.ymlとかinventoryファイルを作る

    まずは超簡単にplaybook.yml

     - hosts: vagrant
       tasks:
         - yum: name=/common/files/jdk-7u40-linux-x64.rpm state=present
           sudo: yes
    

    ついでにinventoryファイル

     [vagrant]
     vagrant
    

    inventoryにはIPを書かないで、後述のssh-configで設定した。

  4. Vagrantfileをいじる

    Provisioningの設定 config.vm.provision :ansible do |ansible| ansible.playbook = "site.yml" ansible.inventory_path = "ansible_hosts" ansible.verbose = true end

    ホストオンリーネットワークの設定 config.vm.network :private_network, ip: "192.168.192.168"

  5. ssh-configの設定を書く

     Host vagrant
         HostName    192.168.192.168
         User        vagrant
         IdentityFile    ~/.ssh/vagrant_insecure_key
         StrictHostKeyChecking   no
         UserKnownHostsFile  /dev/null
    

    HostNameにはVagrantfileで設定したIPを指定。1VMずつしか動かせない気がするのでココは課題・・・。あとはvagrant sshするときと同様の情報を設定。

  6. ここまで出来たらvagrant provision

    Failed to load the "vagrant-ansible" plugin. View logs for more details.
    

    こんな警告が出るがとりあえず無視して処理は進む。お、いけるか?と思いきや

    The executable 'ansible-playbook' Vagrant is trying to run was not 
    found in the %PATH% variable. This is an error. Please verify
    this software is installed and on the path.
    

    と言われてコケる。 単独でansible-playbookとやればコマンドは発動するので(;∀;)となるが、ansible-playbookはPythonスクリプトなので、Windowsでは動かない。ぐーぐる先生のお力を借りてbatでラップしちゃう。

     c:\cygwin\bin\python2.7.exe c:\cygwin\bin\ansible-playbook %*
    

    こんなbatファイルをPATH内のどっかに置いてやればおk。

  7. まずはansibleで実行。

      ansible-playbook -i ansible_hosts -vvvv site.yml
    

    -vvvvはログを詳細に表示してくれるオプション。 たまに?(結構頻繁)にSSHがエラーを起こす(原因不明調査中)のでそのために付けてます。

  8. いよいよvagrantで実行

      vagrant provision
    

    こいつもSSH接続で結構エラーを起こす。認証まわりっぽいがよく分からない。。。 うまくいけばProvisioningされて、JDKがインストールされてハッピーになれます。

6でbatファイルを作る必要があるのがミソでしょうか・・・。

以上、Windowsで頑張ってみた話でした。

  • ファイル更新?のタイミングで、ansible_hosts(Inventoryファイル)のパーミッションが+xになっていることがあって、そうなってるとansible_hostsが実行できませんとか意味不明なことを言われる。その場合はchmod -x ansible_hsotsして実行属性を取っ払ってやればおk。
  • YAMLのフォーマットがおかしいとか色々文句も言われるので結構いばらの道。
  • まだ課題もあるのでその辺は継続・・・。