Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 执行脚本为Vagrant设置ansible(或其他provisioner)?_Shell_Vagrant_Ansible - Fatal编程技术网

Shell 执行脚本为Vagrant设置ansible(或其他provisioner)?

Shell 执行脚本为Vagrant设置ansible(或其他provisioner)?,shell,vagrant,ansible,Shell,Vagrant,Ansible,我的总体目标是,我的团队成员通常会将git回购、cd克隆到其中,然后键入vagrant up。特别是,我不希望他们必须安装vagrant和VM runner(即VirtualBox)之外的任何东西 对于ansible,我将其包含在子树中。它很容易运行,例如,source-ansible/hacking/env-setup。但是,我希望这是防弹和标准化尽可能 有没有办法让vagrant启动来运行上面这样的脚本来启用provisioner(在主机上)?或者我需要将其包装在shell脚本中吗 [如果您

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

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

有没有办法让vagrant启动来运行上面这样的脚本来启用provisioner(在主机上)?或者我需要将其包装在shell脚本中吗


[如果您想通过shell脚本了解vagrant up的基本原理,vagrant会自动在源代码树上查找相应的vagrant文件-因此我的目标开发人员/设计师观众不需要考虑vagrant文件的位置。]

您可以这样做,我没有完全测试这个,因为我没有使用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

它可能还会询问他们的密码。。。但这一点应该不会有问题。

正如我在评论中提到的,至少对于ansible,您可以通过在
Vagrant.configure
块中执行shell环境配置来解决这个问题。对于ansible,以下操作目前有效(假设您已将ansible放在名为ansible的文件旁边的目录中):


请注意,
ansible/hacking/env setup
脚本也会设置MANPATH。这显然是有限的效用在这里

我会给你投票的-因为我没有想过我应该检查它是否安装。。。我也会有人使用OSX(可能还有windows),一般来说,我希望避免在VM之外安装东西。我想我可以通过在ruby脚本中设置shell变量来处理这个问题,但是我需要确保它们在子shell中被保留。
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"