Rulebook 与 Collections
在源码仓库中构建和追踪简单的 Rulebooks 和 Playbooks 是完全可行的。如果您发现自己正在构建更复杂且可重复使用,并依赖于其他内容、能力或模块的 rulebooks,那么您可能需要考虑将它们打包到一个 Collection 中
Collections 是 Ansible 现有的打包概念,现已扩展以支持 Ansible Rulebook 内容。Rulebook Collections 与 Decision Environments(决策环境) 的结合效果尤为出色
包含 Rulebook 内容的 Collection 结构
Collections 已经拥有一个 现有结构 来支持 Ansible Roles、Modules、Plugins 和文档。让我们来看看可以在该结构中添加什么来支持 ansible-rulebook 内容
collection/
├ ...
├── extensions/
│ ├── eda/
│ │ ├── eda_runtime.yml
│ │ ├── rulebooks/
│ │ └── plugins/
│ │ ├── event_source/
│ │ └── event_filter/
└ ...
Collection 包含的内容远不止这些,但上述内容是 ansible-rulebook 自身会寻找的添加项。您也可以将 roles、playbooks 和其他内容放入 collection 中,特别是如果您将在 rulebooks 中调用并使用它们的话。
您将按照初始化任何其他 collection 的相同方式来初始化该 Collection
ansible-galaxy collection init my_collection
然后您可以添加上述目录并开始填充内容。
并非您编写的每个 Collection 都会有自己的插件,但如果您发现自己在构建自定义的 event sources(事件源) 或 event filters(事件过滤器),那么您需要将它们放在如上所示的 collection 中。
使用 Collection 中包含的 rulebook
ansible-rulebook 命令可以直接接收 rulebook 文件的路径,但一旦您将 rulebook 放入 collection 且该 collection 在环境中可用,您就可以通过其全限定名(fully qualified name)来引用它
ansible-rulebook -r my_namespace.my_collection.my_rulebook
注意
关于如何构建和发布 collections 的更多详情,请参阅 Developing Ansible Collections(开发 Ansible Collections) 文档。