用刀上传所有内容

假设你有一个标准的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。 例如:

    1. knife role from file roles/*.rb
    2. 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 . 它上传一切。