ฉันทำงานกับหลายโครงการดังนั้นโซลูชันของ cjc จะไม่ทำงานสำหรับฉัน นอกจากนี้ยังมีปัญหาของการกำหนดค่าทั่วไป vs กำหนดเอง (ที่อยู่ ฯลฯ เป็นเรื่องปกติของ บริษัท และยังมีเวทมนตร์ในการกำหนดค่า) ในที่สุดแผนการที่ฉันใช้คือแฮ็ค แต่มันก็สะดวกในการใช้งาน
แทนที่จะใช้ทั่วโลก~/.chef
ฉันใช้ไดเรกทอรีย่อย '.chef' ภายใน chef-repo ซึ่งไม่ได้เก็บไว้ในคอมไพล์ (ถูกเพิ่มเข้าไป.gitignore
) ฉันยังมีไฟล์config/knife.rb
ไฟล์ที่มีการตรวจสอบใน Git และมีการกำหนดค่าที่ใช้ร่วมกัน มันเริ่มต้นด้วยตัวอย่างนี้:
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
ไฟล์นี้โหลดไฟล์.chef/knife-local.rb
ที่มีการกำหนดค่าแบบกำหนดเอง (ในเวอร์ชั่นพื้นฐานเป็นเพียงOPSCODE_USER='username'
ค่าคงที่ที่ใช้ในภายหลัง แต่สามารถมีค่าคอนฟิกมีดใด ๆ ) และ.chef/knife-secrets.rb
มีความลับที่ใช้ร่วมกัน (คีย์ AWS เป็นต้น)
ด้านล่างนั้นมีการกำหนดค่ามีดปกติที่ใช้ค่าคงที่ที่กำหนดในไฟล์เหล่านี้เช่น:
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
ด้วยวิธีนี้ฉันได้รับการตั้งค่ามีดแบบสแตนด์อโลนทั่วทั้ง บริษัท ซึ่งหมายความว่าข้อมูลโค้ดใด ๆ หรือการเรียกใช้มีดที่ใช้ร่วมกันในวิกินั้นจะใช้ได้กับทุกคน มีความสับสนและเวทย์มนตร์เพียงพอในตัวมีด - การกำหนดค่าต่าง ๆ จะทำให้แย่ลงเท่านั้น นอกจากนี้ทุกคนยังได้รับประโยชน์จากตัวอย่างมายากลขนาดเล็กเช่นนี้เพื่อknife ssh
ใช้ในการกำหนดค่าการเข้าสู่ระบบในผู้ใช้~/.ssh/config
นอกจากนี้ยังมีเรื่องของความลับที่แชร์: คีย์การตรวจสอบของเซิร์ฟเวอร์เชฟ, คีย์ AWS ที่เก็บไว้ในknife-secrets.rb
, คีย์ส่วนตัว SSH ของ EC2, คีย์กระเป๋าข้อมูลที่เข้ารหัสและอื่น ๆ เราไม่ต้องการให้จัดเก็บไว้ในที่เก็บ - หรือที่ใดก็ตามที่พวกเขาไม่ได้เข้ารหัสอย่างปลอดภัย ดังนั้นเราจึงแจกจ่ายไฟล์เหล่านั้นเป็น.tar.gz
ไฟล์ซึ่งมีการเข้ารหัส GPG ให้กับทุกคนใน บริษัท และแชร์ผ่าน Dropbox
การกำหนดค่าทั้งหมดนี้มีความซับซ้อนและฉันต้องการให้ผู้คนในทีมใช้สิ่งนั้นจริง ๆ ดังนั้นจึงมีองค์ประกอบสุดท้าย: rake init
งานที่สร้าง.chef
ไดเรกทอรีconfig/knife.rb
เชื่อมโยงที่นั่นถอดรหัสและchef-secrets.tgz
ไฟล์untars ทำให้แน่ใจว่าผู้ใช้ Opscode แพลตฟอร์มส่วนตัวนั้น.chef/knife-local.rb
อยู่ในตำแหน่งที่ถูกต้อง กำหนดค่า, symlink ดปลั๊กอินและกำหนดสิทธิ์ที่เหมาะสมในไดเรกทอรีและไฟล์ภายใน งานนี้ได้รับการตั้งค่าเพื่อให้สามารถเรียกใช้งานได้หลายครั้งในที่เก็บข้อมูลที่เริ่มต้นแล้ว (เช่นเพื่ออัปเดตความลับหรือมีดปลั๊กอิน)
นอกจากนี้ยังมีงานผู้ช่วยที่เก็บความลับทั้งหมดเข้ารหัส tarball ให้กับทุกคนและคัดลอกลงในดรอปบ็อกซ์เพื่อให้ง่ายต่อการเพิ่มพนักงานใหม่หรือเปลี่ยนความลับ
เกี่ยวกับสภาพแวดล้อมหลาย: เชฟมีคุณสมบัติที่เรียกว่าสภาพแวดล้อม ฉันยังไม่ได้ใช้ แต่ควรทำในสิ่งที่คุณต้องการ นอกจากนี้คุณยังสามารถแยกสภาพแวดล้อมการผลิตอย่างเคร่งครัด (เพื่อหลีกเลี่ยงนักพัฒนาที่มีคีย์ใด ๆ ที่เกี่ยวข้องในทางใดทางหนึ่งในการผลิต env) โดยมีสององค์กร Hosted Chef แยกต่างหากหรือเซิร์ฟเวอร์ Chef ตัวอย่างเกร็ดความรู้ใบมีดนี้แสดงวิธีการตั้งค่ามีดในวิธีที่แตกต่างกันไปตามสาขาที่ตรวจสอบในปัจจุบัน - คุณสามารถใช้สิ่งนี้เพื่อตั้งค่าสภาพแวดล้อมเช่นเดียวกับ URL ของเซิร์ฟเวอร์พ่อครัว นอกจากนี้ยังมีปลั๊กอินมีดที่เรียกว่ามีดโฟลว์ ซึ่งให้เวิร์กโฟลว์สององค์กรที่สมบูรณ์ยิ่งขึ้น
.chef
โฟลเดอร์ให้ใช้ตัวแปรสภาพแวดล้อมหรืออะไรก็ได้