【问题标题】:Custom Recipe on a Cookbook食谱上的自定义食谱
【发布时间】:2016-02-04 16:57:12
【问题描述】:

我正在使用 Chef 的软件包开发自定义食谱。

我在 recipes 文件夹下创建了一个名为 apache.rb 的文件。

然后我通过 berks 上传了食谱,并使用 recipe["packages::apache"] 在一个节点上编辑了食谱列表。

当我运行 chef-client 时,出现以下错误:

could not find recipe apache for cookbook packages

这是位于 recipes/ 文件夹下的 apache.rb:

    package 'Install Apache' do
    case node[:platform]
    when 'redhat', 'centos'
      package_name 'httpd'
      version '2.2.0'
    when 'ubuntu', 'debian'
      package_name 'apache2'
    end
    action :install
    end

【问题讨论】:

  • 真的上传成功了吗?
  • 是的。 berks 上传没有错误。
  • 伯克斯是在拉你的packages 食谱还是超市? (我想这有什么问题,你应该避免出现在超市里的名字。这里我们在我们的食谱前面加上公司名称)。
  • 我的意思是不要修改社区食谱,做一个包含社区食谱的包装食谱,并在需要时覆盖它的属性并重写资源,添加你自己的食谱,包括社区食谱和做无关的事情
  • @Tensibai 我想这是最好的解决方案。你在网上有一些关于包装食谱的例子吗?

标签: linux chef-infra


【解决方案1】:

你能试试knife upload . --force,以确保厨师服务器上的食谱真的是最新的吗?

可能已经上传了较旧版本的食谱(即在您创建 apache 配方之前),并且因为您将 metadata.rb 中的版本号保持不变,所以刀(或笨蛋,取决于您使用什么对于上传)可能会跳过上传,认为没有任何改变。

更新:

需要注意的是,只有当您真的确定要更新 Chef 服务器上的 现有 版本(例如,如果您是仍在开发中)。

如@Tensibai 在下面的 cmets 中指出的那样,在食谱的元数据上添加版本号将是解决生产环境此问题的一种更好的方法。

【讨论】:

  • 最好推荐升级版本而不是使用武力......即使它可以解决 OP 的问题(对于 11.1 IIRC 之前的 Chef-servers 开源),但还是提倡一种不好的做法。
  • @Tensibai 您的意思是更改 metadata.rb 中的版本吗?如果它解决了问题,这是我第一次上传。我会检查你,让你知道。
  • @Tensibai 会同意,如果这不是在开发中明确...事实上,我认为颠簸版本对于开发来说是一种糟糕的做法...:)
  • 我会反对,因为上传的任何内容都不应该再出现在 dev 中。零厨师的测试厨房带来了足够多的东西,不会弄乱服务器。刀或伯克永远不会跳过。上传由服务器端的 sha256sum 测试,以了解文件是否必须更新。这里的侧面案例可能是一个旧客户端,它基于对 metadata.rb 上次更改的新食谱的拉取。如果确实需要,清除目标节点上的缓存就足够了,但这里我们正在尝试使用版本中的占卜:/
  • @Tensibai 如果你说厨师服务器应该只用于生产,那么我认为你错过了你仍在学习它是如何工作的时间段,而你'正在带出生产状态; ) 无论如何,我已经相应地更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 2014-11-06
  • 2018-12-01
  • 2021-11-01
  • 2019-01-29
  • 1970-01-01
  • 2015-11-24
  • 2015-05-01
相关资源
最近更新 更多