厨师客户端未从服务器更新食谱


9

我有一本厨师食谱(适用于apache2)。它无法在一个节点上工作。因此,我试图对其进行调整和更新,但是该节点似乎并未下载新版本。我已经能够使用将所有内容从本地计算机上载到Chef服务器knife upload .,成功了,并打印出它已上载我更改的apache2菜谱位。

当我chef-client在节点上手动运行(以root用户身份)时,可以看到它正在与服务器联系,获取运行列表等。但是其中的配方文件/var/cache/chef/cookbooks/apache2是旧文件。配方失败(因为它没有我所做的更改)。

如何使节点上的Chef客户端使用apache2 Cookbook的新更新版本?我是否需要在食谱中添加版本号(我一直没有这样做)?

chef-client -l debug 输出:

[2015-01-30T10:51:31+01:00] DEBUG: Synchronizing cookbook apache2
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_ldap.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_xsendfile.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_auth_openid.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_setenvif.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_python.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_authz_host.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_proxy_ajp.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_expires.rb, as the cache is up to date.
(lots of this for all files)

我是厨师的新手,所以我可能会犯一个初学者的错误。


转到Chef-server Web界面,并检查食谱中是否有更改。
Draco Ater

1
确保你跑了knife cookbook upload <cookbook_name>。如果仍不能解决问题,请尝试修改版本,然后运行knife cookbook list <cookbook_name>以确保您确实正确上传了该版本。或者,运行knife cookbook download(在另一个目录中)拉下服务器认为正确的代码。
Tejay Cardon

Answers:


6

我认为有几件事可能会帮助您。

  1. 确认您要上传的食谱版本为最新版本

    Cookbook版本控制的一个常见问题是您可能在本地修改了Cookbook版本1.0.0并上载,但是Chef Server已将Cookbook版本1.0.1上载到其中。在这种情况下,Chef Client通常会检索最新版本(除非另行通知),并且您的更改将永远不会同步到本地缓存。

    您可以通过以下方式在Chef Server上查看食谱的所有当前版本: knife cookbook show apache2

    一种解决方案是您提到的解决方案-将版本号增加到Chef Server之上的版本号(即1.0.2)并上传。

    另一种方法是从Chef Server中删除任何其他apache2食谱,然后重新上传所需的食谱。这不需要任何版本号更新,最终结果是Chef Server将只有一个apache2食谱。

  2. 验证您所做的更改确实已在Chef Server中进行

    使用knife cookbook show apache2 <cookbook version> recipes default.rb 替换版本,路径和文件名-例如,如果要查看名为foo.erb的模板:knife cookbook show apache2 0.1.0 templates foo.erb

    此命令将向Chef服务器请求文件,并在终端中显示输出。这是确定您所做的更改是通过上载的一种简单方法knife cookbook upload

除此之外,如果仍然不能解决问题,则添加knife版本,chef-server版本,chef-client版本以及调试日志的详细信息knife cookbook upload apache2 -VV将有助于进一步调试。


1
非常感谢您提供此答案...它使我看到我们的生产环境中存在食谱约束,而不是在environment / production.rb中,而是由berkshelf设置!我什至不知道它可以做到。无论如何,在重新加载我们的production.rb环境后,新的厨师运行了我们最新的应用程序食谱。
科林·科廷

2

首先在服务器上调试所有版本的食谱,然后检查客户端正在下载哪个版本的食谱。如果旧的,只需检查服务器是否具有更新的版本。如果也是,请转到厨师服务器用户界面并检查环境。您可能已经设置了一个环境,在其中指定了食谱约束。请在那里更新版本,它将重新开始工作。


1

造成此问题的另一个原因可能是,厨师服务器上并不存在所有食谱的依赖项。我刚刚遇到了这个问题,并且正在显示我的菜谱的新版本,knife cookbooks list但是我的客户没有使用新版本。经过一番调试后,我发现Berkshelf还是knife都没有为我的菜谱上载新的依赖项。我上载之后,客户端开始使用较新的版本。


确保您已经运行了刀食谱上传<cookbook_name>
Net Runner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.