ansible角色的分子测试 - 如何构建以避免重复

molecule tests for ansible roles - how to structure to avoid duplication

我有很多角色想通过 molecule 测试,我是 molecule 初学者。

如果我在每个角色中创建一个分子场景,将​​会有大量重复代码。

是否有一种模式可以避免人们使用相同的 Dockerfile.j2molecule.yml 等多个角色

也许某种组合(通过依赖注入)或者如果那不可行的话某种继承?

$ molecule init role -r Whosebug
--> Initializing new role Whosebug...
Initialized role in /private/tmp/Whosebug successfully.

$ tree Whosebug
Whosebug
├── README.md
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── molecule
│   └── default
│       ├── Dockerfile.j2
│       ├── INSTALL.rst
│       ├── molecule.yml
│       ├── playbook.yml
│       └── tests
│           ├── test_default.py
│           └── test_default.pyc
├── tasks
│   └── main.yml
└── vars
    └── main.yml

8 directories, 12 files

molecule.yml 文件中,您可以指定从何处获取 Dockerfile.js。因此,您可以在父文件夹中拥有一个 docker 配置文件,并在所有角色之间共享它。例如:

driver:
  name: docker
platforms:
  - name: instance
    image: ubuntu:18.04
    dockerfile: ../common/Dockerfile.j2

有关官方文档 Docker configuration for Molecule 的更多信息。

您还可以在角色之间共享create.ymldestroy.ymlprepare.yml等文件,并在molecule.yml中指定正确的路径。

provisioner:
  name: ansible
  playbooks:
    create: ../common/create.yml
    destroy: ../common/destroy.yml
    converge: playbook.yml

有关官方文档 Ansible configuration for Molecule 的更多信息。

此外,您还可以在同一角色的不同场景之间共享剧本和测试。

verifier:
name: testinfra
directory: ../resources/tests/
lint:
  name: flake8

有关 sharing across scenarios 官方文档的更多信息。

我不知道有任何直接的机制可以在不同角色之间共享 molecule.yml 文件。不过还是有用的。