วิธีการที่ชวนให้นึกถึงพ่อครัวเดี่ยว?


8

วิธีที่ใช้สำนวนการเรียกพ่อครัวเดี่ยวคืออะไร? ไซต์ส่วนใหญ่ทำสิ่งนี้:

chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz

แต่นั่นยาว มีวิธีสั้น ๆ สองสามข้อในการทำสิ่งนี้ที่ฉันสามารถนึกถึง:

  1. ภารกิจคราด ( rake chef-solo)
  2. เชลล์สคริปต์ขนาดเล็ก ( run-chef-solo)
  3. นามแฝง (สามารถแทนที่ชื่อเช่นchef-solo)

วิธีการทำเช่นนี้เป็นอย่างไร? ผู้ใช้พ่อครัวคนอื่นเรียกพ่อครัวอย่างไร

คำตอบ:


8

โดยค่าเริ่มต้นอ่านการกำหนดค่าของมันมาจากchef-solo /etc/chef/solo.rbพารามิเตอร์บรรทัดคำสั่งสอดคล้องกับค่ากำหนดที่สามารถตั้งค่าในไฟล์นี้ สิ่งนี้ทำได้โดยใช้ไลบรารี mixlib-config

  option :config_file, 
    :short => "-c CONFIG",
    :long  => "--config CONFIG",
    :default => "/etc/chef/solo.rb",
    :description => "The configuration file to use"

  option :json_attribs,
    :short => "-j JSON_ATTRIBS",
    :long => "--json-attributes JSON_ATTRIBS",
    :description => "Load attributes from a JSON file or URL",
    :proc => nil

  option :recipe_url,
      :short => "-r RECIPE_URL",
      :long => "--recipe-url RECIPE_URL",
      :description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook ca
che.",
      :proc => nil

'ตัวเลือก' คือค่าไฟล์กำหนดค่า

ไฟล์ config ที่แท้จริง/etc/chef/solo.rbจะมีลักษณะดังนี้:

file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/node.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

นอกจากนี้โปรดทราบว่าไฟล์ JSON สามารถเป็น URL ระยะไกลได้เช่นกัน

json_attribs    "http://www.example.com/node.json"

คุณสามารถใช้ Ohai เป็นไลบรารีในไฟล์กำหนดค่าได้เช่นกันเพื่อตรวจสอบแพลตฟอร์มหรือแอตทริบิวต์อื่น ๆ เพื่อระบุไฟล์ JSON ที่จะใช้

require 'rubygems'
require 'ohai'
o = Ohai::System.new
o.all_plugins
file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/#{o[:platform]}.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

และจากนั้นคุณจะมีไฟล์ JSON เฉพาะ "แพลตฟอร์ม" หรือคุณอาจจะใช้o[:hostname], o[:domain]หรือo[:fqdn]การใช้แฟ้ม JSON ขึ้นอยู่กับชื่อโฮสต์โดเมนหรือ FQDN แต่เมื่อคุณเริ่มมี scaffolding ของเซิร์ฟเวอร์เพื่อรองรับการกำหนดค่าแบบไดนามิกนี้คุณอาจมองไปที่การเรียกใช้ Chef Server :-)


1

@jtimberman ได้เขียนคำตอบที่ยอดเยี่ยมแล้ว นี่คือวิธีส่วนตัวของฉันในการเรียกพ่อครัวเดี่ยว ขั้นตอนนี้จะทำให้การทำงานพื้นฐานและคุณอาจต้องเพิ่มคุณสมบัติเพิ่มเติม/etc/chef/node.jsonและสำรวจตัวเลือกที่อธิบายไว้ในคำตอบอื่น

# cat > /etc/chef/solo.rb << EOF
cookbook_path    "/var/chef-solo/cookbooks"
json_attribs     "/etc/chef/node.json"
EOF

# cat > /etc/chef/node.json << EOF
{
  "run_list": ["recipe[foo]", "recipe[bar]"]
}
EOF

คัดลอกตำราของคุณลงใน/var/chef-solo/cookbooksหรือ tar.gz พวกเขาขึ้นบนเว็บเซิร์ฟเวอร์และใช้recipe_urlพารามิเตอร์ การรันchef-soloบนโหนดคือทั้งหมดที่ต้องใช้เพื่อเรียกใช้

ถ้าเป็นไปได้ฉันพยายามเก็บทุกอย่างไว้ในนั้นsolo.rbเพราะฉันชอบที่จะทำเชฟเดี่ยวโดยไม่ต้องจำข้อโต้แย้งเพิ่มเติมใด ๆ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.