gpt4 book ai didi

vagrant - 通过 PuPHPet 使用不同配置的多个 Vagrant VM

转载 作者:行者123 更新时间:2023-12-05 00:18:27 25 4
gpt4 key购买 nike

我觉得我错过了一些基本的东西。如何使用 PuPHPet 在一个 vagrantfile 中定义两台机器,都是 Ubuntu 14.04,但一台安装了 mysql,另一台安装了 elasticsearch?我看到如何定义多台机器,但每台机器的配置似乎都是相同的???

最佳答案

这不是通过 PuPHPet GUI native 支持的,但是......您可以轻松实现它。

注意:我不会通过 PuPHPet 的 github tracker 提供对以下内容的支持。请不要为此张贴门票。但是,我正在使用类似于一些自由客户的东西,它运行良好。

PuPHPet 支持多个配置文件,每个都扩展和覆盖前一个。

看看puphpet/puppet/hiera.yaml :

---
:backends: yaml
:yaml:
:datadir: '/'
:hierarchy:
- vagrant/puphpet/config-custom
- vagrant/puphpet/config-%{::provisioner_type}
- vagrant/puphpet/config
:merge_behavior: deeper
:logger: console

Hiera 向后加载配置文件,所以它是 config.yaml -> config-%{::provisioner_type}.yaml -> config-custom.yaml .

您可以在 config-custom 下方插入新行: - vagrant/puphpet/config-%{::server_type}
这会将这个文件中的任何自定义设置注入(inject)到 Puppet 环境中。但是,您仍然需要让 Vagrant 知道它,因为 Vagrant 从 Vagrantfile 读取。执行命令。您可能还需要为每种不同的服务器类型做一些自定义工作。请注意 server_type在这种情况下,可能意味着代理、应用程序、数据库、 Jenkins 等。

在 PuPHPet 根目录中,其中 Vagrantfilepuphpet目录存在,创建以您的服务器类型命名的新目录。

例如,创建一个新的 db目录,删除你的 Vagrantfile并在这个新目录中创建一个新目录,并创建一个 config-db.yaml里面 puphpet目录:
$ tree -L 2
.
├── db
│   └── Vagrantfile
└── puphpet
├── config-custom.yaml
├── config-custom.yaml.dist
├── config-db.yaml
├── config.yaml
├── files
├── puppet
├── ruby
├── shell
└── vagrant

您的 db/Vagrantfile内容可能如下所示:
# -*- mode: ruby -*-

dir = File.dirname(File.expand_path(__FILE__))
dir = "#{dir}/.."

server_type = 'proxy'

VAGRANT_DOTFILE_PATH = "#{dir}/.vagrant";
currpath = ENV['VAGRANT_DOTFILE_PATH'];
if(currpath.nil?)
currpath = '.vagrant';
end
if(currpath != VAGRANT_DOTFILE_PATH)
ENV['VAGRANT_DOTFILE_PATH'] = VAGRANT_DOTFILE_PATH
args = ARGV.join(' ');
system "vagrant #{args}"

if Dir.exists?('Directory Name')
FileUtils.rm_r(currpath)
end

abort "Finished"
end

require 'yaml'
require "#{dir}/puphpet/ruby/deep_merge.rb"
require "#{dir}/puphpet/ruby/to_bool.rb"
require "#{dir}/puphpet/ruby/puppet.rb"

configValues = YAML.load_file("#{dir}/puphpet/config.yaml")

provider = ENV['VAGRANT_DEFAULT_PROVIDER'] ? ENV['VAGRANT_DEFAULT_PROVIDER'] : 'local'
if File.file?("#{dir}/puphpet/config-#{provider}.yaml")
custom = YAML.load_file("#{dir}/puphpet/config-#{provider}.yaml")
configValues.deep_merge!(custom)
end

if File.file?("#{dir}/puphpet/config-#{server_type}.yaml")
custom = YAML.load_file("#{dir}/puphpet/config-#{server_type}.yaml")
configValues.deep_merge!(custom)
end

if File.file?("#{dir}/puphpet/config-custom.yaml")
custom = YAML.load_file("#{dir}/puphpet/config-custom.yaml")
configValues.deep_merge!(custom)
end

data = configValues['vagrantfile']

Vagrant.require_version '>= 1.8.1'

Vagrant.configure('2') do |config|
eval File.read("#{dir}/puphpet/vagrant/Vagrantfile-#{data['target']}")
end

我们现在已经在 #{dir}/puphpet/config-#{server_type}.yaml 告诉 Vagrant 新的配置文件。 -> #{dir}/puphpet/config-db.yaml -> ..

根据需要为尽可能多的服务器类型创建尽可能多的这些。

如果您希望 Puppet 了解 server_type值,您可以将其作为因素传递。更新 vagrant/Vagrantfile-*文件:
puppet.facter = {
'server_name' => "#{machine['id']}",
'server_type' => "#{server_type}",
'fqdn' => "#{machine_id.vm.hostname}",
'ssh_username' => "#{ssh_username}",
'provisioner_type' => 'local',
}

它将在您的 Puppet list 中以 $::server_type 的形式出现.

那么这里到底发生了什么?

好吧,在你的 config.yaml (即主配置文件)您可以设置服务器场的基础知识。每个服务器可能需要像 git 这样的包。或者有防火墙打开的特定端口。您可以在那里添加这些值。

将特定于服务器的应用程序设置为不安装在您的 config.yaml 中:
mongodb:
install: '0'
settings:
bind_ip: 127.0.0.1
port: '27017'
globals:
version: 2.6.0
databases: { }

在您的 config-db.yaml您可以根据需要设置特定于 DB 的值:
mongodb:
install: '1'
settings:
ensure: true
package_name: mongodb-org-server
bind_ip: "%{::ipaddress_tun0}"
port: '27017'
config: /etc/mongod.conf
replset: rsmain
globals:
bind_ip: "%{::ipaddress_tun0}"
version: 3.2.6
service_name: mongodb
databases:
your_db:
name: db_name
user: db_user
password: 'awesome_password'

现在您的数据库服务器将获取这些更改并根据需要应用。您的应用服务器(或 jenkins/proxy/etc)仍将看到 mongodb因为不需要从 config.yaml 安装.您可以通过这种方式创建相当复杂的农场,只需几个简单的 YAML 文件即可。

最后要注意的是,由于这是一个多服务器环境,当你运行大多数命令时,Vagrant 需要知道在哪个服务器上工作。您可以使用机器 ID 来执行此操作,您需要在每个 config-#{server_type}.yaml 中设置它。文件。每个文件都可以为其类型定义多台机器。然后只需将机器 ID 附加到 vagrant 命令:
vagrant up db1 , vagrant destroy -f db1 , ETC。

我希望这能回答您所有的问题,或者至少可以帮助您实现您想要完成的大部分任务!

关于vagrant - 通过 PuPHPet 使用不同配置的多个 Vagrant VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com