Chef infra 删除名称中有换行符的客户端

Chef infra 删除名称中有换行符的客户端,chef-infra,knife,Chef Infra,Knife,好的,这是因为我试图让自动缩放的节点向Chef自我注册。我的client.rb文件中有以下内容: node_name "some_prefix-#{`hostname`}" 其想法是,每个节点都有相同的前缀,但有一个基于主机名的后缀。遗憾的是,hostname返回一个字符串,该字符串末尾有一个\n。Chef很高兴让我创建这个客户机,但它实际上无法以任何方式访问它 knife client show some_prefix-myHostname knife client show "some_p

好的,这是因为我试图让自动缩放的节点向Chef自我注册。我的
client.rb文件中有以下内容:

node_name "some_prefix-#{`hostname`}"
其想法是,每个节点都有相同的前缀,但有一个基于主机名的后缀。遗憾的是,
hostname
返回一个字符串,该字符串末尾有一个
\n
。Chef很高兴让我创建这个客户机,但它实际上无法以任何方式访问它

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模板,但我无法删除在名称中使用换行符创建的节点。我尝试过使用刀子、webui,甚至在irb中手动使用Chef::REST库,但所有的结果都是404

有什么想法吗

编辑: 我也尝试过
批量删除
,但也失败了。REST库似乎会在尝试发送请求之前清理url并删除换行符。

这是chef服务器中已知的一个问题。我无法验证它-在我当前的服务器版本(12)上,会触发一个错误:

Chef::Exceptions::ValidationFailed: Option name's value test\n does not match regular expression /^[\-[:alnum:]_\.]+$/
但是您可以使用手动恢复,如上面错误报告中所述(另一种方式):

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")
您可以尝试使用它直接向Chef服务器API发送请求

knife raw /nodes/<node-name>
knife raw delete -m /nodes/<node-name>
刀原始/节点/
刀原始删除-m/节点/

这在一个角色名无效的类似问题上对我起了作用。

我的想法:
刀子客户端显示'some_prefix-myHostname\n'
(单引号以避免在库中插入)。或者尝试双重转义,如
刀子客户端显示'some\u prefix-myHostname\\n'
?您可以键入其他内容吗?例如,我相信,\s$将匹配以任何类型的空格结尾的所有内容。你有没有客户希望保留空白?没有,这只是一个意外,我似乎无法摆脱。但再多的匹配也无济于事。代码将获取列表,遍历以检查是否匹配,然后尝试发送REST请求以删除每个节点。匹配全部发生在客户端,实际删除的最终请求失败。我怀疑这是因为URI解析器将删除换行符。不久前我也遇到了同样的问题。忘记删除主机名
。在这种情况下,唯一可行的方法是自己登录数据库并修复客户端。我不想这样做,对我来说重新安装Chef服务器更容易,因为我在存储库中有整个配置(包括节点和客户端)。谢谢你的想法。不幸的是,另一种方法是行不通的。rest端点不能包含'/n',只能包含json数据:(哼哼..这太可悲了...(@TejayCardon-我唯一剩下的想法是:做
刀下载
备份所有你想要的东西,做
厨师服务器ctl清理
删除所有数据(这一步需要
之后重新配置
,我到目前为止还没有使用过),然后使用
刀上载将您的内容重新联机。我使用这些步骤从托管厨师移到社区版。是的,这可能会做到。我甚至尝试手动生成URI并将其传递到UI,但随后服务器抛出错误。我想我必须进入数据库来修复它。但我们可能一两个月后,我将为Chef 12提供一个干净的服务器,所以我可能不想麻烦了。很抱歉,我没有帮上忙,并且在调整数据库时祝你好运。