Я знаю, что вы используете Puppet, но я запустил его, используя скрипт bash ( provisioners/shell/application.setup.sh
):
#!/bin/bash
local_user=vagrant
if [ ! -n "$(grep "^bitbucket.org " /home/$local_user/.ssh/known_hosts)" ]; then
ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;
fi
if [[ ! -d "/home/$local_user/app" ]]; then
git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app
chown -R $local_user:$local_user /home/$local_user/app
su - $local_user -c "source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv some-env && workon some-env && pip install -r /home/$local_user/app/requirements.txt"
fi
Можно легко преобразовать это в манифест марионетки ...
Вместе с этим Vagrantfile
config.vm.define "web1", primary: true do |web1_config|
web1_config.ssh.forward_agent = true
# Create a private network, which allows host-only access to the machine
web1_config.vm.network "private_network", ip: "192.168.11.10"
web1_config.vm.hostname = "web1.#{domain}"
web1_config.vm.provision "shell", path: "provisioners/shell/python.setup.sh"
web1_config.vm.provision "shell", path: "provisioners/shell/application.setup.sh"
end
Ключевым моментом для меня было то, что когда я казнил:
su - $local_user -c "ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;"
su - $local_user -c "git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app"
Это не сработало. Как будто ключи не были переданы с помощью su
. Поэтому я клонировал репозиторий как root, а затем сменил владельца.
Этот пост был очень полезным.