ansible-galaxy - remove warning during collection install (#69541)

* ansible-galaxy - remove warning during collection install

If existing collections do not contain a MANIFEST.json, which is common
for collections under development that were not installed from Ansible
Galaxy, fall back to inspecting galaxy.yml rather than displaying a
warning.

A warning will still be displayed in neither a MANIFEST.json nor
galaxy.yml are present.

* Update unit tests
This commit is contained in:
Sam Doran 2020-05-19 11:31:49 -04:00 committed by GitHub
parent dd4219184b
commit f01de15d25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 7 deletions

View file

@ -0,0 +1,4 @@
bugfixes:
- >
ansible-galaxy - hide warning during collection installation if other installed collections
do not contain a ``MANIFEST.json`` (https://github.com/ansible/ansible/issues/67490)

View file

@ -605,7 +605,7 @@ def install_collections(collections, output_path, apis, validate_certs, ignore_e
:param force: Re-install a collection if it has already been installed. :param force: Re-install a collection if it has already been installed.
:param force_deps: Re-install a collection as well as its dependencies if they have already been installed. :param force_deps: Re-install a collection as well as its dependencies if they have already been installed.
""" """
existing_collections = find_existing_collections(output_path) existing_collections = find_existing_collections(output_path, fallback_metadata=True)
with _tempdir() as b_temp_path: with _tempdir() as b_temp_path:
display.display("Process install dependency map") display.display("Process install dependency map")

View file

@ -746,12 +746,34 @@ def test_install_collections_existing_without_force(collection_artifact, monkeyp
# Filter out the progress cursor display calls. # Filter out the progress cursor display calls.
display_msgs = [m[1][0] for m in mock_display.mock_calls if 'newline' not in m[2] and len(m[1]) == 1] display_msgs = [m[1][0] for m in mock_display.mock_calls if 'newline' not in m[2] and len(m[1]) == 1]
assert len(display_msgs) == 4 assert len(display_msgs) == 3
# Msg1 is the warning about not MANIFEST.json, cannot really check message as it has line breaks which varies based
# on the path size assert display_msgs[0] == "Process install dependency map"
assert display_msgs[1] == "Process install dependency map" assert display_msgs[1] == "Starting collection install process"
assert display_msgs[2] == "Starting collection install process" assert display_msgs[2] == "Skipping 'ansible_namespace.collection' as it is already installed"
assert display_msgs[3] == "Skipping 'ansible_namespace.collection' as it is already installed"
for msg in display_msgs:
assert 'WARNING' not in msg
def test_install_missing_metadata_warning(collection_artifact, monkeypatch):
collection_path, collection_tar = collection_artifact
temp_path = os.path.split(collection_tar)[0]
mock_display = MagicMock()
monkeypatch.setattr(Display, 'display', mock_display)
for file in [b'MANIFEST.json', b'galaxy.yml']:
b_path = os.path.join(collection_path, file)
if os.path.isfile(b_path):
os.unlink(b_path)
collection.install_collections([(to_text(collection_tar), '*', None,)], to_text(temp_path),
[u'https://galaxy.ansible.com'], True, False, False, False, False)
display_msgs = [m[1][0] for m in mock_display.mock_calls if 'newline' not in m[2] and len(m[1]) == 1]
assert 'WARNING' in display_msgs[0]
# Makes sure we don't get stuck in some recursive loop # Makes sure we don't get stuck in some recursive loop