Я бы сказал, что ваш выбор Vagrant уже послужил хорошим началом того, что вы ищете, но теперь вам нужно немного углубиться в Chef или Puppet, чтобы еще больше автоматизировать процесс подготовки.
Я полагаю, что хорошим выбором в вашем сценарии было бы сначала поместить как Vagrantfile, так и соответствующий манифест Puppet под контроль версий как часть вашего проекта.Кроме того, все конфигурации, относящиеся к этой машине, также должны быть переведены в систему контроля версий и / или предоставлены через какое-либо хранилище артефактов.
Во-вторых, установите правило в команде, которое изменяет (по крайней мере, те, которыедолжен жить дольше) к среде необходимо зарегистрироваться, если они считаются готовыми для других членов команды.
По поводу вашего второго вопроса и возвращения к моему открытию: Puppet (который мне нравится) или Chefэто ваши инструменты выбора и могут сэкономить вам и вашим коллегам много работы в будущем.Здесь я остановлюсь на Puppet, поскольку не знаю, насколько хорошо Chef.
С помощью puppet вы можете управлять всем, что вам нужно, установкой пакетов, изменением конфигурации и обеспечением работы определенных служб.или вообще то, что система имеет состояние, в котором вы хотите ее видеть.Более того, если вы или другой член команды внесли некоторые вредоносные изменения в его / ее ящик, вы можете просто откатить изменения в своем манифесте Vagrantfile / Puppet, ввести
vagrant destroy && vagrant up
, и поле будет легко взятовернуться к последнему версионному состоянию.
Например, возьмите следующий файл манифеста:
package { "mysql-server-5.1":
ensure => present
}
file { "/etc/mysql/my.cnf":
owner => "root",
content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
require => Package["mysql-server-5.1"]
}
service { "mysql":
ensure => running,
subscribe => File["/etc/mysql/my.cnf"],
require => File["/etc/mysql/my.cnf"]
}
Что он делает, он в первую очередь проверяет механизм пакетов ОС в вашей коробке(имена в примере предполагают недавнюю версию Ubuntu), если установлен пакет «mysql-server-5.1», и если нет, он его установит.Через атрибут 'require' вторая директива будет выполняться после первой (и только в том случае, если она работала), изменяя конфигурацию MySQL на ту, которую вы также зарегистрировали и / или опубликовали где-то, к которой вы можете обратиться (это также может бытьположить в ту же папку, что и Vagrantfile, и затем будет доступен в поле / vagrant).Последний шаг, который снова будет выполнен только в том случае, если изменение конфигурации сработало, будет гарантировать, что служба «mysql» запущена и работает или перезапускается, если она уже работала при изменении конфигурации.
Теперь вы можете подключить этот манифест в своем Vagrantfile:
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
config.vm.define "node1" do |cfg|
cfg.vm.network "10.23.5.11"
cfg.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.manifest_file = "node1.pp"
end
end
end
Со всеми изменениями, кроме «пробных», внесенных в среду, как это, все члены команды гарантированно будут иметь одинаковыенастройка легко и воспроизводимо только у них под рукой.
Мне лично нравится пробовать вещи на коробке вручную, и когда я найду правильную настройку и конфигурацию, переведу ее в манифест Puppet, который будет готов, если будет готов позже.использовать и делиться с членами команды.
Поскольку Puppet (и Chef также) может управлять практически всем, что вам нужно (пользователи, задания cron, пакеты, сервисы, файлы, ...), это хороший выбор именно для таких целей.проблемы, и у вас есть преимущество, даже если вы сможете использовать конфигурации для подготовки постановки или тестирования envirпозже, если вы решите.С Puppet их гораздо больше, и прочитанное руководство по языку должно дать вам хорошее представление о том, что еще можно с ним сделать.
Надеюсь, что смогу помочь:)