Рабочий процесс шеф-повара для новых кулинарных книг

Создавая свои кулинарные книги, я постоянно нахожусь в этом цикле:

  1. Изменить кулинарную книгу на моем локальном компьютере
  2. Загрузить модифицированную поваренную книгу на сервер шеф-повара
  3. Запуск шеф-клиента на удаленной машине
  4. Повторить

Поскольку я новичок в шеф-поваре, я повторяю этот цикл чрезвычайно часто, но я нахожу довольно громоздкой частую загрузку и загрузку с сервера шеф-повара.

Как опытные пользователи шеф-повара облегчают этот цикл? Я изучил Chef с помощью бесплатного размещенного решения, но я не уверен, что мне лучше использовать только Chef-solo и вернуться к размещенной версии позже, когда у меня будет много серверов и больше опыта работы с шеф-поваром.

Может быть, есть рабочий процесс, с помощью которого я могу быстро попробовать внести изменения в свои кулинарные книги прямо на моем удаленном компьютере, используя размещенный Chef, но без их загрузки?


person SystematicFrank    schedule 20.03.2014    source источник
comment
Вы смотрели на Berkshelf + TK + Vagrant?   -  person sethvargo    schedule 20.03.2014
comment
Я слышал об этом комбо, но думал, что это более сложная тема, связанная только с тестированием. У меня есть только один небольшой сервер и две рабочие станции, используемые только мной и зарегистрированные как узлы бесплатного шеф-повара. На данный момент я просто хочу набраться опыта, познакомиться с шеф-поваром и быстро запускать свои модификации без цикла, связанного с медленным обходом множества машин. Мне даже пришлось заменить Berkshelf на библиотекаря, потому что это вынуждало меня использовать сложный рабочий процесс, более подходящий для фермы серверов с несколькими devops.   -  person SystematicFrank    schedule 20.03.2014


Ответы (2)


Все свои разработки я делаю локально на своем ноутбуке, используя 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

Отредактируйте следующие файлы (подробности ниже):

  1. Vagrantfile ‹ -- Управляет работой бродяги
  2. metadata.rb ‹ — Список зависимостей поваренной книги сообщества
  3. 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

Я прохожу через этот цикл большую часть времени во время тестирования. Но я также использую Chef solo, когда мне нужно попробовать несколько незначительных изменений в рецепте. Если у вас есть тестовая машина с локальной копией вашего репозитория шеф-повара, вы можете попробовать внести изменения и запустить шеф-повара в одиночку, чтобы увидеть результаты. Таким образом, нет загрузки.

person sebgar    schedule 21.03.2014