【发布时间】:2016-08-02 00:05:36
【问题描述】:
我正在使用 vagrant 驱动程序和 virtualbox 提供程序来测试 serverspec。 在执行厨房收敛之前,我需要执行一些与应用程序相关的脚本。
我尝试过使用 vagrant 配置,但我试图将应用程序配置与 vagrant 配置分开。
有什么方法可以将一些命令传递给厨房中的 .kitchen.yml 文件?在聚合说明书之前执行一些命令。
【问题讨论】:
标签: chef-infra
我正在使用 vagrant 驱动程序和 virtualbox 提供程序来测试 serverspec。 在执行厨房收敛之前,我需要执行一些与应用程序相关的脚本。
我尝试过使用 vagrant 配置,但我试图将应用程序配置与 vagrant 配置分开。
有什么方法可以将一些命令传递给厨房中的 .kitchen.yml 文件?在聚合说明书之前执行一些命令。
【问题讨论】:
标签: chef-infra
以下 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
连同以下小sn-p添加到我的kitchen.yml:
vagrantfiles:
- Vagrantfile
provision: True
直接放在下面:
driver:
name: vagrant
用你想要的任何东西替换脚本值...这个用于扩展 Ubuntu 20.04 virtualbox 映像的文件系统。
【讨论】:
我喜欢这两个答案,但它们不适合我的情况和你的情况: * 第一次弃用 * 第二不是你需要的,但非常好
不过,我的解决方案可能会对您有所帮助。
因为这是 - 我现在猜 - 仅用于测试,然后我建议您创建一个新的食谱(例如 test_kitchen_support),您在运行列表中运行第一个。你可以在那里安装所有你需要的东西。
这种方式我发现它非常简单,它只是在测试,所以生产将只使用说明书。
我的问题是我厌倦了创建自己的 vagrant box,而且我发现大多数都不适合我(例如,它们有一些硬编码,或者它们是非常小的操作系统版本,缺少一些默认包)
我希望这对某人有所帮助。
【讨论】:
@coderanger 的建议可能是最好的方法。
或者,您可以尝试以下方法之一:
如果应用程序脚本始终相同,您可以考虑在脚本已经执行的情况下创建自己的自定义 Vagrant 框。
.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 的默认值)
【讨论】:
chef_omnibus_ulr 已弃用,将被删除
如果您尝试在主机系统上运行该命令,则有pre_create_command。如果您的意思是在来宾上运行某些东西,则不支持。您最好制作一个测试夹具配方或食谱并将其添加到来宾节点的运行列表中。
【讨论】: