FAQ

为什么我的幂等运算失败了?

重要的是要明白,在确定任务是否是幂等的时候,Molecule除了Ansible的默认功能外,不会做任何事情。Molecule只需运行两次converge操作,并对照Ansible的标准输出进行检查。

因此,如果您看到幂等失败,它通常与底层的Ansible报告有关,而不是与Molecule有关。

如果您正面临幂等失败并打算在我们的问题跟踪器上引发错误,请首先手动运行 molecule converge 两次,并确认Ansible本身正在报告任务幂等性(changed=0)。

为什么Molecule会发出如此多的壳层呼叫?

Ansible提供了一个Python API。但是,它不是为 direct consumption . 我们想专注于使Molecule有用,所以我们的努力都花在了Ansible的CLI上。

因为我们已经使用了Ansible的CLI,所以我们决定通过各自的CLI调用其他二进制文件。

注解

这一决定可能会在以后重新评估。

为什么Molecular只支持Ansible 2.2及更高版本?

  • Ansible2.2是Ansible2系列中的第一个好版本。

  • 支持驱动程序所需的模块在2.2之前不存在,或者不够。

为什么使用剧本来提供实例?

简单。Ansible已经支持许多云提供商。在moleculev1上花费了太多的时间,重新实现了核心Ansible模块中已经存在的功能。

你想过用Ansible的PythonAPI代替剧本吗?

这是 evaluated 很早以前。这是一个折腾。它在某些情况下提供了简单性,而在其他情况下则提供了复杂性。开发人员知道并理解剧本。决定放弃一个更优雅和性感的解决方案。

为什么有多个场景目录和Molecule.yml文件夹?

再说一次,简单。与其定义一个包罗万象的配置文件,不如选择规范化。Molecule只是应用场景的Molecule.yml.

注解

这一决定可能会在以后重新评估。

有没有类似的工具?

我可以并行运行Molecule进程吗?

请看 以并行模式运行Molecule进程 供使用。

我可以在我的应用程序中指定随机实例ID吗Molecule.yml?

这取决于CI提供程序,但基本方法如下。

设置您的 molecule.yml 如下所示:

platforms:
  - name: "instance-${INSTANCE_UUID}"

然后在CI提供程序环境(例如Gitlab CI)中,安装:

variables:
  INSTANCE_UUID: "$CI_JOB_ID"

哪里 CI_JOB_ID 是Gitlab提供的随机变量。

Molecule将分解 INSTANCE_UUID 创建和查找实例名称时的环境变量。您可以通过运行 molecule list .

我能用Molecule测试易变集合吗?

这一点目前还没有得到官方的支持。此外,收藏仍处于“技术预览”状态。不过,你可以看看 this blog post 概述一个可行的“DIY”解决方案作为暂时的权宜之计。

Molecule支持单回购吗?

是的,角色包含在 monorepo 与其他角色一起自动拾取和 ANSIBLE_ROLES_PATH 相应设置。看到了吗 this page 更多信息。

如何添加仅用于开发/测试的依赖项?

有时,在使用molecule开发角色时,只运行依赖性角色是可取的,而不是对角色本身施加硬依赖性;例如,当您依赖它的一个副作用时。这可以通过这样的方法在您的角色中实现 meta/main.yml

---
dependencies:
  - role: <your-dependee-role>
    when: lookup('env', 'MOLECULE_FILE')