2

我有一个 Ansible 集合来安装一些软件。每个软件版本都附加到一个单独的集合版本。要测试升级,我需要先应用旧的集合版本,然后运行新版本。为了实现这一点,我稍微改变了收敛/测试顺序molecule.yml

---
driver:
  name: docker
provisioner:
  name: ansible
  env:
    ANSIBLE_COLLECTIONS_PATH: ${MOLECULE_EPHEMERAL_DIRECTORY}/collections
dependency:
  name: galaxy
  options:
    requirements-file: ${MOLECULE_SCENARIO_DIRECTORY}/collections.yml
scenario:
  converge_sequence:
    - create
    - prepare    # installs previous collection and software version
    - dependency # installs new collection version
    - converge   # upgrades software
  test_sequence:
    - lint
    - destroy
    - syntax
    - create
    - prepare
    - dependency
    - converge
    - idempotence
    - verify
    - destroy

所以dependencystep 在升级活动之前安装新版本的集合converge,并且prepareplaybook 包含安装旧集合版本和以前的软件版本的任务:

---
- name: Prepare
  hosts: all
  become: true
  become_method: sudo
  gather_facts: true
  tasks:
    - name: Install previous collection version
      command: >-
        ansible-galaxy collection install -r ../collections-upgrade.yml -p {{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}/collections
      run_once: true
      delegate_to: localhost
      changed_when: false

    - name: Include installation role
      include_role:
        name: namespace.collection.role

但它仅在converge运行两次或更多时才有效,因此在ANSIBLE_COLLECTIONS_PATH. 但是为什么第一次运行不是这样呢?错误是

TASK [Include installation role] *******************************************
ERROR! the role 'namespace.collection.role' was not found in /workspaces/software/roles/software_upgrade/molecule/_shared/playbooks/roles:/workspaces/software/.cache/molecule/software_upgrade/scenario/roles:/workspaces/software/roles:/home/vscode/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/workspaces/software/roles/software_upgrade:/workspaces/software/roles/software_upgrade/molecule/_shared/playbooks

The error appears to be in '/workspaces/software/roles/software_upgrade/molecule/_shared/playbooks/prepare.yml': line 35, column 15, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

      include_role:
        name: namespace.collection.role
              ^ here

有没有办法避免这种情况或使用另一种方法?当需要安装不同的集合版本时,我尝试使用环境变量dependency.options.requirements-file并执行两次步骤,但也没有成功。dependency

4

0 回答 0