Как запустить команду оболочки до того, как кухня сойдет в шеф-повар?
Я использую vagrant драйвер и провайдера virtualbox для тестирования serverpec. Мне нужно выполнить некоторый скрипт, связанный с приложением, прежде чем выполнять кухонные конвергенции.
Я пытался использовать Vagrant Provisioning, но я пытаюсь сохранить конфигурацию приложения отдельно от Vagrant.
Есть ли способ, где мы можем передать некоторые команды в файл.kitchen.yml на кухне? выполнить некоторые команды, прежде чем сходятся поваренные книги.
5 ответов
Как предложил Энди, я бы вставил хук жизненного цикла pre_converge в файл kitchen.yml, этот пример помогает мне развернуть обновленные пакеты для моей VMS кухни Ubuntu:
lifecycle:
pre_converge:
remote: sudo apt-get update
Если вы пытаетесь запустить команду в хост-системе, есть pre_create_command
, Если вы имеете в виду запустить что-то на госте, это не поддерживается. Лучше всего сделать рецепт тестового прибора или кулинарную книгу и добавить его в список выполнения гостевого узла.
Предложение @coderanger, вероятно, лучший подход.
Кроме того, вы можете попробовать одно из следующих:
Custom Vagrant box
Если сценарий приложения всегда один и тот же, вы можете создать свой собственный ящик Vagrant, если сценарий уже выполнен.
Злоупотребление chef_omnibus_url
.kitchen.yml:
driver:
name: vagrant
provisioner:
name: chef_zero
chef_omnibus_url: "uri_to_your_script/script.sh"
...
script.sh:
#!/bin/sh
# Your script goes here
curl https://www.chef.io/chef/install.sh | sh
(https://www.chef.io/chef/install.sh
значение по умолчанию для chef_omnibus_url
)
Мне нравятся оба ответа, но они не подошли моему случаю, а также вашему: * 1-й не рекомендуется * 2-й не то, что вам нужно, но ОЧЕНЬ хороший момент
Однако мое решение может вам помочь.
Поскольку это - я предполагаю сейчас - только для ТЕСТИРОВАНИЯ, я предлагаю вам создать новую кулинарную книгу (например, test_kitchen_support), которую вы запускаете 1-й в списке запусков. Вы можете установить все необходимое там.
Таким образом, я обнаружил, что это очень непривычно, и это всего лишь тестирование, поэтому в производстве будет использоваться только кулинарная книга.
Моя проблема заключалась в том, что мне надоело создавать собственные бродячие ящики, и большинство из них мне не подходило (например, у них есть некоторые жесткие коды или они были очень крошечной версией ОС с отсутствующими пакетами по умолчанию)
Надеюсь, это кому-нибудь поможет.
Следующий Vagrantfile (помещенный в корень папки моей поваренной книги) работал у меня с тестовой кухней Chef:
###########################################################################################################
# The in-line script that will be used to grow our disk partition to the size specified in our Vagrantfile.
###########################################################################################################
$script = <<-SCRIPT
#!/bin/bash
ROOT_DISK_DEVICE="/dev/sda"
ROOT_DISK_DEVICE_PART="/dev/sda5"
LV_PATH=`sudo lvdisplay -c | sed -n 1p | awk -F ":" '{print $1;}'`
FS_PATH=`df / | sed -n 2p | awk '{print $1;}'`
ROOT_FS_SIZE=`df -h / | sed -n 2p | awk '{print $2;}'`
echo "The root file system (/) has a size of $ROOT_FS_SIZE"
echo "> Increasing disk size of $ROOT_DISK_DEVICE to available maximum"
sudo parted /dev/sda resizepart 2 100%
sudo parted /dev/sda resizepart 5 100%
sudo pvresize $ROOT_DISK_DEVICE_PART
sudo lvextend -l +100%FREE $LV_PATH
sudo resize2fs -p $FS_PATH
ROOT_FS_SIZE=`df -h / | sed -n 2p | awk '{print $2;}'`
echo "The root file system (/) has a size of $ROOT_FS_SIZE"
exit 0
SCRIPT
# Fail if the vagrant-disksize plugin is not installed
unless Vagrant.has_plugin?("vagrant-disksize")
raise 'vagrant-disksize is not installed!'
end
Vagrant.configure("2") do |config|
config.disksize.size = "150GB"
config.vm.provision "shell", inline: $script
end
Наряду со следующим небольшим фрагментом, добавленным в мой
kitchen.yml
:
vagrantfiles:
- Vagrantfile
provision: True
Поместите это прямо под:
driver:
name: vagrant
Замените значение скрипта на то, что вы хотите... это использовалось для расширения файловой системы образа виртуальной коробки Ubuntu 20.04.