Chef - 如何在本地运行食谱

Posted

技术标签:

【中文标题】Chef - 如何在本地运行食谱【英文标题】:Chef - How to run a cookbook locally 【发布时间】:2016-05-25 06:35:30 【问题描述】:

我刚刚开始使用 Chef,并且已经浏览了他们网站上的教程,但是一切似乎都假设您正在为部署配置 Chef 服务器等

我目前正在 AWS opsworks 上设置站点,因此我想使用 Chef 进行配置和安装依赖项。因此,我相信我只是为我的食谱提供了一条路径。现在,在我开始使用 Opsworks 之前,我试图在 ubuntu VM 上创建我的食谱并测试它是否正确安装了所有东西。

我知道对于单个脚本,我可以使用chef-client file.rb 命令来运行它,但是如何以类似的方式在本地计算机上运行说明书呢?我试过了

chef-client chef-repo 但即使使用基本的“motd”示例,也会出现此错误

我尝试搜索示例,但正如我所说我是 Chef 的新手,所以我不确定我正在搜索的术语是否正确。

这甚至是使用 Chef 为 Opsworks 开发的正确方法吗?

谢谢

【问题讨论】:

这是命令还是新依赖?我确实想在本地构建我的食谱以实际运行它,而不仅仅是测试。 我同意这一点。 Test-kitchen 允许您非常轻松地在本地构建、运行和测试您的食谱。理想情况下,您会以测试优先的方法编写您的食谱,但这不是使用它的要求。看看kitchen.ci 由于 Amazon 的自定义运行时数据系统,Test Kitchen 不是 OpsWorks 用户的直接选择。 【参考方案1】:

OpsWorks 是 Amazon Web Services 的托管产品,没有本地开发环境。您必须创建一个 EC2 实例并将其用于测试等。不幸的是,亚马逊拒绝了大部分 Chef 生态系统工具,因此虽然 OpsWorks 由 Chef 提供支持,但它也是一个非常不同的野兽。

对于 OpsWorks 之外的普通 Chef,您可以使用 Test Kitchen 来处理此类事情,它处理使用 Vagrant 或其他系统(docker、ec2 等)创建测试 VM、安装 Chef、运行您的食谱以及然后运行一些测试。

【讨论】:

我知道 opsworks 没有这样的本地开发环境,但我只是在本地运行我的食谱,以确保它至少安装/配置了我希望的那样。实际上,我已经设法使用以食谱名称作为唯一参数的运行列表来完成这项工作。虽然它似乎只使用默认配方,而不是任何包含的配方 如果您的说明书使用了 OpsWorks 填写的任何数据包,您实际上无法在 OpsWorks 之外对其进行测试,除非您伪造了这些数据。【参考方案2】:

检查:How are people testing opsworks cookbooks?

亚马逊文档说:

在本地打包 Cookbook 依赖项

您可以使用 Berkshelf 在本地打包您的食谱依赖项, 将包上传到 Amazon S3,并修改您的堆栈以使用 在 Amazon S3 上打包作为食谱源。交付给亚马逊的内容 S3 存储桶可能包含客户内容。有关更多信息 删除敏感数据,请参阅如何清空 S3 存储桶?或我该怎么做 删除 S3 存储桶?

以下演练介绍了如何预先打包您的食谱 并将它们的依赖项转换为 .zip 文件,然后将 .zip 文件用作 AWS OpsWorks Stacks 中 Linux 实例的说明书来源。这 第一个演练描述了如何打包一本食谱。第二 演练描述了如何打包多个说明书。

开始之前,请安装 Chef Development Kit(也称为 Chef DK),这是由 Chef 社区构建的各种工具。你 将需要它来使用 chef 命令行工具。

https://docs.aws.amazon.com/opsworks/latest/userguide/best-practices-packaging-cookbooks-locally.html

【讨论】:

以上是关于Chef - 如何在本地运行食谱的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Chef 中自定义 tomcat 食谱

如何在 Chef 食谱中使用自定义 JSON 属性

如何从 Chef 食谱中的库访问当前节点?

Chef - 如何重新启动 VM 并继续执行操作

java 食谱可以用来安装oracle java的本地副本吗?

无法在 AWS Opsworks 上使用 Chef 12 查找 Chef 社区食谱