使用 Vagrant 管理开发和生产环境?

2024-02-28

人们如何使用 vagrant(最好来自同一个 vagrantfile)处理开发/生产环境的简单自动化(使用 puppet)?

我试图解决的用例

  • 如果没有创建的话,我很乐意用 vagrant 来启动生产机器。
  • 如果在我的开发环境的 puppet 文件中对它们进行了调整,我很乐意使用 vagrant 在生产环境中重新加载 nginx 或 apache confs。

问题

当您向 AWS 或 Digital Ocean 等提供商调用 vagrant up 时,它会成为活动提供商并且您无法切换。你会得到这个错误:

发现一台活动机器来自不同的提供商。流浪汉 目前允许每台机器仅使用一个 一次提供者。未来的版本将消除此限制。 在那之前,请销毁现有机器以安装新机器 提供者。

这似乎是要摧毁的答案,但我只需要切换。我不想破坏。

我很想能够说

vagrant up prod

or

vagrant reload prod

然后一个简单的 vagrant up 就会回退到默认机器。

这个语法类似于多台机器 http://docs.vagrantup.com/v2/multi-machine/index.html工作,但我不想在调用 vagrant up 时启动开发和生产环境(这是默认行为)。

我应该将打包程序视为工作流程的一部分吗?我在 puppetconf 2013 上观看了 Mitchell 关于多提供商的演讲的整个演讲http://puppetlabs.com/presentations/multi-provider-vagrant-aws-vmware-and-more http://puppetlabs.com/presentations/multi-provider-vagrant-aws-vmware-and-more

我仍然没有看到我的问题的解决方案。


2013 年 9 月 27 日更新

如果其他人反对这个想法,这篇文章解决了我的很多问题。http://pretengineer.com/post/packer-vagrant-infra http://pretengineer.com/post/packer-vagrant-infra


至于解决方法,您应该定义config.vm.define(按照建议here https://github.com/mitchellh/vagrant/issues/2733#issuecomment-31406027),以支持多个提供商。

请找到以下发布者的配置@kzap https://github.com/mitchellh/vagrant/issues/2733#issuecomment-202033562例如:

Vagrant.configure("2") do |config|

  # Store the current version of Vagrant for use in conditionals when dealing
  # with possible backward compatible issues.
  vagrant_version = Vagrant::VERSION.sub(/^v/, '')

  # Configuration options for the VirtualBox provider.
  def configure_vbox_provider(config, name, ip, memory = 2048, cpus = 1)
    config.vm.provider :virtualbox do |v, override| 
      # override box url
      override.vm.box = "ubuntu/trusty64"
      # configure host-only network
      override.vm.hostname = "#{name}.dev"
      override.vm.network :private_network, id: "vvv_primary", ip: ip

      v.customize ["modifyvm", :id, 
        "--memory", memory,
        "--cpus", cpus,
        "--name", name,
        "--natdnshostresolver1", "on",
        "--natdnsproxy1", "on"
      ]
    end
  end

  default_provider = "virtualbox"
  supported_providers = %w(virtualbox rackspace aws managed)
  active_provider = ENV['VAGRANT_ACTIVE_PROVIDER'] # it'd be better to get this from the CLI --provider option
  supported_providers.each do |provider|
  next unless (active_provider.nil? && provider == default_provider) || active_provider == provider

    #
    # VM per provider
    #
    config.vm.define :"sample-#{provider}" do | sample_web_config |

      case provider
      when "virtualbox"
        configure_vbox_provider(sample_web_config, "examine-web", "192.168.50.1")

      when "aws"
        configure_aws_provider(sample_web_config)

      when "managed"
        configure_managed_provider(sample_web_config, "1.2.3.4")

      when "rackspace"
        configure_rackspace_provider(sample_web_config)  

      end
  end

end

或者发布以下示例要点@maxlinc https://gist.github.com/maxlinc/8c64c5e93734a3c939b8:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# 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.box = "dummy"

  config.vm.provider :rackspace do |rs|
    rs.username = ENV['RAX_USERNAME']
    rs.api_key  = ENV['RAX_API_KEY']
    rs.rackspace_region   = :ord
  end

  supported_providers = %w(virtualbox rackspace)
  active_provider = ENV['VAGRANT_ACTIVE_PROVIDER'] # it'd be better to get this from the CLI --provider option
  supported_providers.each do |provider|
    next unless active_provider.nil? || active_provider == provider

    config.vm.define "exact_name_#{provider}" do |box|
      box.vm.provider :rackspace do |rs|
        rs.flavor = '1 GB Performance'
        rs.image  = 'Ubuntu 14.04 LTS (Trusty Tahr) (PVHVM)'
      end
    end

    config.vm.define "regex_#{provider}" do |box|
      box.vm.provider :rackspace do |rs|
        rs.flavor = /1\s+GB\s+Performance/
        rs.image  = /Ubuntu.*Trusty Tahr.*(PVHVM)/
      end
    end

    config.vm.define "id_#{provider}" do |box|
      box.vm.provider :rackspace do |rs|
        rs.flavor = 'performance1-1'
        rs.image  = 'bb02b1a3-bc77-4d17-ab5b-421d89850fca'
      end
    end

    config.vm.define "unlisted_#{provider}" do |box|
      box.vm.provider :rackspace do |rs|
        rs.flavor = 'performance1-1'
        rs.image = '547a46bd-d913-4bf7-ac35-2f24f25f1b7a'
      end
    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vagrant 管理开发和生产环境? 的相关文章

随机推荐