常见问题解答¶
为什么我的幂等性操作失败了?¶
重要的是要理解,在确定你的任务是否具有幂等性时,Molecule 除了 Ansible 的默认功能外,没有做任何其他操作。Molecule 将简单地运行两次 converge 操作,并对照 Ansible 的标准输出进行检查。
因此,如果你看到幂等性失败,通常与底层的 Ansible 报告有关,而不是 Molecule。
如果你遇到幂等性失败,并打算在我们的问题跟踪器上提出 bug,请首先手动运行两次 molecule converge
,并确认 Ansible 本身报告了任务幂等性 (changed=0)。
为什么 Molecule 会进行这么多的 shell 调用?¶
Ansible 提供了一个 Python API。但是,它不适用于直接使用。我们希望专注于使 Molecule 有用,因此我们的精力都花在了使用 Ansible 的 CLI 上。
由于我们已经使用了 Ansible 的 CLI,因此我们决定通过各自的 CLI 调用其他二进制文件。
为什么 Molecule 只支持特定的 Ansible 版本?¶
我们只能针对有限数量的 Ansible 版本进行测试,而且我们经常依赖于仅在最近版本的 Ansible 中修复的错误。
为什么使用 playbook 来配置实例?¶
简单。Ansible 已经支持众多云提供商。在 Molecule v1 中,花费了太多时间重新实现 Ansible 核心模块中已经存在的功能。
为什么不使用 Ansible 的 Python API 而使用 playbook?¶
这在早期就进行了评估。这是一个艰难的抉择。在某些情况下,它会提供简单性,而在其他情况下则会提供复杂性。开发人员了解并理解 playbook。最终决定放弃更优雅和更吸引人的解决方案。
为什么会有多个场景目录和 molecule.yml 文件?¶
再次强调,简单。我们选择规范化,而不是定义一个无所不包的配置文件。Molecule 只是循环遍历每个场景,应用该场景的 molecule.yml。
是否有与 Molecule 类似的工具?¶
我可以并行运行 Molecule 进程吗?¶
请参阅parallel-usage-example 以了解用法。
我可以在 molecule.yml 中指定随机实例 ID 吗?¶
这取决于 CI 提供商,但基本方法如下。
将你的 molecule.yml
设置为如下所示
然后在你的 CI 提供商环境(例如,Gitlab CI)中进行设置
其中 CI_JOB_ID
是 Gitlab 提供的随机变量。
Molecule 将在创建和查找实例名称时解析 INSTANCE_UUID
环境变量。你可以通过运行 molecule list
来确认一切正常。
在哪里可以配置我的 roles-path
和 collections-paths
?¶
从 Molecule v6 开始,用户应使用 ansible.cfg
文件,以便在需要时进行更改。
Molecule 是否支持单体仓库?¶
是的,包含在单体仓库中的角色与其他角色一起会自动被拾取,并且 ANSIBLE_ROLES_PATH
会相应地设置。有关更多信息,请参见 此页面。
如何添加仅用于开发/测试的依赖项?¶
有时,在用 Molecule 开发角色时,仅运行依赖角色是可取的,但不对角色本身施加硬依赖;例如,当你依赖于它的副作用之一时。这可以通过在角色的 meta/main.yml
中使用如下方法来实现