- 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 的控制之下。在这种情况下,可能需要从脚本访问 Chef 数据包中的值。为此,需要将数据包值存储在 JSON 文件中,并让添加的脚本访问这些值。
为此,需要一个 Cookbook。在本例中,我们将像之前一样使用 test_cookbook,并且节点的运行列表中应包含 test_cookbook 定义。
工作方法
步骤 1 - 创建数据包。
vipin@laptop:~/chef-repo $ mkdir data_bags/servers vipin@laptop:~/chef-repo $ knife data bag create servers Created data_bag[servers]
步骤 2 - 创建数据包项。
vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { "id": "storage", "host": "10.0.0.12" }
步骤 3 - 更新数据包项。
vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { "id": "storage", "host": "10.0.0.12" }
在 Cookbook 中使用
步骤 1 - 需要使用上述 Cookbook 创建一个包含数据包值的 JSON 文件,以便外部脚本可以访问这些值。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb file "/etc/backup_config.json" do owner "root" group "root" mode 0644 content data_bag_item('servers', 'backup')['host'].to_json end
步骤 2 - 将 test_cookbook 上传到 Chef 服务器。
vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook Uploading my_cookbook [0.1.0]
步骤 3 - 在节点上运行 Chef 客户端。
user@server:~$ sudo chef-client ...TRUNCATED OUTPUT... [2013-03-14T20:30:33+00:00] INFO: Processing file[/etc/backup_config.json] action create (my_cookbook::default line 9) [2013-03-14T20:30:34+00:00] INFO: entered create [2013-03-14T20:30:34+00:00] INFO: file[/etc/backup_config.json] owner changed to 0 [2013-03-14T20:30:34+00:00] INFO: file[/etc/backup_config.json] group changed to 0 [2013-03-14T20:30:34+00:00] INFO: file[/etc/backup_config.json] mode changed to 644 [2013-03-14T20:30:34+00:00] INFO: file[/etc/backup_config.json] created file /etc/backup_config.json ...TRUNCATED OUTPUT...
步骤 4 - 验证生成的 JSON 文件的内容。
user@server:~$ cat /etc/backup_config.json "10.0.0.12"
脚本的工作流程
在上述命令中,我们使用的 file 资源(它在 `/etc` 目录内创建 JSON 文件)在 default cookbook 中定义。它使用 `data_bag_item` 方法直接从数据包获取文件内容。我们访问数据包项中的主机值并将其转换为 JSON。file 资源使用 JSON 转换后的值作为其内容并将其写入磁盘。
广告