- Chef 教程
- Chef - 首页
- Chef - 概述
- Chef - 架构
- Chef - 版本控制系统设置
- Chef - 工作站设置
- Chef - 客户端设置
- Chef - Test Kitchen 设置
- Chef - Knife 设置
- Chef - Solo 设置
- Chef - Cookbook
- Chef - Cookbook 依赖关系
- Chef - 角色
- Chef - 环境
- Chef - Chef-Client 作为守护进程
- Chef - Chef-Shell
- Chef - 测试 Cookbook
- Chef - Foodcritic
- Chef - ChefSpec
- 使用 Test Kitchen 测试 Cookbook
- Chef - 节点
- Chef - Chef-Client 运行
- 高级 Chef
- 动态配置菜谱
- Chef - 模板
- Chef - Chef DSL 的纯 Ruby 代码
- Chef - 菜谱中的 Ruby Gems
- Chef - 库函数
- Chef - 定义
- Chef - 环境变量
- Chef - 数据包
- Chef - 数据包脚本
- Chef - 跨平台 Cookbook
- Chef - 资源
- 轻量级资源提供程序
- Chef - 蓝图
- Chef - 文件和包
- Chef - 社区 Cookbook
- Chef 有用资源
- Chef - 快速指南
- Chef - 有用资源
- Chef - 讨论
Chef - 库函数
Chef 中的库函数提供了一个封装编译逻辑的地方,以便 Cookbook 菜谱保持整洁。
创建库函数
步骤 1 - 在 Cookbook 的库中创建一个辅助方法。
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb class Chef::Recipe def netmask(ipaddress) IPAddress(ipaddress).netmask end end
步骤 2 - 使用辅助方法。
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb ip = '10.10.0.0/24' mask = netmask(ip) # here we use the library method Chef::Log.info("Netmask of #{ip}: #{mask}")
步骤 3 - 将修改后的 Cookbook 上传到 Chef 服务器。
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook Uploading my_cookbook [0.1.0]
测试库函数
user@server $ sudo chef-client ...TRUNCATED OUTPUT... [2013-01-18T14:38:26+00:00] INFO: Netmask of 10.10.0.0/24: 255.255.255.0 ...TRUNCATED OUTPUT...
工作方法
Chef 库代码可以打开 chef::Recipe 类并添加新的方法,如步骤 1 中所做的那样。此步骤不是最干净的,但是最简单的方法。
class Chef::Recipe def netmask(ipaddress) ... end end
最佳实践
一旦我们打开 chef::recipe 类,就会发生污染更改。最佳实践是,最好在库中引入一个新的子类并将方法定义为类方法。这避免了拉取 chef::recipe 命名空间。
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb class Chef::Recipe::IPAddress def self.netmask(ipaddress) IPAddress(ipaddress).netmask end end
我们可以在菜谱中像这样使用该方法
IPAddress.netmask(ip)
广告