您是否应该开发一个模块?
开发 Ansible 模块很简单,但通常并非必要。在开始编写新模块之前,请思考:
是否已经存在类似的模块?
现有的模块可能已经涵盖了您想要的功能。Ansible 集合(collections)包含了数千个模块。请搜索我们的 包含的集合列表 或 Ansible Galaxy,看看是否有现成的模块能满足您的需求。
您是否应该使用或开发一个动作插件(action plugin)而不是模块?
动作插件可能是实现所需功能的最佳方式。动作插件运行在控制节点而非受管节点上,且其功能可供所有模块使用。有关开发插件的更多信息,请阅读 开发插件页面。
您是否应该使用角色(role)而不是模块?
现有模块的组合可能已经涵盖了您想要的功能。您可以为此类用例编写一个角色。请参阅 角色文档。
您是否应该创建一个集合(collection)而不是单个模块?
您想要的功能对于单个模块来说可能过于庞大。如果您想将 Ansible 连接到新的云提供商、数据库或网络平台,您可能需要 开发一个新的集合。
每个模块都应该具有简洁且定义明确的功能。基本上,请遵循 UNIX “只做好一件事”的哲学。
模块不应要求用户了解所有要使用的 API/工具的底层选项。例如,如果无法为必需的模块参数记录合法值,那么这个模块可能会被拒绝。
模块通常应包含与资源交互的大部分逻辑。如果只是一个不包含太多逻辑的 API 轻量级封装,可能会导致用户将过多逻辑转移到剧本(playbook)中,因此此类模块会被拒绝。相反,请尝试创建多个模块来与 API 的较小独立部分进行交互。
如果您的用例没有被现有模块、动作插件或角色涵盖,且您不需要创建多个模块,那么您就可以开始开发新模块了。请从以下主题中选择后续步骤:
我想 开始开发一个新模块。
我想回顾 开发优质模块的技巧和约定。
我想 编写一个 Windows 模块。
我想 了解 Ansible 架构的概览。
我想 为我的模块编写文档。
我想 为我的模块添加单元测试和集成测试。
我想 编写多个模块。