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

我有一个厨师食谱(为apache2)。 它无法在一个节点上工作。 所以我试图调整它,并更新它,但节点似乎并没有下载新版本。 我已经能够从knife upload .将所有东西上传到我的本地机器knife upload . ,成功,并打印出来,它上传了我改变的apache2食谱。

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

如何让节点上的厨师客户端使用apache2食谱的新的更新版本? 我是否需要碰到食谱中的版本号(我还没有这样做)?

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) 

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

有几件事我能想到,可能会帮助你。

  1. 确认您正在上传的食谱版本是最新的版本

    食谱版本的一个常见问题是,您可能会在本地修改食谱版本1.0.0并上传,但是厨师服务器已经上传了食谱版本1.0.1。 在这种情况下,厨师客户端通常会检索最新版本(除非另有说明),并且您的更改永远不会同步到本地caching。

    您可以通过以下方式在厨师服务器上看到所有当前版本的食谱: knife cookbook show apache2

    一个解决scheme就是你提到的 – 增加你的版本号,超出厨师服务器上的版本,比如1.0.2和上传。

    另一种方法是从厨师服务器上删除任何其他的apache2食谱,并重新上传你想要的。 这不需要任何版本号更新,最终的结果是厨师服务器将有一个单一的apache2食谱。

  2. validation您的更改确实将其发送给Chef Server

    使用knife cookbook show apache2 <cookbook version> recipes default.rbreplace版本,path和文件名 – 例如,如果你想查看一个名为foo.erb的模板: knife cookbook show apache2 0.1.0 templates foo.erb

    该命令将向Chef Server请求文件并在terminal中显示输出。 这是一个简单的方法来确定您所做的更改是通过knife cookbook upload

除此之外,如果没有帮助,添加knife版, chef-server版本, chef-client版本以及来自knife cookbook upload apache2 -VV的debugging日志的knife cookbook upload apache2 -VV将有助于进一步debugging。

首先在服务器上debugging食谱的所有版本,然后检查客户端正在下载哪个版本的食谱。 如果它是旧的,只需检查服务器是否有更新的版本。 如果是的话,请去厨师服务器用户界面并检查env。 你可能已经build立了一个指定食谱约束的环境。 请更新那里的版本,它会再次开始工作。

造成这种情况的另一个原因可能是厨师服务器上并不存在所有食谱的依赖关系。 我刚刚遇到了这个,我的食谱的新版本出现在knife cookbooks list但我的客户没有使用新版本。 经过一些debugging,我发现Berkshelf,也没有刀上传我的食谱的新的依赖。 我上传后,客户端开始使用新版本。