好的,所以这开始是因为我试图让自动缩放的节点自己注册Chef.我的client.rb文件中有以下内容:
node_name "some_prefix-#{`hostname`}"
Run Code Online (Sandbox Code Playgroud)
我们的想法是每个节点都有相同的前缀,但基于主机名的后缀.可悲的是,hostname返回一个带有a的字符串\n.厨师高兴地让我创建这个客户端,但它无法以任何方式实际访问它.
knife client show some_prefix-myHostname
knife client show "some_prefix-myHostname\n"
knife client show "some_prefix-myHostname%0A"
Run Code Online (Sandbox Code Playgroud)
这三个结果都是404
knife client list
Run Code Online (Sandbox Code Playgroud)
会显示客户端,并在其后显示空白换行符.
我修复了我的client.rb模板,但我无法摆脱我用名字中的换行创建的节点.我尝试过使用knife,webui,甚至手动使用irb中的Chef :: REST库,但是所有内容都会产生404.
有任何想法吗?
编辑:我也试过,knife client bulk delete但也失败了.在尝试发送请求之前,REST库似乎清理了url并删除了换行符.
这是厨师服务器中的一个已知错误。我无法验证它 - 在我当前的服务器版本(12)上触发了一个错误:
Chef::Exceptions::ValidationFailed: Option name's value test\n does not match regular expression /^[\-[:alnum:]_\.]+$/
Run Code Online (Sandbox Code Playgroud)
但您也许可以使用Chef-API手动恢复此状态,如上面的错误报告中所述(相反):
chef > api.get("/clients").keys
=> ["acme-validator", "some_prefix-myHostname\n"]
chef > api.put("/clients/some_prefix-myHostname\n", name: "some_prefix-myHostname"); nil
=> nil
chef > api.get("/clients").keys
=> ["acme-validator", "some_prefix-myHostname"]
Run Code Online (Sandbox Code Playgroud)
我已经可以随意重新排序语句并将“foobar”替换为“some_prefix-myHostname”。
我想,使用 API 应该可以让您手动删除客户端:
api.delete("/clients/some_prefix-myHostname\n")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |