Как запустить команду оболочки до того, как кухня сойдет в шеф-повар?

Я использую 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.

Другие вопросы по тегам