Мы развертываем многоузловую среду PHP с помощью chef.
Я написал несколько кулинарных книг для определенных ролей сервера, которые устанавливают определенные пакеты (в основном с использованием диспетчера пакетов), которые использует приложение.
Теперь я бы хотел, чтобы шеф-повар постоянно обновлял пакеты на этих узлах. У нас есть две среды: разработка и производство. Когда, скажем, выйдет новая версия PHP, я хотел бы протестировать эту новую версию в нашей среде разработки, а затем развернуть ее в производственной среде. Мои определения пакетов в рецепте установки PHP выглядят так:
package 'php' do
action :install
version '5.3.27'
end
Какие шаги мне предпринять, когда выйдет версия 5.3.28?
Лучшая практика для шеф-повара - всегда начинать с одного и того же состояния готовности. Если вы выполняете развертывание в облаке, я бы создал совершенно новую виртуальную машину и развернул PHP с нуля.
Если у вас нет такой роскоши, то вы находитесь в ситуации, когда вам нужно поддерживать два известных начальных состояния. (1) PHP не установлен и (2) установлена старая версия PHP.
Вы не можете связать их вместе там, где вы всегда сначала устанавливаете 5.3.27, потому что это разрушает идемпотентность этого ресурса.
Я бы порекомендовал выполнить шаг вручную, на котором вы удалите 5.3.27 и начнете чистку с установки 5.3.28 chef.
Наконец, я бы рекомендовал как можно больше избегать использования ролей повара. Они не могут быть версированы и затрудняют обновление, когда у вас есть и разработка, и производственная система, разделяющая одну и ту же роль (т.е. как мне изменить роль, не влияя на обе среды?) Вместо этого рассмотрите возможность использования родительской поваренной книги для оркестрации.