chef-infra - 如何解决同步食谱错误:?
问题描述
在我们的一个节点上运行 chef-client 时,我们在没有进一步消息Synchronizing Cookbooks:
的
情况下得到一个错误。Error Syncing Cookbooks:
我们可以做些什么来进一步诊断这个错误?
解决方案
您可以首先将-l debug
标志添加到您的chef-client
运行中。这会将调试级别日志写入/var/log/chef/client.log
例如:
[2019-02-22T19:16:16+00:00] DEBUG: HTTP 1.1 404 Not Found
由于这个 404 错误意味着在服务器上找不到文件,我们可以登录到 chef-server 并查看哪些文件不可用。在 chef-server 上运行chef-server-ctl tail
以跟踪所有正在运行的服务的日志。在您的客户端上再次运行chef-client
,您应该会在 chef-server 上收到更多消息。
以下是来自 nginx access.log 的示例:
==> /var/log/opscode/nginx/access.log <==
[22/Feb/2019:21:25:06 +0000] "GET /bookshelf/organization-c1573b41a76ea22b9eb7c36d939fcad4/checksum-bfacb2422a1078b91660f763f0842e8d HTTP/1.1" 404 "0.002" 173 "-" "Chef Client/12.19.36 (ruby-2.3.1-p112; ohai-8.23.0; x86_64-linux; +https://chef.io)" "127.0.0.1:4321" "404" "0.002" "12.19.36" "algorithm=sha1;version=1.1;" "dev" "2019-02-22T21:25:06Z" "" 1265
这让我们知道书架中的特定校验和丢失了。没有简单的方法可以将其与相应的说明书相关联,但您可以进行 psql 数据库查询,以确定导致问题的说明书。从 chef-server.rb 文件中获取您在 chef-server 上的 psql 凭据:cat /etc/opscode/chef-server.rb
使用 404 错误消息行中的校验和进行 psql 查询:
select name from cookbooks, cookbook_versions, cookbook_version_checksums
where cookbooks.id = cookbook_versions.cookbook_id and
cookbook_versions.id = cookbook_version_checksums.cookbook_version_id and
checksum = 'bfacb2422a1078b91660f763f0842e8d';
现在我们有了菜谱名称,我们可以增加菜谱版本号并将其重新上传到厨师服务器。然后,客户端能够找到新的食谱版本,并且 404 错误得到解决。
推荐阅读
- r - 根据代码和日期过滤数据
- java - 如何在 Spring 框架中实现服务器和客户端之间的快速通信?
- c# - 数据插入 Excel 文件
- javascript - 不能在three.js中播放透明webm?
- zurb-foundation - 切换菜单 - 动画高度
- php - 全新安装中未找到类“类‘表单’”
- sql - Qliksense 中的 SQL 逻辑
- javascript - async await 返回一个 Promise 而不是一个值
- shieldui - FieldType.Number 将编辑值限制为 100,任何超过 100 的值都会自动更改为 100
- python-2.7 - 无法为操作“Variable_4/Adam_1”分配设备