如何在厨房融入厨师之前运行shell命令?

时间:2016-04-11 17:25:22

标签: chef

我正在使用vagrant驱动程序和virtualbox提供程序来测试serverspec。 我需要在执行kitchen converge之前执行一些与应用程序相关的脚本。

我尝试过使用vagrant配置,但我试图将应用程序配置与vagrant配置分开。

有什么办法可以将一些命令传递给厨房里的.kitchen.yml文件吗?在融合烹饪书之前执行一些命令。

3 个答案:

答案 0 :(得分:1)

如果您尝试在主机系统上运行该命令,则pre_create_command。如果您的意思是在客人身上运行某些内容,则表示不支持。您最好制作一个测试夹具配方或食谱,并将其添加到访客节点的运行列表中。

答案 1 :(得分:0)

@ coderanger的建议可能是最好的方法。

或者,您可以尝试以下方法之一:

自定义Vagrant框

如果应用程序脚本始终相同,则可以考虑在脚本已执行的情况下创建自己的自定义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.shchef_omnibus_url

的默认值

答案 2 :(得分:0)

我都喜欢这两个答案,但是它们都不适合我和你的情况: * 1st已弃用 *第二个不是您需要的东西,但是非常好

但是,我的解决方案可能会为您提供帮助。

这是-我现在猜想-仅用于测试,然后建议您创建一个新的食谱(例如test_kitchen_support),在运行列表中运行第一个。您可以在那里安装所有需要的内容。

这样,我发现它非常简洁,并且只是测试,因此生产将仅使用食谱。

我的问题是我厌倦了创建自己的流浪者盒子,发现大部分都不适合我(例如,它们有一些硬编码,或者它们是非常小的OS版本,缺少一些默认软件包)

我希望这对某人有帮助。