
- Chef 教程
- Chef - 首頁
- Chef - 概述
- Chef - 架構
- Chef - 版本控制系統設定
- Chef - 工作站設定
- Chef - 客戶端設定
- Chef - Test Kitchen設定
- Chef - Knife設定
- Chef - Solo設定
- Chef - Cookbook
- Chef - Cookbook依賴關係
- Chef - 角色 (Roles)
- Chef - 環境 (Environment)
- Chef - Chef-Client作為守護程序
- Chef - Chef-Shell
- Chef - 測試Cookbook
- Chef - Foodcritic
- Chef - ChefSpec
- 使用Test Kitchen測試Cookbook
- Chef - 節點 (Nodes)
- Chef - Chef-Client執行
- 高階Chef
- 動態配置菜譜 (Recipes)
- Chef - 模板
- Chef - 純Ruby與Chef DSL
- Chef - 在菜譜中使用Ruby Gems
- Chef - 庫 (Libraries)
- Chef - 定義 (Definitions)
- Chef - 環境變數
- Chef - 資料包 (Data Bags)
- Chef - 資料包指令碼
- Chef - 跨平臺Cookbook
- Chef - 資源 (Resources)
- 輕量級資源提供程式
- Chef - 藍圖 (Blueprints)
- Chef - 檔案和包
- Chef - 社群Cookbook
- Chef有用資源
- Chef - 快速指南
- Chef - 有用資源
- Chef - 討論
Chef - 純Ruby與Chef DSL
在Chef中,如果需要建立簡單的菜譜,可以使用Chef中提供的資源,例如模板、remote_file和服務。但是,隨著菜譜變得越來越複雜,需要用到更高階的技術,例如條件語句來根據條件執行菜譜的部分內容。這就是將純Ruby與Chef領域特定語言(DSL)混合使用的強大之處。
如何使用?
在客戶端模式下啟動任何節點上的Chef Shell,即可訪問Chef伺服器。
user@server:~$ sudo chef-shell --client loading configuration: /etc/chef/client.rb Session type: client ...TRUNCATED OUTPUT... run `help' for help, `exit' or ^D to quit. Ohai2u user@server! Chef>
Chef DSL的基本條件
使用純Ruby按名稱對節點進行排序。
chef > nodes.sort! {|a,b| a.name <=> b.name } => [node[alice],node[server]]
迴圈遍歷節點,列印其作業系統。
chef > nodes.each do |n| chef > puts n['os'] chef ?> end linux windows => [node[server], node[alice]]
使用陣列、迴圈和字串擴充套件來構建gem名稱,安裝多個Ruby gem。
chef > %w{ec2 essentials}.each do |gem| chef > gem_package "knife-#{gem}" chef ?> end => ["ec2", "essentials"]
工作方法
Chef菜譜是Ruby檔案,在Chef執行的上下文中進行評估。它們可以包含純Ruby程式碼,例如if語句和迴圈,以及Chef DSL元素,例如資源。
在菜譜內部,可以簡單地宣告Ruby變數併為其賦值。
廣告