0

我的总体目标是我的团队成员通常会克隆一个 git repo,cd 到其中,然后键入vagrant up. 特别是,我不希望他们必须安装除了 vagrant 和 VM runner(即 VirtualBox)之外的任何东西。

对于 ansible,我将其包含在子树中。它很容易运行,例如source ansible/hacking/env-setup. 但是,我希望它尽可能地防弹和标准化。

有没有办法vagrant up运行像上面这样的脚本来启用配置器(在主机上)?还是我需要将其包装在 shell 脚本中?

[如果你想要一个vagrant upshell 脚本的基本原理,Vagrant 会自动沿着源代码树查找合适的 Vagrantfile - 所以我的目标开发人员/设计人员不需要考虑 Vagrantfile 的位置。]

4

2 回答 2

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

它可能还会询问他们的密码......但这应该不是一次性的问题。

于 2013-10-21T03:28:13.170 回答
0

正如我在评论中提到的那样,至少对于 ansible,您可以通过在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。这显然在这里的用处有限!

于 2013-10-21T16:59:03.287 回答