|
|
|
---
|
|
|
|
- name: set some facts for tests
|
|
|
|
set_fact:
|
|
|
|
galaxy_dir: "{{ remote_tmp_dir }}/galaxy"
|
|
|
|
|
|
|
|
- name: create scratch dir used for testing
|
|
|
|
file:
|
|
|
|
path: '{{ galaxy_dir }}/scratch'
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection init tests
|
|
|
|
import_tasks: init.yml
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection build tests
|
|
|
|
import_tasks: build.yml
|
|
|
|
|
|
|
|
# The pulp container has a long start up time
|
|
|
|
# The first task to interact with pulp needs to wait until it responds appropriately
|
|
|
|
- name: list pulp distributions
|
|
|
|
uri:
|
|
|
|
url: '{{ pulp_api }}/pulp/api/v3/distributions/ansible/ansible/'
|
|
|
|
status_code:
|
|
|
|
- 200
|
|
|
|
user: '{{ pulp_user }}'
|
|
|
|
password: '{{ pulp_password }}'
|
|
|
|
force_basic_auth: true
|
|
|
|
register: pulp_distributions
|
|
|
|
until: pulp_distributions is successful
|
|
|
|
delay: 1
|
|
|
|
retries: 60
|
|
|
|
|
|
|
|
- name: configure pulp
|
|
|
|
include_tasks: pulp.yml
|
|
|
|
|
|
|
|
- name: Get galaxy_ng token
|
|
|
|
uri:
|
|
|
|
url: '{{ galaxy_ng_server }}v3/auth/token/'
|
|
|
|
method: POST
|
|
|
|
body_format: json
|
|
|
|
body: {}
|
|
|
|
status_code:
|
|
|
|
- 200
|
|
|
|
user: '{{ pulp_user }}'
|
|
|
|
password: '{{ pulp_password }}'
|
|
|
|
force_basic_auth: true
|
|
|
|
register: galaxy_ng_token
|
|
|
|
|
|
|
|
- name: create test ansible.cfg that contains the Galaxy server list
|
|
|
|
template:
|
|
|
|
src: ansible.cfg.j2
|
|
|
|
dest: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
- name: test install command using an unsupported version of resolvelib
|
|
|
|
include_tasks: unsupported_resolvelib.yml
|
|
|
|
loop: "{{ unsupported_resolvelib_versions }}"
|
|
|
|
loop_control:
|
|
|
|
loop_var: resolvelib_version
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection offline installation tests
|
|
|
|
include_tasks: install_offline.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection publish tests for {{ test_name }}
|
|
|
|
include_tasks: publish.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
vars:
|
|
|
|
test_name: '{{ item.name }}'
|
|
|
|
test_server: '{{ item.server }}'
|
|
|
|
test_api_server: '{{ item.api_server|default(item.server) }}'
|
|
|
|
loop:
|
|
|
|
- name: pulp_v2
|
|
|
|
api_server: '{{ galaxy_ng_server }}'
|
|
|
|
server: '{{ pulp_server }}primary/api/'
|
|
|
|
v2: true
|
|
|
|
- name: galaxy_ng
|
|
|
|
server: '{{ galaxy_ng_server }}'
|
|
|
|
v3: true
|
|
|
|
|
|
|
|
- include_tasks: setup_gpg.yml
|
|
|
|
|
|
|
|
# We use a module for this so we can speed up the test time.
|
|
|
|
# For pulp interactions, we only upload to galaxy_ng which shares
|
|
|
|
# the same repo and distribution with pulp_ansible
|
|
|
|
# However, we use galaxy_ng only, since collections are unique across
|
|
|
|
# pulp repositories, and galaxy_ng maintains a 2nd list of published collections
|
|
|
|
- name: setup test collections for install and download test
|
|
|
|
setup_collections:
|
|
|
|
server: galaxy_ng
|
|
|
|
collections: '{{ collection_list }}'
|
|
|
|
signature_dir: '{{ gpg_homedir }}'
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
# Stores the cached test version number index as we run install many times
|
|
|
|
- set_fact:
|
|
|
|
cache_version_build: 0
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection install tests for {{ test_name }}
|
|
|
|
include_tasks: install.yml
|
|
|
|
vars:
|
|
|
|
test_id: '{{ item.name }}'
|
|
|
|
test_name: '{{ item.name }}'
|
|
|
|
test_server: '{{ item.server }}'
|
|
|
|
test_api_server: '{{ item.api_server|default(item.server) }}'
|
|
|
|
requires_auth: '{{ item.requires_auth|default(false) }}'
|
|
|
|
v2: '{{ item.v2|default(false) }}'
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
loop:
|
|
|
|
- name: galaxy_ng
|
|
|
|
server: '{{ galaxy_ng_server }}'
|
|
|
|
v3: true
|
|
|
|
requires_auth: true
|
|
|
|
- name: pulp_v2
|
|
|
|
server: '{{ pulp_server }}primary/api/'
|
|
|
|
api_server: '{{ galaxy_ng_server }}'
|
|
|
|
v2: true
|
|
|
|
|
|
|
|
- name: test installing and downloading collections with the range of supported resolvelib versions
|
|
|
|
include_tasks: supported_resolvelib.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
loop: '{{ supported_resolvelib_versions }}'
|
|
|
|
loop_control:
|
|
|
|
loop_var: resolvelib_version
|
|
|
|
|
Always allow "no-other-choice" pre-release dependencies when resolving collection dependency tree
PR #81606.
Prior to this patch, when `--pre` CLI flag was not passed, the
dependency resolver would treat concrete collection dependency
candidates (Git repositories, subdirs, tarball URLs, or local dirs or
files etc) as not meeting the requirements.
This patch makes it so pre-releases in any concrete artifact
references, and the ones being specifically pinned dependencies or
user requests, met anywhere in the dependency tree, are allowed
unconditionally.
This is achieved by moving the pre-release check from
`is_satisfied_by()` to the `find_matches()` hook, following the
Pip's example.
As a bonus, this change also fixes the situation when a collection
pre-releases weren't considered if it didn't have any stable releases.
This now works even if `--pre` wasn't requested explicitly.
Finally, this patch partially reverts commit
6f4b4c345b44d84cce55ba6502a72b420a52c7b3, except for the tests. And it
also improves the `--pre` hint warning to explain that it mostly
affects Galaxy/Automation Hub-hosted collection releases.
Ref #73416
Ref #79112
Fixes #79168
Fixes #80048
Resolves #81605
Co-authored-by: Sloane Hertel <19572925+s-hertel@users.noreply.github.com>
1 year ago
|
|
|
- name: test choosing pinned pre-releases anywhere in the dependency tree
|
|
|
|
# This is a regression test for the case when the end-user does not
|
|
|
|
# explicitly allow installing pre-release collection versions, but their
|
|
|
|
# precise pins are still selected if met among the dependencies, either
|
|
|
|
# direct or transitive.
|
|
|
|
include_tasks: pinned_pre_releases_in_deptree.yml
|
|
|
|
|
|
|
|
- name: test installing prereleases via scm direct requests
|
|
|
|
# In this test suite because the bug relies on the dep having versions on a Galaxy server
|
|
|
|
include_tasks: virtual_direct_requests.yml
|
|
|
|
|
|
|
|
- name: publish collection with a dep on another server
|
|
|
|
setup_collections:
|
|
|
|
server: secondary
|
|
|
|
collections:
|
|
|
|
- namespace: secondary
|
|
|
|
name: name
|
|
|
|
# parent_dep.parent_collection does not exist on the secondary server
|
|
|
|
dependencies:
|
|
|
|
parent_dep.parent_collection: '1.0.0'
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
- name: install collection with dep on another server
|
|
|
|
command: ansible-galaxy collection install secondary.name -vvv # 3 -v's will show the source in the stdout
|
|
|
|
register: install_cross_dep
|
|
|
|
environment:
|
|
|
|
ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections'
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
- name: get result of install collection with dep on another server
|
|
|
|
slurp:
|
|
|
|
path: '{{ galaxy_dir }}/ansible_collections/{{ item.namespace }}/{{ item.name }}/MANIFEST.json'
|
|
|
|
register: install_cross_dep_actual
|
|
|
|
loop:
|
|
|
|
- namespace: secondary
|
|
|
|
name: name
|
|
|
|
- namespace: parent_dep
|
|
|
|
name: parent_collection
|
|
|
|
- namespace: child_dep
|
|
|
|
name: child_collection
|
|
|
|
- namespace: child_dep
|
|
|
|
name: child_dep2
|
|
|
|
|
|
|
|
- name: assert result of install collection with dep on another server
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- >-
|
|
|
|
"'secondary.name:1.0.0' obtained from server secondary"
|
|
|
|
in install_cross_dep.stdout
|
|
|
|
# pulp_v2 is highest in the list so it will find it there first
|
|
|
|
- >-
|
|
|
|
"'parent_dep.parent_collection:1.0.0' obtained from server galaxy_ng"
|
|
|
|
in install_cross_dep.stdout
|
|
|
|
- >-
|
|
|
|
"'child_dep.child_collection:0.9.9' obtained from server galaxy_ng"
|
|
|
|
in install_cross_dep.stdout
|
|
|
|
- >-
|
|
|
|
"'child_dep.child_dep2:1.2.2' obtained from server galaxy_ng"
|
|
|
|
in install_cross_dep.stdout
|
|
|
|
- (install_cross_dep_actual.results[0].content | b64decode | from_json).collection_info.version == '1.0.0'
|
|
|
|
- (install_cross_dep_actual.results[1].content | b64decode | from_json).collection_info.version == '1.0.0'
|
|
|
|
- (install_cross_dep_actual.results[2].content | b64decode | from_json).collection_info.version == '0.9.9'
|
|
|
|
- (install_cross_dep_actual.results[3].content | b64decode | from_json).collection_info.version == '1.2.2'
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection download tests
|
|
|
|
include_tasks: download.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection verify tests for {{ test_name }}
|
|
|
|
include_tasks: verify.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}'
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|
|
|
|
vars:
|
|
|
|
test_api_fallback: 'galaxy_ng'
|
|
|
|
test_api_fallback_versions: 'v3, pulp-v3, v1'
|
|
|
|
test_name: 'pulp_v2'
|
|
|
|
|
|
|
|
- name: run ansible-galaxy collection list tests
|
|
|
|
include_tasks: list.yml
|
|
|
|
|
|
|
|
- include_tasks: upgrade.yml
|
|
|
|
args:
|
|
|
|
apply:
|
|
|
|
environment:
|
|
|
|
ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}'
|
|
|
|
ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg'
|