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) 文档。