【发布时间】:2015-10-23 00:38:20
【问题描述】:
我正在运行 knife client edit 命令来编辑 Chef 中的节点以设置管理员权限。我想以编程方式执行此操作,因此我的目的是将此命令添加到 shell 脚本中,如果我可以使其工作的话。
节点之前的状态是(UPDATE):
$ knife client show -Fj my_node
{
"name": "my_node",
"public_key": "-----BEGIN PUBLIC KEY-----\n...key...\n-----END PUBLIC KEY-----\n",
"validator": false,
"admin": false,
"json_class": "Chef::ApiClient",
"chef_type": "client"
}
运行命令时,它说对象未更改,在使用knife client 检查节点后,我可以
验证是否仍将 admin 属性设置为 false:
$ knife client edit -d my_node < my_node.json
Object unchanged, not saving
my_node.json文件的内容是:
{
"name": "my_node",
"public_key": "-----BEGIN PUBLIC KEY-----\n...key...\n-----END PUBLIC KEY-----\n",
"validator": false,
"admin": true,
"json_class": "Chef::ApiClient",
"chef_type": "client"
}
我不知道如何使这件作品发挥作用。 对此的任何帮助将不胜感激。
注意: $刀--版本 厨师:12.2.1
更新:我在这个非常相似的thread 中找不到可接受的答案。
更新 2: 我也尝试了这些其他方法,但完全没有运气(使用相同的 json 文件):
$ cat my_node.json | knife client edit my_node -d
Object unchanged, not saving
$ knife client edit my_node -d < my_node.json
Object unchanged, not saving
【问题讨论】:
-
我从手册页注意到的一件事是您的示例中的参数顺序不同。如果您改为尝试
knife client edit my_node -d < my_node.json会怎样?此外,我不清楚用<提供数据是这样做的方法......你试过cat my_node.json | knife client edit my_node -d吗? -
另外,看起来您实际上并没有在编辑任何内容。您正在批发更换;也许
knife node from file my_node.json会更好? -
运行那些你告诉我的命令我得到完全相同的输出:对象不变,不保存
-
我现在只是想知道输入文件是否应该是 JSON 文件,手册页没有说明格式。
-
输入文件的格式应与
knife node show -Fjson <node name>的输出相同。您确定该文件与服务器上已有的文件不同吗?
标签: bash shell chef-infra knife