好的,所以这开始是因为我试图让自动缩放的节点自己注册到Chef。我在client.rb
文件中有以下内容:
node_name "some_prefix-#{`hostname`}"
这个想法是每个节点都有相同的前缀,但基于主机名的后缀。遗憾的是,hostname
返回一个字符串,其末尾带有\n
。厨师高兴地让我创建这个客户端,但它无法以任何方式实际访问它。
knife client show some_prefix-myHostname
knife client show "some_prefix-myHostname\n"
knife client show "some_prefix-myHostname%0A"
这三个结果都是404
knife client list
会显示客户端,并在其后显示空白换行符。
我修复了我的client.rb模板,但是我无法摆脱我用名字中的换行符创建的节点。我尝试过使用knife,webui,甚至手动使用irb中的Chef :: REST库,但所有内容都会产生404.
有什么想法吗?
编辑:
我也尝试了knife client bulk delete
,但也失败了。在尝试发送请求之前,REST库似乎清理了url并删除了换行符。
答案 0 :(得分:1)
您可以尝试使用knife raw,它可以将请求直接发送到Chef Server API
knife raw /nodes/<node-name>
knife raw delete -m /nodes/<node-name>
这对我的角色名称无效的类似问题很有帮助。
答案 1 :(得分:0)
这是chef-server中已知的bug。我无法验证它 - 在我当前的服务器版本(12)上触发了错误:
Chef::Exceptions::ValidationFailed: Option name's value test\n does not match regular expression /^[\-[:alnum:]_\.]+$/
但您可以使用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"]
我可以自由地重新排序语句并将“foobar”替换为“some_prefix-myHostname”。
我想也是,使用API应该让你手动删除客户端:
api.delete("/clients/some_prefix-myHostname\n")