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

Tej*_*don 5 chef-infra knife

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

Flo*_*sch 0

这是厨师服务器中的一个已知错误。我无法验证它 - 在我当前的服务器版本(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)