Tôi làm việc với nhiều dự án, vì vậy giải pháp của cjc sẽ không hiệu quả với tôi. Ngoài ra còn có một vấn đề về cấu hình chung so với cấu hình tùy chỉnh (địa chỉ vv là chung cho công ty, cũng có một chút ma thuật trong cấu hình). Kế hoạch cuối cùng tôi đã giải quyết là một chút hack, nhưng nó là một tiện ích để sử dụng.
Thay vì toàn cầu ~/.chef
, tôi sử dụng thư mục con '.chef' trong đầu bếp-repo, không được lưu trữ trong git (nó được thêm vào .gitignore
). Tôi cũng có tập tin tập config/knife.rb
tin được kiểm tra vào Git và chứa cấu hình chia sẻ. Nó bắt đầu với đoạn trích này:
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
Điều này tải các tệp .chef/knife-local.rb
chứa cấu hình tùy chỉnh (trong phiên bản cơ bản, nó chỉ là OPSCODE_USER='username'
hằng số được sử dụng sau này, nhưng nó có thể chứa bất kỳ cấu hình dao nào) và .chef/knife-secrets.rb
chứa các bí mật chung (khóa AWS, v.v.).
Bên dưới đó, có cấu hình dao thông thường sử dụng các hằng số được xác định trong các tệp này, ví dụ:
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
Bằng cách này, tôi đạt được sự ổn định của cấu hình dao trên toàn công ty, điều này có nghĩa là bất kỳ đoạn mã hoặc lệnh gọi dao nào được chia sẻ trong wiki sẽ hoạt động cho tất cả mọi người. Có đủ sự nhầm lẫn và ma thuật trong chính con dao - các cấu hình khác nhau sẽ chỉ làm cho nó tồi tệ hơn. Ngoài ra, mọi người đều được hưởng lợi từ các đoạn ma thuật nhỏ, như đoạn này để knife ssh
sử dụng cấu hình đăng nhập trong người dùng~/.ssh/config
Ngoài ra còn có vấn đề về các bí mật được chia sẻ: khóa xác thực của máy chủ đầu bếp, khóa AWS được lưu trữ knife-secrets.rb
, khóa riêng SSH của EC2, khóa túi dữ liệu được mã hóa, v.v. Chúng tôi chắc chắn không muốn chúng được lưu trữ trong kho lưu trữ - hoặc, thực sự, bất cứ nơi nào chúng không được mã hóa an toàn. Vì vậy, chúng tôi phân phối các tệp đó dưới dạng .tar.gz
tệp, được mã hóa GPG cho mọi người trong công ty và được chia sẻ qua Dropbox.
Việc cấu hình tất cả điều này đang trở nên phức tạp và tôi muốn mọi người trong nhóm thực sự sử dụng thứ đó, vì vậy có yếu tố cuối cùng: rake init
tác vụ tạo .chef
thư mục, liên kết tượng trưng config/knife.rb
ở đó, giải mã và giải nén chef-secrets.tgz
tệp, đảm bảo khóa Opscode Platform riêng tư của người dùng ở đó và .chef/knife-local.rb
đúng được cấu hình, bổ trợ dao symlink và đặt quyền thích hợp trên thư mục và tệp bên trong. Nhiệm vụ này được thiết lập sao cho an toàn để chạy nó nhiều lần trên kho lưu trữ đã được khởi tạo (ví dụ: để cập nhật bí mật hoặc bổ trợ dao).
Ngoài ra còn có một nhiệm vụ trợ giúp đóng gói lại tất cả các bí mật, mã hóa tarball cho mọi người và sao chép nó vào dropbox, để dễ dàng thêm nhân viên mới hoặc thay đổi bí mật.
Về nhiều môi trường: Chef có một tính năng gọi là môi trường . Tôi chưa sử dụng nó, nhưng nó sẽ làm những gì bạn cần. Bạn cũng có thể tách biệt nghiêm ngặt môi trường sản xuất (để tránh các nhà phát triển có bất kỳ khóa nào liên quan đến bất kỳ cách nào để sản xuất env) bằng cách có hai tổ chức Chefed hoặc máy chủ Chef riêng biệt. Đoạn mã dao.rb này cho biết cách định cấu hình dao theo cách khác dựa trên nhánh đã được kiểm tra hiện tại - bạn có thể sử dụng điều này để đặt môi trường cũng như url của máy chủ đầu bếp. Ngoài ra còn có plugin dao gọi là dao dòng chảy , cung cấp quy trình làm việc hai tổ chức hoàn chỉnh hơn.
.chef
thư mục để sử dụng các biến môi trường hoặc một cái gì đó?