次のようなディレクトリを持つ標準の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
おそらく、このようなことを行うサードパーティのツールはありますか?
Ruby 1.9を使用していることを確認してから、knife-essentialsをインストールしてください
$ gem install knife-essentials
次に、以下を〜/ .chef /knife.rbに追加します
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path 'PATH/TO/chef-repo'
次に、サーバー全体またはその一部のみをダウンロード/アップロードできます。ダウンロードすると、シェフリポジトリに多くの.jsonファイルが配置され、私が見つけたバックアップに適しています。
$ knife download /
$ knife upload /
$ knife upload /clients
また、ロールがRubyファイルとして保存されている場合(例:roles/*.rb
)、それらをjsonに変換する必要があります。その後、jsonとしてchefサーバーから再ダウンロードできます。例えば:
knife role from file roles/*.rb
knife download roles/
このメソッドは、 chefサーバー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 /
。ドキュメントには他の可能性があります。
Chefリポジトリから。
knife upload .
を実行すると、すべてがアップロードされます。