0

我试图让我的 vagrant 配置为我的多机环境中的每台机器运行不同的 shell 脚本。

我对 smartos 和 centos 都有一个定义,但是我想为每个运行不同的 shell 提供程序配置,然后在两者上运行相同的 chef-solo 提供程序配置。

#!/usr/bin/env ruby

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

$smartos_script = <<-SHELL
echo "http://10.40.95.5" > /opt/local/etc/pkgin/repositories.conf
rm -rf /var/db/pkgin && pkgin -y update
SHELL

$centos_script = <<-SHELL
touch /opt/my_file
SHELL

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.berkshelf.enabled = true
  config.ssh.forward_agent = true

  config.vm.define :smartos do |smartos|

    smartos.vm.box = "smartos"
    smartos.vm.box_url = 'http://dlc-int.openindiana.org/aszeszo/vagrant/smartos-base1310-64-virtualbox-20130806.box'
    smartos.vm.guest = :solaris

    config.vm.provision :shell do |shell|
      shell.inline = $smartos_script
    end

  end

  config.vm.define :centos do |centos|

    centos.vm.box = "centos"
    centos.vm.box_url = 'http://dlc-int.openindiana.org/aszeszo/vagrant/smartos-base1310-64-virtualbox-20130806.box'

    config.vm.provision :shell do |shell|
      shell.inline = $centos_script
    end

  end

  config.vm.provision :chef_solo do |chef|
    chef.add_recipe 'test'
  end

end

我也尝试过使用smartos.vm.provision而不是配置,但没有发现任何区别。

有谁知道我该怎么做?

4

1 回答 1

0

你在正确的轨道上

我也尝试过使用 smartos.vm.provision 而不是 config

试试这个简单的 Vagrantfile

$smartos_script = <<-SHELL
touch /opt/foo
SHELL

$centos_script = <<-SHELL
touch /opt/bar
SHELL

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define :smartos do |smartos|

    smartos.vm.box = "smartos"
    smartos.vm.box_url = 'http://dlc-int.openindiana.org/aszeszo/vagrant/smartos-base1310-64-virtualbox-20130806.box'


    smartos.vm.provision :shell do |shell|
      shell.inline = $smartos_script
    end

  end

  config.vm.define :centos do |centos|

    centos.vm.box = "centos"
    centos.vm.box_url = 'http://dlc-int.openindiana.org/aszeszo/vagrant/smartos-base1310-64-virtualbox-20130806.box'

    centos.vm.provision :shell do |shell|
      shell.inline = $centos_script
    end

  end

end

当你运行 "vagrant up" 和 ssh 到一台机器上时,例如 vagrant ssh smartos 和 cd 到 /opt 你会看到文件 "foo" 已经被创建了。当你 ssh 进入 cents 机器时,你会看到文件“bar”被创建。

于 2014-01-28T22:54:43.720 回答