我是第一次设置 Chef 服务器。为了进行测试,我创建了一个 Chef 的 Docker 实例 (https://hub.docker.com/r/cbuisson/chef-server/),并且成功运行。我可以登录,我可以从我的浏览器访问服务器。
但是,我正在尝试在这个容器上使用一些“刀”命令,但到目前为止还不能。
MacBook-Pro:chef user1$ knife node list --config ./.chef/config.rb
ERROR: CONFIGURATION ERROR:127.0.0.1 is an invalid chef_server_url. The URL must start with http://, https://, or chefzero://.
MacBook-Pro:chef user1$ cat ./.chef/config.rb
chef_server_url 'https://127.0.0.1/'
MacBook-Pro:chef user1$
将配置文件中的 URL 更改为 127.0.0.1 以外的任何内容仍然会出现此错误 - 据我所知,--config 选项无法按照文档中的描述工作,除非我严重误解了某些内容。我一直无法找到它正在读取的配置文件,但很明显它不是我用 --config 标志指定的配置文件。
更多故障排除:
MacBook-Pro:cookbooks$ echo $KNIFE_HOME
/Users/PERSON/.chef/config.rb
MacBook-Pro:cookbooks$ cat $_
chef_server_url 'https://localhost/organizations/COMPANY'
cookbook_email '[email protected]'
MacBook-Pro:cookbooks $ knife supermarket download hostsfile --config $KNIFE_HOME
ERROR: CONFIGURATION ERROR:127.0.0.1 is an invalid chef_server_url. The URL must start with http://, https://, or chefzero://.
MacBook-Pro:cookbooks$ knife -VV
ERROR: You need to pass a sub-command (e.g., knife SUB-COMMAND)
Usage: knife sub-command (options)
-s, --server-url URL Chef Infra Server URL.
[truncated]
您没有指定如何使用 chef 可执行文件 - 是通过 chefdk 还是通过 chef rubygem.
我最喜欢的是使用 chef rubygem,如果这个概念对你来说是新的,请参阅this
回到你的问题,为了确保你的 knife 配置文件 (
./.chef/config.rb
) 正在被 chef 可执行文件读取,你可以在配置文件中放置一个小的探测 ruby 代码,一旦文件被读取就会输出。将如下内容放入您的刀具配置中:
# .chef/config.rb
puts 'my knife configuration'
现在再次执行 knife 命令并检查
my knife configuration
输出。如果不存在,请尝试在捆绑器上下文中重复它,因为它可能会解决您的痛苦。
我按照下面的说明来确定正在使用哪个配置。
knife -VV
上面的命令告诉我正在使用 C:/opscode/chef-workstation/bin/knife
我去了那个特定的位置并添加了看跌期权来检查它。 我通过执行 knife cookbook upload 验证了它
现在进一步深入了解这个错误来自哪里
C:\opscode\chef-workstation\embedded\lib\ruby\gems\3.0.0\gems\chef-config-17.9.26\lib\chef-config\config.rb
搜索方法
def self.is_valid_url?(uri)
并修改了行 来自
url = uri.to_s.strip
到
url = 'https://api.chef.io/organizations/org1'.to_s.strip
哪个神奇。
我认为问题出在“”和'' 保留 "" 不是评估,您可以通过打印 url
来验证现在更改此刀具命令后工作正常。