[9]DevOps 自动化运维工具Chef---如何解决在Window平台上执行一些knife子命令时所报的错误, knife search, knife status?

来源:互联网 发布:北京工业软件开发 编辑:程序博客网 时间:2024/06/01 10:46
有的时候,我们需要window平台上执行一些knife子命令,比如,knife status --run-list 查看运行的run list的状态,knife search '*:*' -i 搜索所有的子节点
这个时候如果运行的话,就会出现下面的错误提示,Cannot sign the request without a client name, check that :node_name is assigned.

那么为什么会出现这个错误?如何解决呢?且听笔者缓缓道来。
首先,请注意当前笔者进入的c:\chefdemo目录下面是一个空目录。而上面的命令需要和Chef服务器通信。那么问题来了,既然要和服务器通信,
就需要知道服务器的URL,已经服务器的证书,以及Chef服务器用户的私有证书(私有证书如何生成,请参考笔者的另一篇文章http://blog.csdn.net/chancein007/article/details/52551722),默认情况下,其会寻找当前的一个目录下是否有一个knife.rb的配置文件。如果没有则会报上面的Warning: No knife configuration file found. 解决的办法是在当前的目录下添加一个knife.rb的文件,其基本的配置如下:
# See https://docs.getchef.com/config_rb_knife.html for more information on knife configuration optionscurrent_dir = File.dirname(__FILE__)log_level                :debuglog_location             STDOUTnode_name                "rodney"client_key               "#{current_dir}/rodney.pem"chef_server_url          "https://chef-master-rodney.example.com/organizations/example"#cookbook_path            ["#{current_dir}/../cookbooks"]
在上面的配置文件中我们指定了登陆到https://chef-master-rodney.example.com/organizations/example网站的用户的私有证书和用户名,也就是node_name, "rodney". 当然还有chef_server_url. 现在当前的目录下面有2个文件:

那么现在难道就把问题解决了吗? 让我们再次运行,

从上面的错误,我们看出,其报了一个其他的错误,根据提示,我需要用knife check ssl命令先确认一下
服务器的证书是否存在。要解决这个问题,请在当前的目录(c:\chefdemo)执行knife ssl fetch命令.

我们发现,其会创建一个新的目录,C:\chefdemo\trusted_certs,并会把https://chef-master-rodney.example.com/organizations/example这个网站上的公用证书下载到这个目录,chef-master-rodney_example_com.crt
这次我们再次执行,knife ssl check,就不会报错了。

然后再次执行,knife status --run-list和knife search ‘*:*’ -i, 恭喜你,执行成功了!!!!

1 0