假设你有一个标准的Chef仓库,目录如下:
cookbooks data_bags environments roles
有办法一次上传吗? 否则,你必须这样做:
knife cookbook upload -a knife data bag from file data_bags/*.json knife environment from file environments/*.rb knife role from file roles/*.json
也许有第三方工具来做这种事情?
确保你正在使用ruby1.9,然后安装刀的要领
$ gem install knife-essentials
然后将以下内容添加到〜/ .chef / knife.rb
repo_mode 'everything' versioned_cookbooks true chef_repo_path 'PATH/TO/chef-repo'
然后你可以下载/上传你的整个服务器,或者只是其中的一部分。 下载会把大量的.json文件放在你的厨师库里,对我find的备份很有帮助。
$ knife download / $ knife upload / $ knife upload /clients
另外请注意,如果您将angular色存储为ruby文件(例如: roles/*.rb ),则需要将其转换为json。 然后你可以重新从厨师服务器下载他们作为JSON。 例如:
knife role from file roles/*.rb knife download roles/ 此方法也用于从厨师服务器10升级到11 。
你可以写一个简单的bash脚本来做这样的事情:
#!/bin/sh for file in `ls cookbooks`;do [ -d $file ] && knife cookbook upload cookbooks/$file done for file in `ls data_bags | grep \.json$`;do knife data bag from file data_bags/$file done for file in `ls environments | grep \.rb$`;do knife environment from file environments/$file done for file in `ls roles | grep \.json$`;do knife role from file roles/$file done
然后使用./script.sh调用它,这将自动执行所有操作。
我写了一个名为sync的小刀插件,下面介绍的所有这些都完成了这个工作:
https://github.com/cdoughty77/knife-sync-all
目前文档说你应该简单地knife upload / 。 文档中还有其他的可能性。
从厨师存储库。
如果你执行knife upload . 它上传一切。