删除名称中带换行符的客户端

时间:2015-04-14 19:59:43

标签: chef knife

好的,所以这开始是因为我试图让自动缩放的节点自己注册到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并删除了换行符。

2 个答案:

答案 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")