Birden fazla projeyle çalışıyorum, bu yüzden cjc'nin çözümü benim için çalışmayacak. Ayrıca ortak vs özel yapılandırma sorunu da vardır (adresler şirket için ortaktır, ayrıca yapılandırmalarda biraz sihir vardır). Sonunda yerleştiğim şema biraz hack, ama kullanımı kolay bir şema.
Global yerine, ~/.chef
git-re'de saklanmayan chef-repo içinde '.chef' alt dizinini kullanıyorum .gitignore
. Ben de config/knife.rb
Git kontrol edilir ve paylaşılan yapılandırma içeren dosya dosyası var. Bu snippet ile başlar:
root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
conf = File.join(root_dir, ".chef", conf_name)
Kernel::load(conf) if File.exists? conf
end
Bu .chef/knife-local.rb
, özel yapılandırma içeren dosyaları yükler (temel sürümde OPSCODE_USER='username'
daha sonra kullanılan sabittir, ancak herhangi bir bıçak yapılandırmasını içerebilir) ve .chef/knife-secrets.rb
paylaşılan sırlar (AWS anahtarları vb.) İçerir.
Bunun altında, bu dosyalarda tanımlanan sabitleri kullanan düzenli bıçak yapılandırması vardır, örneğin:
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
Bu şekilde, şirket genelinde bıçak yapılandırmasının standartlaştırılmasını sağlarım, bu da bir wiki'de paylaşılan herhangi bir kod snippet'inin veya bıçak çağrısının herkes için çalışacağı anlamına gelir. Bıçağın içinde yeterince karışıklık ve büyü var - farklı konfigürasyonlar sadece daha da kötüleştirecekti. Ayrıca, herkes kullanıcının yapılandırdığı giriş bilgilerini kullanmak için bunun gibi küçük sihirli snippet'lerden yararlanırknife ssh
~/.ssh/config
Paylaşılan sırlar da var: şef sunucusunun doğrulama anahtarı, depolanan AWS anahtarları knife-secrets.rb
, EC2'nin SSH özel anahtarı, şifreli veri çantası anahtarları vb. Kesinlikle depoda veya aslında güvenli bir şekilde şifrelenmedikleri herhangi bir yerde saklanmalarını istemiyoruz. Bu nedenle, bu dosyaları .tar.gz
şirketteki herkese GPG ile şifrelenmiş ve Dropbox üzerinden paylaşılan bir dosya olarak dağıtıyoruz .
Tüm bunları yapılandırmak karmaşıklaşıyor ve takımdaki kişilerin gerçekten bu şeyi kullanmasını istiyorum, bu yüzden son öğe var: dizin rake init
oluşturan .chef
görev, config/knife.rb
orada semboller chef-secrets.tgz
, şifre çözme ve untar dosyası, kullanıcının özel Opscode Platform anahtarının orada olduğundan ve .chef/knife-local.rb
düzgün olduğundan emin olun yapılandırılmış, bıçak eklentilerini bağlar ve dizin ve içindeki dosyalar için uygun izinleri ayarlar. Bu görev, önceden başlatılmış depoda birçok kez çalıştırmanın güvenli olması için ayarlanır (ör. Sırları veya bıçak eklentilerini güncellemek için).
Yeni çalışanları eklemeyi veya sırları değiştirmeyi kolaylaştırmak için tüm sırları yeniden dolduran, tarball'ı herkese şifreleyen ve dropbox'a kopyalayan bir yardımcı görev de var.
Birden çok ortama ilişkin olarak: Chef, ortam adı verilen bir özelliğe sahiptir . Henüz kullanmadım, ama ihtiyacınız olanı yapmalı. Ayrıca, iki ayrı Barındırılan Şef organizasyonuna veya Şef sunucusuna sahip olarak üretim ortamını (üretim env ile herhangi bir şekilde herhangi bir anahtarı olan geliştiricilerin olmasını önlemek için) kesinlikle ayırabilirsiniz. Bu knife.rb snippet'i , şu anda kullanıma alınmış şubeye göre bıçağı farklı bir şekilde nasıl yapılandıracağınızı gösterir - bunu ortamın yanı sıra şef sunucusunun URL'sini ayarlamak için kullanabilirsiniz. Ayrıca , daha eksiksiz, iki organizasyonlu iş akışı sağlayan bıçak akışı adı verilen bıçak eklentisi de var .
.chef
Klasörü ortam değişkenlerini veya başka bir şeyi kullanacak şekilde ayarlayabilir misiniz ?