食品配送:一键同步你的Chef服务器
简介
欢迎来到食品配送——一个用于在版本控制系统(VCS)仓库和Chef服务器之间保持食谱、角色和数据包同步的软件。设想你有多个应保持一致的独立Chef服务器,它们都可以定时运行此脚本。该脚本采用适当的锁定机制,因此你可以每分钟运行一次。
然而,请注意以下几点:
- 假定你不利用版本或环境。
- 假定你想将提交到HEAD的任何内容立即上传。
食品配送高度可定制。许多设置可以通过简单的配置文件调整,并且它是可扩展的,让你可以根据需求进行扩展。
先决条件
食品配送是一种特定的管理Chef基础设施的方式,它假设你始终一致地遵循这些原则:
- 检出即刻生效(这意味着需要在合并前进行代码审查)
- 版本是无意义的(理想情况下,永远不要更改)
- 你希望所有Chef服务器保持同步
- 你关心的所有东西都来自版本控制。
我们建议启用属性白名单,以防止节点属性被保存回服务器。在Chef 11版之后的最新版本中,该功能已内置。对于较旧的版本,我们推荐使用whitelist_node_attrs
库。
依赖项
- Mixlib::Config
- BetweenMeals
配置文件
默认配置文件位于/etc/gd-config.rb
,但你可以通过-c
参数指定其他位置。配置文件的工作方式与Chef的client.rb相同——有一系列关键词接受参数,其余部分是标准Ruby。
可用的配置选项包括但不限于: Berks开关(用于处理依赖项并上传食谱)、Berks二进制路径、Berks配置文件路径等。
插件系统
插件应该是一个定义了几个类方法的Ruby文件。它会在Hooks
类中被class_eval()
执行。
可以自定义以下函数:
- 自定义preflight_checks(dryrun),在完成配置加载和插件加载但尚未进行任何操作之前运行。
- 自定义prerun(dryrun),在获取锁、创建进程ID文件和初始化仓库对象后运行(但尚未修改仓库)。
- 自定义post_repo_up(dryrun),在更新仓库后但在解析仓库之前运行。
- 自定义postrun(dryrun, success, msg) 和 atexit(dryrun, success, msg),用于执行上传/删除本地服务器相关项后的操作,以及在程序异常退出时。
许可证
查看本仓库中的LICENSE
文件。
食品配送提供了高效且灵活的方法来管理和同步你的Chef基础设施,适合那些追求一致性并注重自动化流程的团队。其简洁的配置、强大的插件系统和对版本控制的深刻理解,使其成为任何DevOps工具链的理想选择。不要错过这个机会,现在就尝试使用食品配送,提升你的运维效率!