Vagrant/Ansibleを使って、GitHubリポジトリからcloneするタスクを自動化してみました。
基本的な設定は前回の記事「VagrantでAnsibleを使ってOracle JDKインストールを自動化する」と同じですので、そちらも参照してください。
デプロイ用鍵の作成 (任意)
今回、Ansible/GitHub用に鍵github_deploy
を作成しました。
$ ssh-keygen -q -f ~/.ssh/github_deploy Enter passphrase (empty for no passphrase): Enter same passphrase again:
作成した鍵はいつものように、GitHubに追加しておきます。
ssh-agent
の起動と鍵の追加
あらかじめ、VMホスト側でssh-agent
を起動しておきます。
$ ssh-agent
次に、鍵をエージェントに追加しておきます。ちなみに、id_rsa
ならssh-add
だけでもOKです。
$ ssh-add ~/.ssh/github_deploy Identity added: /Users/safx/.ssh/github_deploy (/Users/safx/.ssh/github_deploy)
ssh-add -l
で鍵が追加されているかを確認しておきます。
$ ssh-add -l 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /Users/safx/.ssh/github_deploy (RSA)
Vagrantの設定
Vagrantで、ゲストOSからのエージェントフォワーディングを有効にするためにVagrantfile
に次のように書きます。
config.ssh.forward_agent = true
プレイブックへのタスク追加
Ansibleのplaybook.xml
には次のようなタスクを追加します。
- name: clone github repos tags: github git: repo=git@github.com:UserName/SomeRepo.git dest=/home/vagrant/someRepo accept_hostkey=True sudo: False
GitHubに接続するときに自動で接続するためにaccept_hostkey=True
としています。また、rootだとforward_agent
の設定が効かないっぽいのでsudo: False
しています。
プレイブックの実行
各種設定が済んだら、ansible-playbook
でプレイブックを実行します。
$ ANSIBLE_SSH_ARGS="-o ForwardAgent=yes" ansible-playbook -i vagrant_ansible_inventory_node1 --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml -t github : TASK: [clone github repo] ***************************************************** changed: [node1] PLAY RECAP ******************************************************************** node1 : ok=1 changed=1 unreachable=0 failed=0
無事実行されて、ユーザvagrantのホームにリポジトリがクローンされました。
$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686) * Documentation: https://help.ubuntu.com/ Welcome to your Vagrant-built virtual machine. Last login: Fri Mar 7 17:52:45 2014 from 10.0.2.2 vagrant@precise32:~$ ls postinstall.sh someRepo
ちなみに、ansible-doc
によると、ansibleのgit
コマンドにはssh_opts
があるのですが、手元のansible 1.5ではssh_opts='-o ForwardAgent=yes'
が効きませんでしたので、かわりにANSIBLE_SSH_ARGS
を使っています。
vagrant provision
からの実行
前述のANSIBLE_SSH_ARGS
の代わりに、playbook.xml
と同じ場所に次のようなansible.cfg
を作成する方法もあります。
[ssh_connection] ssh_args="-o ForwardAgent=yes"
ansible.cfg
を用意しておけばvagrant provision
だけでプロビジョニングが可能になります。
$ vagrant provision
Permission denied (publickey)
ssh関連でエラーが起こる場合には、まず、ホスト側でssh-agent
が利用できるようになっているかを確認しましょう。
ssh -T git@github.com
で接続を確認できます。成功する場合には次のように表示されます。
$ ssh -T git@github.com : Hi <User>! You've successfully authenticated, but GitHub does not provide shell access.
ssh-agent
が起動していない、または起動しているがキーが追加されていない、GitHub側の設定にキーがないなどのときには次のエラーになるはずです。
$ ssh -T git@github.com Permission denied (publickey).
GitHubのヘルプページも参照してください。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。