vagrantのchefによるprovisioningでgitのprivte repositoryを扱う
いろいろと要求と制限があったけど、わりときれいに解決したのでめも。
まずはssh forward agentの設定
# ~/.ssh/config Host * ForwardAgent yes $ eval `ssh-agent` $ ssh-add ~/.ssh/id_rsa
Vagrantfileにもforward agentの設定を書く。
# Vagrantfile Vagrant.configure("2") do |config| # ... config.ssh.forward_agent = true # ...
あとは、こんな感じにsudoersにSSH_AUTH_SOCKを設定してgit repositoryをsyncするrecipeを書いて、それをprovisionに指定すればOK。provision走らせると、githubのprivate repositoryからVMの中にちゃんと持ってくることができる。Defaultsのうしろの\tの入力に注意。
deploy_user = node["git_repository_to_deploy"]["deploy_user"] file "/etc/sudoers.d/root_ssh_agent" do mode 0440 owner 'root' group 'root' content "Defaults\tenv_keep += \"SSH_AUTH_SOCK\"" end git "/home/#{deploy_user}/deploy/" do repository "git@github.com:some/repo.git" reference "master" action :sync user deploy_user group deploy_user end