summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/ansible-galaxy-collection/tasks/main.yml
blob: 724c861e696d16597bcf8b1b3998f27b2f5c115d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
---
- 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 }}'
    vX: '{{ "v3/" if item.v3|default(false) else "v2/" }}'
  loop:
  - name: pulp_v2
    server: '{{ pulp_server }}published/api/'
  - name: pulp_v3
    server: '{{ pulp_server }}published/api/'
    v3: 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 }}'
    vX: '{{ "v3/" if item.v3|default(false) else "v2/" }}'
    requires_auth: '{{ item.requires_auth|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 }}published/api/'
  - name: pulp_v3
    server: '{{ pulp_server }}published/api/'
    v3: 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

- 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 pulp_v2"
      in install_cross_dep.stdout
    - >-
      "'child_dep.child_collection:0.9.9' obtained from server pulp_v2"
      in install_cross_dep.stdout
    - >-
      "'child_dep.child_dep2:1.2.2' obtained from server pulp_v2"
      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: 'pulp_v2'
    test_api_fallback_versions: 'v1, v2'
    test_name: 'galaxy_ng'
    test_server: '{{ galaxy_ng_server }}'

- 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'