2013-10-21 35 views
0

我的一般目标是我的团队成员通常会将git repo克隆到cd中,然后键入vagrant up。特别是,我不希望他们必须安装除vagrant和VM runner(即VirtualBox)之外的任何东西。执行脚本为流浪者设置安全(或另一个提供者)?

为了理所当然,我把它包含在一个子树中。这很容易运行,例如,source ansible/hacking/env-setup。但是,我希望这是尽可能的防弹和标准化。

有没有办法让vagrant up运行类似上面的脚本来启用供应者(在主机上)?或者我是否需要将其封装在shell脚本中?如果你想通过shell脚本获得vagrant up的理由,Vagrant会自动遍历源代码树以找到适当的Vagrantfile - 因此我的目标开发人员/设计人员不需要考虑Vagrantfile的位置。 ]

回答

0

至少在我的评论中提到,至少可以通过在Vagrant.configure块中执行shell环境配置来解决此问题。对于ansible,目前是以下工作(假设你在一个目录把ansible旁边的Vagrantfile称为ansible):

curr_dir = Dir.pwd 
ENV['PYTHONPATH'] = "#{curr_dir}/ansible/lib:#{ENV['PYTHONPATH']}" 
ENV['PATH'] = "#{curr_dir}/ansible/bin:#{ENV['PATH']}" 
ENV['ANSIBLE_LIBRARY'] = "#{curr_dir}/ansible/library" 

注意,ansible/hacking/env-setup脚本还设置了MANPATH。这显然是有限的效用!

1

你可以做这样的事情,我还没有完全测试这个,因为我不使用ansible ......但你应该明白我的意思:

Vagrant.configure("2") do |config| 
    ansible_installed = `ansible-playbook --version` rescue nil 
    if !ansible_installed 
     `export DEBIAN_FRONTEND=noninteractive; sudo apt-get -y install ansible` 
    end 
end 

它可能会要求他们密码以及...但这不应该是一次性的问题。

+0

我会给你一个投票 - 因为我一直没有想到我应该检查它是否已安装...我也会在OS X上(也许是Windows)的人,一般来说,我想避免在虚拟机之外安装内容。我想我可以通过在ruby脚本中设置shell变量来处理这个问题,但我需要确保它们保留在子shell中。 –

相关问题