#!/usr/bin/python # Copyright: (c) 2020, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type ANSIBLE_METADATA = { 'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community' } DOCUMENTATION = ''' --- module: setup_collections short_description: Set up test collections based on the input description: - Builds and publishes a whole bunch of collections used for testing in bulk. options: server: description: - The Galaxy server to upload the collections to. required: yes type: str token: description: - The token used to authenticate with the Galaxy server. required: yes type: str collections: description: - A list of collection details to use for the build. required: yes type: list elements: dict options: namespace: description: - The namespace of the collection. required: yes type: str name: description: - The name of the collection. required: yes type: str version: description: - The version of the collection. type: str default: '1.0.0' dependencies: description: - The dependencies of the collection. type: dict default: '{}' author: - Jordan Borean (@jborean93) ''' EXAMPLES = ''' - name: Build test collections setup_collections: path: ~/ansible/collections/ansible_collections collections: - namespace: namespace1 name: name1 version: 0.0.1 - namespace: namespace1 name: name1 version: 0.0.2 ''' RETURN = ''' # ''' import os import subprocess import tarfile import tempfile import yaml from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.text.converters import to_bytes from functools import partial from multiprocessing import dummy as threading from multiprocessing import TimeoutError COLLECTIONS_BUILD_AND_PUBLISH_TIMEOUT = 120 def publish_collection(module, collection): namespace = collection['namespace'] name = collection['name'] version = collection['version'] dependencies = collection['dependencies'] use_symlink = collection['use_symlink'] result = {} collection_dir = os.path.join(module.tmpdir, "%s-%s-%s" % (namespace, name, version)) b_collection_dir = to_bytes(collection_dir, errors='surrogate_or_strict') os.mkdir(b_collection_dir) with open(os.path.join(b_collection_dir, b'README.md'), mode='wb') as fd: fd.write(b"Collection readme") galaxy_meta = { 'namespace': namespace, 'name': name, 'version': version, 'readme': 'README.md', 'authors': ['Collection author