我的 knife.rb 内容如下:
log_level :info
log_location STDOUT
node_name 'user'
client_key '/home/user/.chef/user.pem'
validation_client_name 'chef-validator'
validation_key '~/.chef/validation.pem'
chef_server_url 'url:4000'
cache_type 'BasicFile'
cache_options( :path => '/home/user/.chef/checksums' )
cookbook_path [ './', './site-cookbooks' ]
我可以很好地完成“刀具食谱列表”和所有那些有趣的东西,但是当我去编辑时,我得到:
# knife node edit test.domain.com -c knife.rb -e vim
ERROR: ArgumentError: Attribute chef_environment is not defined!
我已经设置了一个环境:
# knife environment list
_default
production
而我尝试编辑的节点位于该环境中。我尝试使用 -E 参数,以及向我的 knife.rb 添加“环境”和“chef_environment”参数(文档对于我应该使用哪个有点含糊),但无济于事。有人对此有什么建议吗?
答案1
您在使用 Knife 的本地系统上安装了哪个版本的 Chef?Chef 服务器上运行的是什么版本?(我假设使用 'url:4000' chef_server_url 您正在运行自己的服务器,而不是 Opscode 的服务器)。
您可以使用‘-VV’从 Knife 中获取更多信息。
knife node edit test.example.com -c knife.rb -e vim -VV
knife.rb 中默认使用的环境设置是environment
。在节点本身上,chef_environment
是 Node 对象的方法,它返回节点环境的值,而不是属性。
另外,我建议将 knife.rb 放在.chef
Chef 存储库的目录中,或者放在主目录中。Knife 将通过查找自动检测配置.chef/knife.rb
,类似于 git。
Knife 也将使用 shell 环境变量中指定的编辑器 EDITOR。
export EDITOR=`which vim`
将让它使用 vim。