1

我无法运行该 molecule test命令,因为它会引发以下错误,而我可以运行单个命令而不会出现任何错误(还提供了 --debug o/p 下面)

[701] Role info should contain platforms
/root/.config/pip/molecule-testing/meta/main.yml:1
{'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

[703] Should change default metadata: author
/root/.config/pip/molecule-testing/meta/main.yml:1
{'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

[703] Should change default metadata: description
/root/.config/pip/molecule-testing/meta/main.yml:1
{'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

[703] Should change default metadata: company
/root/.config/pip/molecule-testing/meta/main.yml:1...

但是,如果我在命令下运行,它会完美运行。那么,谁能指出为什么整个测试都失败了,我该怎么办?

  1. 分子创造
  2. 分子列表
Validation completed successfully.
Instance Name    Driver Name    Provisioner Name    Scenario Name    Created    Converged
---------------  -------------  ------------------  ---------------  ---------  -----------
instance         docker         ansible             default          true       false

  1. 分子会聚
Validation completed successfully.
--> Test matrix

└── default
    ├── dependency
    ├── create
    ├── prepare
    └── converge

--> Scenario: 'default'
--> Action: 'dependency'
Skipping, missing the requirements file.
--> Scenario: 'default'
--> Action: 'create'
Skipping, instances already created.
--> Scenario: 'default'
--> Action: 'prepare'
Skipping, prepare playbook not configured.
--> Scenario: 'default'
--> Action: 'converge'

    PLAY [Converge] ****************************************************************

    TASK [Gathering Facts] *********************************************************
    ok: [instance]

    TASK [molecule-testing : Molecule Hello World!] ********************************
    ok: [instance] => {
        "msg": "Hello, World!"
    }

    PLAY RECAP *********************************************************************
    instance                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

  1. 分子列表
 molecule list
--> Validating schema /root/.config/pip/molecule-testing/molecule/default/molecule.yml.
Validation completed successfully.
Instance Name    Driver Name    Provisioner Name    Scenario Name    Created    Converged
---------------  -------------  ------------------  ---------------  ---------  -----------
instance         docker         ansible             default          true       true
  1. 分子破坏
  2. 分子列表
--> Validating schema /root/.config/pip/molecule-testing/molecule/default/molecule.yml.
Validation completed successfully.
Instance Name    Driver Name    Provisioner Name    Scenario Name    Created    Converged
---------------  -------------  ------------------  ---------------  ---------  -----------
instance         docker         ansible             default          true       false

文件夹结构看起来像这样

.
├── 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
├── README.md
├── tasks
│   └── main.yml
└── vars
    └── main.yml

分子.yml 文件是

---
dependency:
  name: galaxy
driver:
  name: docker
lint:
  name: yamllint
platforms:
  - name: instance
    image: centos:7
    privileged: true
    command: /sbin/init
    volume_mounts:
        - "/sys/fs/cgroup:/sys/fs/cgroup:ro"
provisioner:
  name: ansible
  lint:
    name: ansible-lint
scenario:
  name: default

任务\main.yml -->

---
# tasks file for molecule-testing
- name: Molecule Hello World!
  debug:
    msg: Hello, World!

分子和ansible的版本如下

molecule --version
molecule, version 2.22

ansible --version
ansible 2.8.4
 config file = None
 configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /root/molecule_ansible2.7/lib/python2.7/site-packages/ansible
 executable location = /root/molecule_ansible2.7/bin/ansible
 python version = 2.7.5 (default, Jun 11 2019, 14:33:56) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

码头工人图像

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   67fa590cfc1c        4 weeks ago         202 MB

molecule --debug testis的样本输出


DEBUG: COMMAND
/root/molecule_ansible2.7/bin/ansible-lint -v --exclude=/root/.cache/molecule/molecule-testing/default /root/.config/pip/molecule-testing/molecule/default/playbook.yml

    Examining /root/.config/pip/molecule-testing/molecule/default/playbook.yml of type playbook
    Examining /root/.config/pip/molecule-testing/tasks/main.yml of type tasks
    Examining /root/.config/pip/molecule-testing/handlers/main.yml of type handlers
    Examining /root/.config/pip/molecule-testing/meta/main.yml of type meta
    [701] Role info should contain platforms
    /root/.config/pip/molecule-testing/meta/main.yml:1
    {'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

    [703] Should change default metadata: author
    /root/.config/pip/molecule-testing/meta/main.yml:1
    {'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

    [703] Should change default metadata: description
    /root/.config/pip/molecule-testing/meta/main.yml:1
    {'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

    [703] Should change default metadata: company
    /root/.config/pip/molecule-testing/meta/main.yml:1
    {'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

    [703] Should change default metadata: license
    /root/.config/pip/molecule-testing/meta/main.yml:1
    {'meta/main.yml': {'__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'dependencies': [], u'galaxy_info': {u'description': u'your description', u'license': u'license (GPLv2, CC-BY, etc)', u'author': u'your name', u'company': u'your company (optional)', u'galaxy_tags': [], '__line__': 2, '__file__': u'/root/.config/pip/molecule-testing/meta/main.yml', u'min_ansible_version': 1.2}, '__line__': 1}}

An error occurred during the test sequence action: 'lint'. Cleaning up.
4

1 回答 1

1

TLDR;

ansible-lint这些是您应该修复的错误/良好做法。您可以lint通过简单地启动来自行运行舞台molecule lint

从您当前的输出中,您只需要meta/main.yml在您的角色中添加一些信息。

到底发生了什么

每个molecule命令(例如converge, create, destroy, test...)都会针对您的角色启动一系列步骤(序列)。您可以在命令输出中看到步骤列表,如下面的示例所示,该示例取自您运行时的问题converge

└── default
    ├── dependency
    ├── create
    ├── prepare
    └── converge

这些序列是默认配置的,但可以molecule.yml在您的场景目录中自定义。如果您对该主题感兴趣,可以查看我维护的开源角色的自定义。

默认情况下,converge序列不包含lint阶段。因此,您无需验证所有内容即可运行您的测试手册。

另一方面,该test序列包括以下所有步骤:

└── default
    ├── lint
    ├── dependency
    ├── cleanup
    ├── destroy
    ├── syntax
    ├── create
    ├── prepare
    ├── converge
    ├── idempotence
    ├── side_effect
    ├── verify
    ├── cleanup
    └── destroy

如您所见,第一个是lint,它(默认情况下)应该yamllint在您的所有 yml 文件上运行,然后是ansible-lint您的角色和测试手册,最后flake8是您的 python 文件(testinfra测试、自定义模块、自定义插件过滤器......) .

您的完整测试失败,因为最佳实践检查器ansible-lint正在报告您应该修复的问题。据我所知,它们非常微不足道,应该在你的几行中消失meta/main.yml

于 2019-09-19T15:26:33.170 回答