Общий и автоматизированный бродячий ящик - PullRequest
6 голосов
/ 11 января 2012

Я подумываю об использовании Vagrant для разработки приложений Django, но я немного растерялся и не уверен, возможно ли то, что я хотел бы сделать.

Я установил коробку lucid32успешно и создал новый «экземпляр» vagrant с Vagrantfile, некоторыми общими каталогами и перенаправленными портами.

  • Первая проблема заключается в том, что это не кажется мне лучшим выбором, когдаработать в команде.Как мы (я и другие 10 разработчиков, например) можем поделиться коробкой, чтобы все изменения в ней были доступны?Например, если через 6 месяцев нам понадобится postgresql, мне нужно, чтобы он работал без необходимости установки postgresql 11 раз.

  • Кроме того, как я могу сделать вещи (например: postgresql, djangoэтот сервис и т. д.) запускать при запуске коробки?Я не думаю, что мне нужно ssh это и вручную запускать n раз все n вещи, которые мне нужны каждый раз.

  • И наконец: я плохо понимаюесли такие вещи, как puppet и chef предназначены для полной замены ручной установки (например, через pip или apt-get).Это так?

Спасибо.
И я извиняюсь за плохой английский.: -)

1 Ответ

13 голосов
/ 21 января 2012

Я бы сказал, что ваш выбор 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 их гораздо больше, и прочитанное руководство по языку должно дать вам хорошее представление о том, что еще можно с ним сделать.

Надеюсь, что смогу помочь:)

...