พ่อครัว - ทดสอบการตั้งค่าห้องครัว

Test Kitchen เป็นกรอบการทดสอบแบบบูรณาการของ Chef เปิดใช้งานการเขียนสูตรการทดสอบซึ่งจะทำงานบน VM เมื่อมีการสร้างอินสแตนซ์และแปลงโดยใช้ตำราอาหาร สูตรการทดสอบทำงานบน VM นั้นและสามารถตรวจสอบได้ว่าทุกอย่างทำงานตามที่คาดไว้หรือไม่

ChefSpecเป็นสิ่งที่จำลองการวิ่งของเชฟเท่านั้น ทดสอบรองเท้าในครัวขึ้นโหนดจริงและเรียกใช้ Chef

Step 1 - ติดตั้งห้องครัวทดสอบอัญมณีทับทิมและทดสอบอัญมณีเร่ร่อนในครัวเพื่อให้ห้องครัวทดสอบใช้คนเร่ร่อนในการทดสอบ

$ gem install kitchen 
$ gem install kitchen-vagrant

Step 2- ตั้งค่าห้องครัวทดสอบ ซึ่งสามารถทำได้โดยการสร้าง.kitchen.yml ในไดเรกทอรีตำราอาหาร

driver_plugin: vagrant 
driver_config: 
   require_chef_omnibus: true 
platforms: 
   - name: ubuntu-12.04 
   driver_config: 
      box: opscode-ubuntu-12.04 
      box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ 
      ubuntu-12.04_provisionerless.box 
suites: 
   - name: default 
run_list: 
   - recipe[minitest-handler] 
   - recipe[my_cookbook_test] 
attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }

ในโค้ดด้านบนส่วนหนึ่งระบุว่าคนเร่ร่อนต้องหมุน VM และกำหนดว่าคุณต้องการให้รถโดยสารติดตั้ง Chef บนโหนดเป้าหมาย

ส่วนที่สองกำหนดแพลตฟอร์มที่คุณต้องการทดสอบตำราอาหาร Vagrant มักจะสร้างและทำลายอินสแตนซ์ใหม่ ๆ คุณไม่ต้องกลัวเกี่ยวกับผลข้างเคียงกับ VM คนจรจัดที่คุณหมุนโดยใช้ไฟล์ Vagrant

ห้องครัวทดสอบถือได้ว่าเป็นสภาพแวดล้อมชั่วคราวที่ช่วยในการเรียกใช้และทดสอบตำราอาหารในสภาพแวดล้อมชั่วคราวที่คล้ายกับการผลิต เมื่อเปิดห้องครัวทดสอบเราสามารถตรวจสอบให้แน่ใจว่าโค้ดที่ระบุใช้งานได้ก่อนที่จะนำไปใช้กับสภาพแวดล้อมการทดสอบการเตรียมการก่อนการผลิตและการผลิตจริง คุณลักษณะของห้องครัวทดสอบนี้ตามมาด้วยหลายองค์กรเป็นชุดก่อนที่จะวางตำราอาหารในสภาพแวดล้อมการทำงานจริง

ทดสอบขั้นตอนการทำงานของห้องครัว

ต่อไปนี้เป็นขั้นตอนที่เกี่ยวข้องในเวิร์กโฟลว์ Test Kitchen

การสร้างตำราโดยใช้เชฟ

ใช้รหัสต่อไปนี้เพื่อสร้างตำราอาหาร

$ chef generate cookbook motd_rhel 
Installing Cookbook Gems: 

Compiling Cookbooks... 
Recipe: code_generator::cookbook
   * directory[C:/chef/cookbooks/motd_rhel] action create
      - create new directory C:/chef/cookbooks/motd_rhel
   
   * template[C:/chef/cookbooks/motd_rhel/metadata.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/metadata.rb
      - update content in file C:/chef/cookbooks/motd_rhel/metadata.rb from none to 
      d6fcc2 (diff output suppressed by config)
   
   * template[C:/chef/cookbooks/motd_rhel/README.md] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/README.md
      - update content in file C:/chef/cookbooks/motd_rhel/README.md from none to 50deab
         (diff output suppressed by config)
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/chefignore] action create
      - create new file C:/chef/cookbooks/motd_rhel/chefignore
      - update content in file C:/chef/cookbooks/motd_rhel/chefignore from none to 15fac5
         (diff output suppressed by config)
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/Berksfile] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/Berksfile
      - update content in file C:/chef/cookbooks/motd_rhel/Berksfile from none to 9f08dc
         (diff output suppressed by config)
   
   * template[C:/chef/cookbooks/motd_rhel/.kitchen.yml] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/.kitchen.yml
      - update content in file C:/chef/cookbooks/motd_rhel/.kitchen.yml
         from none to 49b92b (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec]
      action create 
      - create new directory 
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec
   
   * directory[C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec]
      action create 
      - create new directory 
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec
   
   * cookbook_file
      [C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb]
      action create_if_missing
      - create new file 
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
            from none to d85df4 (diff output suppressed by config)
   
   * template
      [C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/defaul t_spec.rb]
      action create_if_missing
      - create new file
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
            from none to 3fbdbd (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/spec/unit/recipes] action create
      - create new directory C:/chef/cookbooks/motd_rhel/spec/unit/recipes
   
   * cookbook_file
      [C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb from none to 587075
            (diff output suppressed by config)
   
   * template
      [C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb]
      action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
            from none to ff3b17 (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/recipes] action create
      - create new directory C:/chef/cookbooks/motd_rhel/recipes
   
   * template[C:/chef/cookbooks/motd_rhel/recipes/default.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/recipes/default.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/recipes/default.rb from none to c4b029
            (diff output suppressed by config) 
   
   * execute[initialize-git] action run 
      - execute git init . 
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/.gitignore] action create
      - create new file C:/chef/cookbooks/motd_rhel/.gitignore
      - update content in file C:/chef/cookbooks/motd_rhel/.gitignore from none to 33d469
         (diff output suppressed by config)
   
   * execute[git-add-new-files] action run
      - execute git add .
   
   * execute[git-commit-new-files] action run 
      - execute git commit -m "Add generated cookbook content"

ต่อไปนี้เป็นโครงสร้างตำราอาหารที่สร้างขึ้นโดยเป็นผลลัพธ์ของโค้ดด้านบน

ทดสอบไฟล์การกำหนดค่าห้องครัว

.kitchen.yaml ไฟล์

driver: 
   name: vagrant 
provisioner: 
   name: chef_zero 
# verifier: 
# name: inspec 
# format: doc 
platforms: 
   - name: ubuntu-14.04 
suites: 
   - name: default 
   run_list: 
      - recipe[motd_rhel::default] 
   attributes:

Drivers - ระบุซอฟต์แวร์ที่ใช้จัดการเครื่อง

Provisioner- มีข้อกำหนดเกี่ยวกับวิธีการทำงานของ Chef เราใช้ chef_zero เนื่องจากสามารถเลียนแบบสภาพแวดล้อมเซิร์ฟเวอร์ Chef บนเครื่องท้องถิ่นได้ สิ่งนี้ช่วยให้สามารถทำงานกับแอตทริบิวต์โหนดและข้อกำหนดเซิร์ฟเวอร์ Chef

Platform - สิ่งนี้ระบุระบบปฏิบัติการเป้าหมาย

Suites- กำหนดสิ่งที่ต้องการนำไปใช้กับสภาพแวดล้อมเสมือนจริง ที่นี่คุณกำหนดคำจำกัดความหลายคำ เป็นตำแหน่งที่คุณกำหนดรายการรันซึ่งระบุสูตรที่จะรันและลำดับที่เราต้องรัน

การรันคำสั่งตามลำดับ

รายการครัว

$ kitchen list 
Instance  Driver  Provisioner Verifier   Transport Last Action 
ubuntu-1404 Vagrant ChefZero   Busser       Ssh   <Not Created>

ครัวสร้าง

$ kitchen create
-----> Starting Kitchen (v1.4.2)
-----> Creating <default-centos-72>...
      Bringing machine 'default' up with 'virtualbox' provider...
      ==> default: Box 'opscode-centos-7.2' could not be found.
         Attempting to find and install...
      default: Box Provider: virtualbox
      default: Box Version: >= 0
      ==> default: Box file was not detected as metadata. Adding it directly...
         ==> default: Adding box 'opscode-centos-7.2' (v0) for provider: virtualbox
         default: Downloading:
            https://opscode-vmbento.s3.amazonaws.com/vagrant/virtualbox/
            opscode_centos-7.1_chefprovisionerless.box[...]
         Vagrant instance <default-centos-72> created.
         Finished creating <default-centos-72> (3m12.01s).
         -----> Kitchen is finished. (3m12.60s)

ครัวบรรจบ

$ kitchen converge 
-----> Converging <default-centos-72>...        
      Preparing files for transfer        
      Preparing dna.json        
      Resolving cookbook dependencies with Berkshelf 4.0.1...
      Removing non-cookbook files before transfer       
      Preparing validation.pem        
      Preparing client.rb 
-----> Chef Omnibus   installation detected (install only if missing)        
      Transferring files to <default-centos-72>       
      Starting Chef Client, version 12.6.0        
      resolving cookbooks for run list: ["motd_rhel::default"]
      Synchronizing Cookbooks: - motd_rhel (0.1.0)       
      Compiling Cookbooks...       Converging 1 resources        
      Recipe: motd_rhel::default        (up to date)         
      Running handlers:       Running handlers complete       
      Chef Client finished, 0/1 resources updated in 01 seconds        
      Finished converging <default-centos-72> (0m3.57s). 
      -----> Kitchen is finished. (0m4.55s)

การตั้งค่าการทดสอบ

การเข้าสู่ระบบห้องครัวใช้เพื่อทดสอบว่า VM การทดสอบได้รับการจัดเตรียมอย่างถูกต้องหรือไม่

$ kitchen login 
Last login: Thu Jan 30 19:02:14 2017 from 10.0.2.2 
hostname:  default-centos-72 
fqdn:      default-centos-72 
memory:    244180kBcpu count: 1

สุดท้ายออก

$ exit 
Logout 
Connection to 127.0.0.1 closed.

กำลังทำลายการตั้งค่า

$ Kitchen destroy 
-----> Starting Kitchen (v1.4.2) 
-----> Destroying <default-centos-72>...       
   ==> default: Forcing shutdown of VM...        
   ==> default: Destroying VM and associated drives...        
   Vagrant instance <default-centos-72> destroyed.        
   Finished destroying <default-centos-72> (0m4.94s). 
-----> Kitchen is finished. (0m5.93s)