Все свои разработки я делаю локально на своем ноутбуке, используя Vagrant. Когда поваренная книга готова, она помещается в новый домашний репозиторий Git и интегрируется в инфраструктуру сервера моего производственного шеф-повара.
В следующем примере nginx запускается на образе виртуального бокса.
Пример
Установите бродячие плагины (это нужно сделать только один раз):
vagrant plugin install vagrant-omnibus
vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-chef-zero
Используйте Berkshelf для создания нового поваренная книга приложений.
$ berks cookbook demo
create demo/files/default
create demo/templates/default
create demo/attributes
create demo/definitions
create demo/libraries
create demo/providers
create demo/recipes
create demo/resources
create demo/recipes/default.rb
create demo/metadata.rb
create demo/LICENSE
create demo/README.md
create demo/Berksfile
create demo/Thorfile
create demo/chefignore
create demo/.gitignore
run git init from "./demo"
create demo/Gemfile
create demo/Vagrantfile
Отредактируйте следующие файлы (подробности ниже):
- Vagrantfile ‹ -- Управляет работой бродяги
- metadata.rb ‹ — Список зависимостей поваренной книги сообщества
- recipes/default.rb ‹ — обращение к кулинарным книгам сообщества и LWRP.
Запуск vagrant запустит виртуальную машину, подготовленную с помощью chef-client. Плагин chef zero запускает локальный встроенный экземпляр chef-server. Плагин berkself используется для автоматической загрузки зависимостей поваренной книги.
vagrant up
Следующая команда повторно запустит chef-client (после редактирования):
vagrant provision
Наконец, действительно большое преимущество разработки с использованием локальной виртуализации заключается в том, что вы можете снести все и построить заново с нуля:
vagrant destroy -f && vagrant up
бродячий файл
Контролирует работу бродяги. В этом случае я запускаю только одну виртуальную машину, подготовленную с помощью шеф-клиента:
Vagrant.require_plugin "vagrant-omnibus"
Vagrant.require_plugin "vagrant-berkshelf"
Vagrant.require_plugin "vagrant-chef-zero"
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Box config
config.vm.box = "saucy64"
config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/saucy/current/saucy-server-cloudimg-amd64-vagrant-disk1.box"
# Virtualbox config
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 1024]
end
# Networking config
config.vm.network "private_network", ip: "10.0.0.10"
# Plugin config
config.omnibus.chef_version = :latest
config.chef_zero.enabled = true
config.berkshelf.enabled = true
# Chef config
config.vm.provision :chef_client do |chef|
chef.add_recipe "demo"
end
end
Плагин omnibus отвечает за установку нужной версии шеф-повара. Плагин Berkshelf будет загружать зависимости поваренных книг, а в сочетании с chef-zero будет загружать поваренные книги во время каждого запуска предоставления.
метаданные.rb
Добавьте nginx в качестве зависимости от поваренной книги:
name 'demo'
maintainer 'YOUR_NAME'
maintainer_email 'YOUR_EMAIL'
license 'All rights reserved'
description 'Installs/Configures demo'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version '0.1.0'
depends "nginx"
Berksfile предварительно настроен для загрузки зависимостей кулинарных книг, перечисленных в файле метаданных, из репозитория кулинарных книг сообщества.
site :opscode
metadata
рецепты/default.rb
Запустите рецепт nginx по умолчанию
#
# Cookbook Name:: demo
# Recipe:: default
#
# Copyright (C) 2014 YOUR_NAME
#
# All rights reserved - Do Not Redistribute
#
include_recipe "nginx"
person
Mark O'Connor
schedule
20.03.2014