From 04b90369ec386d89b157b47dae51f70da4b1251d Mon Sep 17 00:00:00 2001 From: branic Date: Wed, 19 Feb 2025 05:02:26 +0000 Subject: [PATCH] Update pre-commit --- .../galaxy/galaxy/.ansible-lint | 29 + .../galaxy/galaxy/.ansible/.lock | 0 .../ansible_collections/galaxy/galaxy/.flake8 | 4 + .../galaxy/galaxy/.github/CODE_OF_CONDUCT.md | 3 + .../galaxy/galaxy/.github/CONTRIBUTING.md | 63 + .../.github/ISSUE_TEMPLATE/bug_report.md | 78 + .../galaxy/.github/ISSUE_TEMPLATE/config.yml | 13 + .../.github/ISSUE_TEMPLATE/feature_request.md | 20 + .../galaxy/.github/PULL_REQUEST_TEMPLATE.md | 17 + .../galaxy/galaxy/.github/files/ansible.cfg | 5 + .../galaxy/galaxy/.github/files/galaxy.yml.j2 | 30 + .../workflows/issue-close-inactive.yml | 20 + .../.github/workflows/issue-find-inactive.yml | 21 + .../.github/workflows/issue-labeled.yml | 22 + .../workflows/issue-remove-inactive.yml | 22 + .../galaxy/.github/workflows/pre-commit.yml | 22 + .../galaxy/.github/workflows/release.yml | 44 + .../.github/workflows/update_pre_commit.yml | 18 + .../galaxy/galaxy/.gitignore | 9 + .../galaxy/galaxy/.markdownlint.yml | 21 + .../galaxy/galaxy/.mlc_config.json | 13 + .../galaxy/galaxy/.pre-commit-config.yaml | 32 + .../galaxy/galaxy/.yamllint.yml | 24 + .../galaxy/galaxy/CHANGELOG.rst | 295 ++ .../ansible_collections/galaxy/galaxy/COPYING | 674 ++++ .../galaxy/galaxy/FILES.json | 2917 +++++++++++++++++ .../ansible_collections/galaxy/galaxy/LICENSE | 674 ++++ .../galaxy/galaxy/MANIFEST.json | 39 + .../galaxy/galaxy/README.md | 102 + .../galaxy/galaxy/STANDARDS.md | 13 + .../galaxy/changelogs/.plugin-cache.yaml | 118 + .../galaxy/galaxy/changelogs/changelog.yaml | 296 ++ .../galaxy/galaxy/changelogs/ci_fixes.yml | 4 + .../galaxy/galaxy/changelogs/config.yaml | 34 + .../galaxy/changelogs/fragments/.gitkeep | 0 .../fragments/400-collection-upload.yml | 4 + .../fragments/add_new_ci_workflow.yml | 4 + .../changelogs/fragments/ah_host_env.yml | 4 + .../changelogs/fragments/ansible_config.yml | 9 + .../api_prefix_with_resource_provider.yml | 4 + .../galaxy/changelogs/fragments/argspec.yml | 4 + .../galaxy/changelogs/fragments/async.yml | 4 + .../fragments/bug_collection_delete.yml | 5 + .../fragments/bug_galaxy_path_prefix.yml | 4 + .../collection_overwrite_existing.yml | 4 + .../fragments/collection_remote.yml | 6 + .../collection_remote_requirements.yml | 4 + .../changelogs/fragments/collection_repos.yml | 5 + .../changelogs/fragments/depreciation.yml | 7 + .../galaxy/changelogs/fragments/ee_repos.yml | 4 + .../galaxy/changelogs/fragments/flake8bug.yml | 4 + .../changelogs/fragments/global_proxy.yml | 4 + .../fragments/grou_async_timeout.yml | 4 + .../changelogs/fragments/group_roles.yml | 10 + .../changelogs/fragments/offline_sync.yml | 4 + .../changelogs/fragments/remove_bindep.yml | 4 + .../changelogs/fragments/removed_modules.yml | 4 + .../changelogs/fragments/repositories.yml | 4 + .../changelogs/fragments/request_timeout.yml | 7 + .../galaxy/changelogs/fragments/reroute.yml | 3 + .../changelogs/fragments/roles_token.yml | 8 + .../changelogs/fragments/source_build.yml | 4 + .../changelogs/fragments/token_auth.yml | 6 + .../fragments/update-github-actions.yml | 5 + .../fragments/update_new_ci_workflow.yml | 4 + .../galaxy/galaxy/meta/runtime.yml | 59 + .../galaxy/roles/ansible_config/README.md | 116 + .../roles/ansible_config/defaults/main.yml | 35 + .../ansible_config/meta/argument_specs.yml | 100 + .../galaxy/roles/ansible_config/meta/main.yml | 42 + .../roles/ansible_config/tasks/main.yml | 11 + .../ansible_config/templates/ansible.cfg.j2 | 19 + .../roles/ansible_config/tests/test.yml | 20 + .../ansible_config/tests/vars/config.yml | 16 + .../galaxy/galaxy/roles/collection/README.md | 117 + .../galaxy/roles/collection/defaults/main.yml | 26 + .../roles/collection/meta/argument_specs.yml | 76 + .../galaxy/roles/collection/meta/main.yml | 42 + .../galaxy/roles/collection/tasks/main.yml | 65 + .../galaxy/roles/collection/tests/test.yml | 20 + .../galaxy/roles/collection_remote/README.md | 125 + .../roles/collection_remote/defaults/main.yml | 15 + .../collection_remote/meta/argument_specs.yml | 72 + .../roles/collection_remote/meta/main.yml | 41 + .../roles/collection_remote/tasks/main.yml | 62 + .../roles/collection_remote/tests/test.yml | 20 + .../tests/vars/repositories.yml | 8 + .../roles/collection_repository/README.md | 133 + .../collection_repository/defaults/main.yml | 15 + .../meta/argument_specs.yml | 60 + .../roles/collection_repository/meta/main.yml | 41 + .../collection_repository/tasks/main.yml | 49 + .../collection_repository/tests/test.yml | 20 + .../tests/vars/repositories.yml | 11 + .../collection_repository_sync/README.md | 104 + .../defaults/main.yml | 15 + .../meta/argument_specs.yml | 60 + .../collection_repository_sync/meta/main.yml | 41 + .../collection_repository_sync/tasks/main.yml | 41 + .../collection_repository_sync/tests/test.yml | 20 + .../tests/vars/repositories.yml | 11 + .../galaxy/galaxy/roles/dispatch/README.md | 109 + .../galaxy/roles/dispatch/defaults/main.yml | 17 + .../roles/dispatch/meta/argument_specs.yml | 81 + .../galaxy/roles/dispatch/meta/main.yml | 45 + .../galaxy/roles/dispatch/tasks/main.yml | 13 + .../roles/dispatch/tests/configs/images.yml | 10 + .../dispatch/tests/configs/registries.yml | 7 + .../dispatch/tests/configs/repositories.yml | 6 + .../galaxy/roles/dispatch/tests/test.yml | 16 + .../galaxy/galaxy/roles/ee_image/README.md | 106 + .../galaxy/roles/ee_image/defaults/main.yml | 27 + .../roles/ee_image/meta/argument_specs.yml | 72 + .../galaxy/roles/ee_image/meta/main.yml | 42 + .../galaxy/roles/ee_image/tasks/main.yml | 42 + .../galaxy/roles/ee_image/tests/test.yml | 20 + .../roles/ee_image/tests/vars/ee_images.yml | 10 + .../galaxy/roles/ee_namespace/README.md | 105 + .../roles/ee_namespace/defaults/main.yml | 25 + .../ee_namespace/meta/argument_specs.yml | 72 + .../galaxy/roles/ee_namespace/meta/main.yml | 42 + .../galaxy/roles/ee_namespace/tasks/main.yml | 42 + .../galaxy/roles/ee_namespace/tests/test.yml | 20 + .../ee_namespace/tests/vars/ee_namespaces.yml | 8 + .../galaxy/galaxy/roles/ee_registry/README.md | 109 + .../roles/ee_registry/defaults/main.yml | 31 + .../roles/ee_registry/meta/argument_specs.yml | 84 + .../galaxy/roles/ee_registry/meta/main.yml | 42 + .../galaxy/roles/ee_registry/tasks/main.yml | 48 + .../galaxy/roles/ee_registry/tests/test.yml | 20 + .../ee_registry/tests/vars/ee_registries.yml | 7 + .../galaxy/roles/ee_registry_index/README.md | 105 + .../roles/ee_registry_index/defaults/main.yml | 24 + .../ee_registry_index/meta/argument_specs.yml | 72 + .../roles/ee_registry_index/meta/main.yml | 43 + .../roles/ee_registry_index/tasks/main.yml | 42 + .../roles/ee_registry_index/tests/test.yml | 20 + .../tests/vars/ee_registries.yml | 9 + .../galaxy/roles/ee_registry_sync/README.md | 105 + .../roles/ee_registry_sync/defaults/main.yml | 24 + .../ee_registry_sync/meta/argument_specs.yml | 72 + .../roles/ee_registry_sync/meta/main.yml | 43 + .../roles/ee_registry_sync/tasks/main.yml | 42 + .../roles/ee_registry_sync/tests/test.yml | 20 + .../tests/vars/ee_registries.yml | 9 + .../galaxy/roles/ee_repository/README.md | 107 + .../roles/ee_repository/defaults/main.yml | 24 + .../ee_repository/meta/argument_specs.yml | 72 + .../galaxy/roles/ee_repository/meta/main.yml | 42 + .../galaxy/roles/ee_repository/tasks/main.yml | 46 + .../galaxy/roles/ee_repository/tests/test.yml | 20 + .../tests/vars/ee_repositories.yml | 6 + .../galaxy/roles/ee_repository_sync/README.md | 105 + .../ee_repository_sync/defaults/main.yml | 24 + .../meta/argument_specs.yml | 72 + .../roles/ee_repository_sync/meta/main.yml | 43 + .../roles/ee_repository_sync/tasks/main.yml | 42 + .../roles/ee_repository_sync/tests/test.yml | 20 + .../tests/vars/ee_repositories.yml | 8 + .../galaxy/galaxy/roles/group/README.md | 113 + .../galaxy/roles/group/defaults/main.yml | 22 + .../roles/group/meta/argument_specs.yml | 72 + .../galaxy/galaxy/roles/group/meta/main.yml | 42 + .../galaxy/galaxy/roles/group/tasks/main.yml | 77 + .../galaxy/galaxy/roles/group/tests/test.yml | 20 + .../galaxy/roles/group/tests/vars/groups.yml | 5 + .../galaxy/galaxy/roles/group_roles/README.md | 155 + .../roles/group_roles/defaults/main.yml | 21 + .../roles/group_roles/meta/argument_specs.yml | 72 + .../galaxy/roles/group_roles/meta/main.yml | 44 + .../galaxy/roles/group_roles/tasks/main.yml | 39 + .../galaxy/roles/group_roles/tests/test.yml | 20 + .../group_roles/tests/vars/group_roles.yml | 36 + .../galaxy/galaxy/roles/namespace/README.md | 128 + .../galaxy/roles/namespace/defaults/main.yml | 33 + .../roles/namespace/meta/argument_specs.yml | 76 + .../galaxy/roles/namespace/meta/main.yml | 42 + .../galaxy/roles/namespace/tasks/main.yml | 60 + .../galaxy/roles/namespace/tests/test.yml | 20 + .../roles/namespace/tests/vars/namespaces.yml | 14 + .../galaxy/roles/offline_sync/README.md | 101 + .../roles/offline_sync/defaults/main.yml | 13 + .../offline_sync/meta/argument_specs.yml | 47 + .../galaxy/roles/offline_sync/meta/main.yml | 41 + .../galaxy/roles/offline_sync/tasks/main.yml | 80 + .../offline_sync/templates/ansible.cfg.j2 | 19 + .../offline_sync/templates/collections.yml.j2 | 6 + .../templates/collections_list.yml.j2 | 14 + .../galaxy/roles/offline_sync/tests/test.yml | 13 + .../galaxy/galaxy/roles/publish/README.md | 111 + .../galaxy/roles/publish/defaults/main.yml | 30 + .../roles/publish/meta/argument_specs.yml | 93 + .../galaxy/galaxy/roles/publish/meta/main.yml | 43 + .../galaxy/roles/publish/tasks/main.yml | 146 + .../galaxy/roles/publish/tests/test.yml | 20 + .../roles/publish/tests/vars/collections.yml | 9 + .../galaxy/galaxy/roles/repository/README.md | 130 + .../galaxy/roles/repository/defaults/main.yml | 15 + .../roles/repository/meta/argument_specs.yml | 60 + .../galaxy/roles/repository/meta/main.yml | 41 + .../galaxy/roles/repository/tasks/main.yml | 72 + .../galaxy/roles/repository/tests/test.yml | 20 + .../repository/tests/vars/repositories.yml | 5 + .../galaxy/roles/repository_sync/README.md | 106 + .../roles/repository_sync/defaults/main.yml | 15 + .../repository_sync/meta/argument_specs.yml | 60 + .../roles/repository_sync/meta/main.yml | 42 + .../roles/repository_sync/tasks/main.yml | 53 + .../roles/repository_sync/tests/test.yml | 20 + .../tests/vars/repositories.yml | 5 + .../galaxy/galaxy/roles/role/README.md | 127 + .../galaxy/roles/role/defaults/main.yml | 23 + .../galaxy/roles/role/meta/argument_specs.yml | 72 + .../galaxy/galaxy/roles/role/meta/main.yml | 42 + .../galaxy/galaxy/roles/role/tasks/main.yml | 41 + .../galaxy/galaxy/roles/role/tests/test.yml | 20 + .../galaxy/roles/role/tests/vars/roles.yml | 10 + .../galaxy/galaxy/roles/user/README.md | 115 + .../galaxy/roles/user/defaults/main.yml | 29 + .../galaxy/roles/user/meta/argument_specs.yml | 72 + .../galaxy/galaxy/roles/user/meta/main.yml | 42 + .../galaxy/galaxy/roles/user/tasks/main.yml | 47 + .../galaxy/galaxy/roles/user/tests/test.yml | 20 + .../galaxy/roles/user/tests/vars/users.yml | 13 + .../galaxy/galaxy/tests/README.md | 153 + .../galaxy/tests/collections/requirements.yml | 4 + .../galaxy/galaxy/tests/config.yml | 6 + .../galaxy/galaxy/tests/pah_configure.yml | 80 + .../ah_configs/ah_ansible_config.yml | 16 + .../tests/playbooks/ah_configs/ah_auth.yml | 14 + .../playbooks/ah_configs/ah_collections.yml | 40 + .../ah_configs/ah_ee_repositories.yml | 49 + .../playbooks/ah_configs/ah_group_roles.yml | 36 + .../playbooks/ah_configs/ah_namespaces.yml | 17 + .../playbooks/ah_configs/ah_repository.yml | 47 + .../tests/playbooks/ah_configs/ah_roles.yml | 14 + .../tests/playbooks/ah_configs/ah_user.yml | 46 + .../files/collection_requirement_file.yml | 6 + .../tests/tasks/files/ansible.cfg.example | 8 + .../tests/tasks/manage_ansible_config.yml | 31 + .../tasks/manage_collection_namespaces.yml | 12 + .../tests/tasks/manage_collection_publish.yml | 12 + .../galaxy/tests/tasks/manage_ee_images.yml | 12 + .../tests/tasks/manage_ee_namespaces.yml | 12 + .../tests/tasks/manage_ee_registries.yml | 12 + .../tasks/manage_ee_registry_indices.yml | 12 + .../tests/tasks/manage_ee_registry_sync.yml | 12 + .../tests/tasks/manage_ee_repositories.yml | 12 + .../tests/tasks/manage_ee_repository_sync.yml | 12 + .../galaxy/tests/tasks/manage_groups.yml | 12 + .../galaxy/tests/tasks/manage_users.yml | 12 + .../galaxy/tests/vars/ah_ansible_config.yml | 20 + .../tests/vars/ah_collection_namespaces.yml | 16 + .../tests/vars/ah_collection_publish.yml | 10 + .../galaxy/galaxy/tests/vars/ah_ee_images.yml | 12 + .../galaxy/tests/vars/ah_ee_namespaces.yml | 12 + .../galaxy/tests/vars/ah_ee_registries.yml | 18 + .../tests/vars/ah_ee_registry_indices.yml | 10 + .../galaxy/tests/vars/ah_ee_registry_sync.yml | 10 + .../galaxy/tests/vars/ah_ee_repositories.yml | 11 + .../tests/vars/ah_ee_repository_sync.yml | 10 + .../galaxy/galaxy/tests/vars/ah_groups.yml | 9 + .../galaxy/galaxy/tests/vars/ah_users.yml | 16 + .../galaxy/galaxy/tests/vars/pah_vars.yml | 8 + .pre-commit-config.yaml | 6 +- 265 files changed, 14188 insertions(+), 3 deletions(-) create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.ansible-lint create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.ansible/.lock create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.flake8 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/CODE_OF_CONDUCT.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/CONTRIBUTING.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/files/ansible.cfg create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/files/galaxy.yml.j2 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-close-inactive.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-find-inactive.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-labeled.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-remove-inactive.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/pre-commit.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/release.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/update_pre_commit.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.gitignore create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.markdownlint.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.mlc_config.json create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.pre-commit-config.yaml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/.yamllint.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/CHANGELOG.rst create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/COPYING create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/FILES.json create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/LICENSE create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/MANIFEST.json create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/STANDARDS.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/.plugin-cache.yaml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/changelog.yaml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/ci_fixes.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/config.yaml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/.gitkeep create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/400-collection-upload.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/add_new_ci_workflow.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ah_host_env.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ansible_config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/api_prefix_with_resource_provider.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/argspec.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/async.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_collection_delete.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_galaxy_path_prefix.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_overwrite_existing.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote_requirements.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_repos.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/depreciation.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ee_repos.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/flake8bug.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/global_proxy.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/grou_async_timeout.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/group_roles.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/offline_sync.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/remove_bindep.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/removed_modules.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/request_timeout.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/reroute.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/roles_token.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/source_build.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/token_auth.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update-github-actions.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update_new_ci_workflow.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/meta/runtime.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/templates/ansible.cfg.j2 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/vars/config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/vars/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/vars/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/vars/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/images.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/vars/ee_images.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/vars/ee_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/vars/ee_registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/vars/ee_registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/vars/ee_registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/vars/ee_repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/vars/ee_repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/vars/groups.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/vars/group_roles.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/vars/namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/ansible.cfg.j2 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections.yml.j2 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections_list.yml.j2 create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/vars/collections.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/vars/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/vars/repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/vars/roles.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/defaults/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/argument_specs.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tasks/main.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/test.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/vars/users.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/README.md create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/collections/requirements.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/pah_configure.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ansible_config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_auth.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_collections.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ee_repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_group_roles.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_repository.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_roles.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_user.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/files/collection_requirement_file.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/files/ansible.cfg.example create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ansible_config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_publish.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_images.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_indices.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_sync.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repository_sync.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_groups.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_users.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ansible_config.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_publish.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_images.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_namespaces.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registries.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_indices.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_sync.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repositories.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repository_sync.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_groups.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_users.yml create mode 100644 .ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/pah_vars.yml diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.ansible-lint b/.ansible/collections/ansible_collections/galaxy/galaxy/.ansible-lint new file mode 100644 index 00000000..5d381666 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.ansible-lint @@ -0,0 +1,29 @@ +--- +# The exclude_paths does not appear to be working in pre-commit +# this issue describes similar behavior but suggested fix doesn't work +# https://github.com/ansible/ansible-lint/issues/371 +# exclude_paths: +# - roles/master_role_example/ +exclude_paths: + - '.github/' + - 'roles/master_role_example/' + - 'changelogs/' + - '*.py' +parseable: true +use_default_rules: true +# https://github.com/ansible/ansible-lint/issues/808 +# with verbosity set to 1, its dumping 'unknown file type messages' +# verbosity: 1 +skip_list: + - meta-unsupported-ansible + - meta-runtime # This collection with the appropriate awx.awx or ansible.controller still works with older ansible. + - fqcn[keyword] + - role-name[path] + - var-naming[no-role-prefix] +warn_list: + - jinja[invalid] # Temporarily adding this due to https://github.com/ansible/ansible-lint/issues/3048 +kinds: + - playbooks: "**/examples/*.{yml,yaml}" + - tasks: "**/examples/tasks/*.yml" + - vars: "**/examples/vars/*.yml" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.ansible/.lock b/.ansible/collections/ansible_collections/galaxy/galaxy/.ansible/.lock new file mode 100644 index 00000000..e69de29b diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.flake8 b/.ansible/collections/ansible_collections/galaxy/galaxy/.flake8 new file mode 100644 index 00000000..713565b1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length=160 +ignore=E402 +extend-ignore = E203, W503 diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CODE_OF_CONDUCT.md b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..bbadfd89 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# Community Code of Conduct + +Please see the [Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html). diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CONTRIBUTING.md b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CONTRIBUTING.md new file mode 100644 index 00000000..c2e3e17b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/CONTRIBUTING.md @@ -0,0 +1,63 @@ +# How to Contribute + +We welcome contributions from the community. Here are a few ways you can help us improve. + +## Open an Issue + +If you see something you'd like changed, but aren't sure how to change it, submit an issue describing what you'd like to see. + +## Working Locally + +Python's pre-commit tool can be installed, and hooks installed, to cleanup whitespace, newlines, and run yamllint and ansible-lint against your local changes before committing. This will help you avoid failures in the github workflows. + +1. Create a local virtual environment for galaxy_configurations (suggested, its your system!) +2. Use pip to install pre-commit in your environment of choice: `pip install pre-commit` +3. Install pre-commit hooks with `pre-commit install --install-hooks -c .github/workflow-config/.pre-commit-config.yml` +4. With hooks installed, they will be run automatically when you call `git commit`, blocking commit if any hooks fail. +5. [Optional] If you want to ignore hook failures and commit anyway, use `git commit -n` +6. [Optional] Run pre-commit checks at any time with `pre-commit run --all -c .github/workflow-config/.pre-commit-config.yml`. + +Please see pre-commit documentation for further explanation: [Pre-commit](https://pre-commit.com/) + +## Automation Hub API Spec + + For development purposes it can help to have a version of the Automation Hub API spec available to you. You can find this by navigating to `https:///api/galaxy/v3/openapi.yaml`. VSCode extensions exist to render this file using Swagger. + +## Submit a Pull Request + +If you feel like getting your hands dirty, feel free to make the change yourself. Here's how: + +1. Fork the repo on Github, and then clone it locally. +2. Create a branch named appropriately for the change you are going to make. Ensure this branch starts from an up to date pull of the `devel` branch (the default branch). +3. Make your code change. +4. If you are creating a new role, please add a test for it in our [testing playbooks.](https://github.com/ansible/galaxy_collection/tree/devel/tests/playbooks) by adding a new role entry and adding the appropriate yaml file with test data in the ah_configs directory. +5. Add a changelog fragment in `changelogs/fragments` as per +6. Push your code change up to your forked repo. +7. Open a Pull Request to merge your changes to this repo (against the `devel` branch). The comment box will be filled in automatically via a template. +8. All Pull Requests will be subject to Ansible and Yaml Linting checks. Please make sure that your code complies and fix any warnings that arise. These are checks that appear at the bottom of your Pull Request. +9. All Pull requests are subject to Testing against being used in automation hub. As above there is a check at the bottom of your pull request for this named integration. + +See [Using Pull Requests](https://help.github.com/articles/using-pull-requests/) got more information on how to use GitHub PRs. + +For an in depth guide on how to contribute see [this article](https://opensource.com/article/19/7/create-pull-request-github) + +Note that we follow the [Automation Good Practices](https://redhat-cop.github.io/automation-good-practices) and so are you expected to do. + +Use our live chat Matrix room [#aap_config_as_code:ansible.com](https://matrix.to/#/#aap_config_as_code:ansible.com). + +For the full list of Ansible IRC and Mailing list, please see the +[Ansible Communication] page. +Release announcements will be made to the [Ansible Announce] list. + +Possible security bugs should be reported via email +to . + +## Code of Conduct + +As with all Ansible projects, we have a [Code of Conduct]. + +[ansible announce](https://groups.google.com/forum/#!forum/ansible-announce) +[ansible communication](https://docs.ansible.com/ansible/latest/community/communication.html) +[code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html) +[creating your fork on github](https://guides.github.com/activities/forking/) +[supported ansible versions](https://docs.ansible.com/ansible-core/devel/reference_appendices/release_and_maintenance.html#ansible-core-release-cycle) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/bug_report.md b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..1ba0af44 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,78 @@ +--- +name: Bug report +about: Create a bug report. Please test against the latest release before submitting + it. For anything else, please use Forums link below. +title: '' +labels: bug, new +assignees: '' + +--- + + + + +## Summary + + + +## Issue Type + +- Bug Report + +## Ansible, Collection, Private Automation Hub details + + + +```console (paste below) +ansible --version + +ansible-galaxy collection list + +Private Automation Hub version + +``` + +- ansible installation method: one of source, pip, OS package, EE + +## OS / ENVIRONMENT + + + +## Desired Behavior + + + +## Actual Behavior + + + +Please give some details of what is actually happening. +Include a [minimum complete verifiable example] with: + +- playbook / task +- configuration file / list +- error + + + +```console (error) + +``` + +## STEPS TO REPRODUCE + + + + + +```yaml (playbook/task) + +``` + +```yaml (config/list/array/variables) + +``` + + + + diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..4c4733d6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,13 @@ +--- +# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser +blank_issues_enabled: false # default is true +contact_links: + - name: Feature requests + url: https://github.com/redhat-cop/ah_configuration/discussions/categories/ideas + about: Suggest an idea for this project + - name: Discussions + url: https://github.com/redhat-cop/ah_configuration/discussions + about: Any kind of questions should go on the forum. + - name: Ansible Code of Conduct + url: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html + about: Be nice to other members of the community. Behave. diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/feature_request.md b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..ece6c8d9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement, new +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/PULL_REQUEST_TEMPLATE.md b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..a6884a6d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ + +# What does this PR do? + + + +# How should this be tested? + + + +# Is there a relevant Issue open for this? + + +resolves #[number] + +# Other Relevant info, PRs, etc + + diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/ansible.cfg b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/ansible.cfg new file mode 100644 index 00000000..32ea1d2f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/ansible.cfg @@ -0,0 +1,5 @@ +[defaults] +collections_paths=collections +roles_path=roles/ +module_utils=plugins/module_utils +library=plugins/modules diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/galaxy.yml.j2 b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/galaxy.yml.j2 new file mode 100644 index 00000000..864cebb5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/files/galaxy.yml.j2 @@ -0,0 +1,30 @@ +--- +authors: + - Sean Sullivan @sean-m-sullivan + - Tom Page @Tompage1994 + - David Danielsson @djdanielsson +dependencies: {} +description: Ansible content that interacts with the Ansible Automation Hub or Galaxy NG API. +documentation: https://github.com/redhat-cop/ah_configuration/blob/master/README.md +license: + - GPL-3.0-only +namespace: {{ collection_namespace }} +name: {{ collection_name }} +version: {{ collection_version }} +readme: README.md +repository: {{ collection_repo }} +issues: {{ collection_repo }}/issues +tags: + - cloud + - infrastructure + - galaxy + - ansible + - galaxy + - automation +build_ignore: + - tools + - setup.cfg + - galaxy.yml.j2 + - template_galaxy.yml + - '*.tar.gz' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-close-inactive.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-close-inactive.yml new file mode 100644 index 00000000..bbf656ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-close-inactive.yml @@ -0,0 +1,20 @@ +--- +# https://github.com/marketplace/actions/issues-helper +name: Check inactive + +on: + schedule: + - cron: "0 6 * * *" + +jobs: + close-inactive-issues: + runs-on: ubuntu-latest + steps: + - name: close-issues + uses: actions-cool/issues-helper@v3 + with: + actions: 'close-issues' + token: ${{ secrets.GITHUB_TOKEN }} + labels: 'need info, inactive' + inactive-day: 7 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-find-inactive.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-find-inactive.yml new file mode 100644 index 00000000..bd397f61 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-find-inactive.yml @@ -0,0 +1,21 @@ +--- +# https://github.com/marketplace/actions/issues-helper +name: Check inactive + +on: + schedule: + - cron: "0 5 * * *" + +jobs: + check-inactive: + runs-on: ubuntu-latest + steps: + - name: check-inactive + uses: actions-cool/issues-helper@v3 + with: + actions: 'check-inactive' + token: ${{ secrets.GITHUB_TOKEN }} + inactive-day: 30 + issue-state: open + exclude-labels: 'backlog, help wanted' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-labeled.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-labeled.yml new file mode 100644 index 00000000..cebcb73a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-labeled.yml @@ -0,0 +1,22 @@ +--- +# https://github.com/marketplace/actions/issues-helper +name: Issue Labeled + +on: + issues: + types: [labeled] + +jobs: + issue-labeled: + runs-on: ubuntu-latest + steps: + - name: Create comment + uses: actions-cool/issues-helper@v3 + if: github.event.label.name == 'inactive' || github.event.label.name == 'need info' + with: + actions: 'create-comment' + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + Hello @${{ github.event.issue.user.login }}. Please ensure that you have filled out the issue template as much as possible and have answered any further questions asked. If you have not done so in the next 7 days this issue will be automatically closed.' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-remove-inactive.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-remove-inactive.yml new file mode 100644 index 00000000..29bd15ca --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/issue-remove-inactive.yml @@ -0,0 +1,22 @@ +--- +# https://github.com/marketplace/actions/issues-helper +name: Issue Remove Labels + +on: + issues: + types: [edited, reopened, labeled] + issue_comment: + types: [created, edited] + +jobs: + remove-inactive: + runs-on: ubuntu-latest + steps: + - name: remove inactive + if: github.event.issue.state == 'open' && github.event.issue.user != 'github-actions' + uses: actions-cool/issues-helper@v3 + with: + actions: 'remove-labels' + issue-number: ${{ github.event.issue.number }} + labels: 'inactive' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/pre-commit.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/pre-commit.yml new file mode 100644 index 00000000..e269da02 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/pre-commit.yml @@ -0,0 +1,22 @@ +--- +# This workflow action will run pre-commit, which will execute ansible and yaml linting +# See .pre-commit-config.yaml for what hooks are executed +name: pre-commit tests + + +on: + pull_request: + push: + schedule: + - cron: "0 6 * * *" + +jobs: + pre-commit_and_sanity: + uses: "redhat-cop/ansible_collections_tooling/.github/workflows/pre_commit_and_sanity.yml@main" + with: + collection_namespace: galaxy + collection_name: galaxy + collection_version: 1.1.1-devel + collection_repo: https://github.com/ansible/galaxy_collection + collection_dependencies: ansible.hub +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/release.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/release.yml new file mode 100644 index 00000000..d7d3b506 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/release.yml @@ -0,0 +1,44 @@ +--- +# This workflow action will run pre-commit, which will execute ansible and yaml linting +# See .pre-commit-config.yaml for what hooks are executed +name: Release + +on: + release: + types: + - published + +jobs: + ci_standalone: + strategy: + fail-fast: false + matrix: + galaxy_ng_version: + - stable-4.4 + - stable-4.5 + - stable-4.6 + - stable-4.7 + - master + # - master disabled until build issue resolved + uses: "./.github/workflows/ci_standalone_versioned.yml" + with: + galaxy_ng_version: ${{ matrix.galaxy_ng_version }} + secrets: + redhat_catalog_username: ${{ secrets.REDHAT_CATALOG_USERNAME }} + redhat_catalog_password: ${{ secrets.REDHAT_CATALOG_PASSWORD }} + release: + needs: + - ci_standalone + uses: "redhat-cop/ansible_collections_tooling/.github/workflows/release_pipeline_single.yml@main" + with: + collection_namespace: infra + collection_name: ah_configuration + collection_version: ${{ github.ref_name }} + collection_repo: https://github.com/ansible/galaxy_collection + quay_username: redhat_cop + secrets: + galaxy_api_key: ${{ secrets.GALAXY_INFRA_KEY }} + token: ${{ secrets.GITHUB_TOKEN }} + quay_token: ${{ secrets.quay_token }} + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/update_pre_commit.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/update_pre_commit.yml new file mode 100644 index 00000000..edbd0527 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.github/workflows/update_pre_commit.yml @@ -0,0 +1,18 @@ +--- +# This workflow action will run pre-commit, which will execute ansible and yaml linting +# See .pre-commit-config.yaml for what hooks are executed +name: Update pre-commit configuration + + +on: + schedule: + - cron: "0 5 * * *" + +jobs: + pre-commit: + uses: "redhat-cop/ansible_collections_tooling/.github/workflows/update_precommit.yml@main" + with: + github_actor: ${{ github.actor }} + secrets: + token: ${{ secrets.GITHUB_TOKEN }} +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.gitignore b/.ansible/collections/ansible_collections/galaxy/galaxy/.gitignore new file mode 100644 index 00000000..a9b73b6d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.gitignore @@ -0,0 +1,9 @@ +collections/* +!collections/requirements.yml +/*.tar.gz +temp_test_module.yml +test_playbook.yml +test/ +tests/output +.vscode +__pycache__ diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.markdownlint.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.markdownlint.yml new file mode 100644 index 00000000..eb1dcb86 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.markdownlint.yml @@ -0,0 +1,21 @@ +--- +default: true + +# MD003/heading-style/header-style - Heading style +# This will ensure that the heading format is consistent across all markdown files +MD003: + style: "atx" + +# MD013/line-length - Line length +# Setting to false to match the yamllint setting +MD013: false + +# MD046/code-block-style - Code block style +# This will ensure that code block format is consistent across all markdown files +MD0046: + style: fenced + +MD033: + allowed_elements: + - "br" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.mlc_config.json b/.ansible/collections/ansible_collections/galaxy/galaxy/.mlc_config.json new file mode 100644 index 00000000..37cac7cb --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.mlc_config.json @@ -0,0 +1,13 @@ +{ + "ignorePatterns": [ + { + "pattern": "^https://cloud.redhat.com" + }, + { + "pattern": "^https://console.redhat.com" + }, + { + "pattern": "^https://sso.redhat.com" + } + ] +} diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.pre-commit-config.yaml b/.ansible/collections/ansible_collections/galaxy/galaxy/.pre-commit-config.yaml new file mode 100644 index 00000000..b774ac07 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.pre-commit-config.yaml @@ -0,0 +1,32 @@ +--- +repos: + - repo: 'https://github.com/pre-commit/pre-commit-hooks' + rev: v5.0.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + - repo: 'https://github.com/ansible-community/ansible-lint.git' + rev: v25.1.3 + hooks: + # see discussions here about what arguments are used, and behavior + # https://github.com/ansible/ansible-lint/issues/649 + # Roles will trigger an "unknown file type" + # https://github.com/ansible/ansible-lint/issues/808 + - id: ansible-lint + pass_filenames: false + always_run: true + entry: "ansible-lint" + args: + - "--profile=production" + - repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.17.2 + hooks: + - id: markdownlint-cli2 + - repo: https://github.com/pycqa/flake8 + rev: 7.1.2 + hooks: + - id: flake8 + name: flake8 + entry: flake8 + types: [python] +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/.yamllint.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/.yamllint.yml new file mode 100644 index 00000000..ffd9642d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/.yamllint.yml @@ -0,0 +1,24 @@ +--- +extends: default + +ignore: | + changelogs + +rules: + # 80 chars should be enough, but don't fail if a line is longer + line-length: disable + colons: + max-spaces-before: 0 + max-spaces-after: -1 + document-end: {present: true} + indentation: + level: error + # Require indentation https://redhat-cop.github.io/automation-good-practices/#_yaml_and_jinja2_syntax + indent-sequences: true + truthy: + level: error + # Allow only YAML 1.2 booleans https://redhat-cop.github.io/automation-good-practices/#_yaml_and_jinja2_syntax + allowed-values: + - 'true' + - 'false' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/CHANGELOG.rst b/.ansible/collections/ansible_collections/galaxy/galaxy/CHANGELOG.rst new file mode 100644 index 00000000..cdc9d74c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/CHANGELOG.rst @@ -0,0 +1,295 @@ +==================================== +galaxy.galaxy Release Notes +==================================== + +.. contents:: Topics + + +v1.1.1 +====== + +Minor Changes +------------- + +- Simplify dispatch role +- remove unused import module + +Bugfixes +-------- + +- add ah_token for the community repository. This commit adds that. + +v1.1.0 +====== + +Minor Changes +------------- + +- Added ansible role 'role' for creating roles of group permsions. +- Fixed issue with ah_ee_repository working on newer versions. +- Fixed issue with ah_namespace delete +- Updated ah_collection_upload to exit properly. +- Updated ah_role to not require permisions in order to allow for deletion. +- Updated testing coverage. +- add the ah_role module to add role permisions. +- added better error catching to ah_ee_registery_index/sync to handle when a registery is not found. +- ah_ee_repository include/exclude tags are no longer mutually exclusive +- updated UI get_object method to use version variable. +- updated ah_ee_image to work with galaxy 4.7+ +- updated ah_ee_repository to work with galaxy 4.6+ + +Breaking Changes / Porting Guide +-------------------------------- + +- Introduces a `sync` option to the ee_registry_sync role on the `ah_ee_registries` variable which by default is false and which is required true to sync the registry. +- Introduces a `sync` option to the ee_repository_sync role on the `ah_ee_repositories` variable which by default is false and which is required true to sync the repository. +- Introduces an `index` option to the ee_registry_index role on the `ah_ee_registries` variable which by default is false and which is required true to index the registry. +- Removed ah_ee_registry new name option. This affected underlying images indexed from the registery leaving them abandoned, and subsequent indexes of the renamned registery would fail. +- removed the options of new_name and delete_namespace_if_empty from ah_ee_repository. This is due to limitations of the API that broke pushing images to old repository name. + +New Modules +----------- + +- galaxy.galaxy.ah_role - Manage a role of group permissions + +v1.0.1 +====== + +Minor Changes +------------- + +- Added option to pull all collections from a specific repository +- Collection module and role - add way to get version from path for auto approval if not provided. +- Update Publish role to be namespace agnostic. + +Bugfixes +-------- + +- Checks for username and password passed to api lookup plugin +- Removed incorrect reference to oauth token abilities for api lookup plugin. + +v1.0.0 +====== + +Minor Changes +------------- + +- Added timeout and interval for waiting for auto approval on ah_collection module. +- Added timeout and interval for waiting for auto approval on collection role. +- Changed default of overwrite_existing var in collection role to False to match module +- groups option of ah_namespace module changed to accept just the names of groups who own the namespace + +Bugfixes +-------- + +- Enforced type checking on groups option of ah_namespace +- Fixed doc issue in ah_collection module where overwrite_existing option was reported with default True when functionality was False +- Fixed doc issue in ah_collection_upload module where wait option was reported with default True when functionality was False +- Fixed doc issue in collection role where ah_overwrite_existing option was reported with default True when functionality was False +- Removed ah_token from roles where the modules don't accept it +- Secret fields (password, client_key, proxy_password) set to no_log in ah_ee_registry module +- Updated ah_ee_namespace to use object_roles instead of object_permissions when inspecting group permissions +- token option in ah_repository set as no_log to prevent exposure of secret +- url field explicitly required when state=present in ah_ee_registry module + +v0.9.2 +====== + +Minor Changes +------------- + +- Add markdown linter +- Fix all linter reported errors +- Move linter configurations to root directory +- Update linter versions +- add `ah_token` so `repository_sync` that was missing +- created a role from ah_collection module + +Deprecated Features +------------------- + +- ah_token auth for modules + +Bugfixes +-------- + +- Fixed a major bug that was preventing publish role from uploading new versions without removing all prior versions. + +Known Issues +------------ + +- ah_overwrite_existing when set to true, will sometimes cause errors due to the time it takes to delete namespaces +- ah_token does not work in every module (errors saying parameter is not supported) +- auto_approve does not work when publishing new collections (throws error) + +v0.9.1 +====== + +Major Changes +------------- + +- Adds the ah_api lookup plugin to do generic API lookups on endpoints. + +v0.8.1 +====== + +Major Changes +------------- + +- Allows basic auth as backup method to enable keycloak based users to authenticate. + +Minor Changes +------------- + +- Added certificate and key authentication for ee registries in ah_ee_registry module +- Added repository role +- Added repository sync role +- Added several options to the ah_repository module + +Bugfixes +-------- + +- Fixed an issue where a genuine API error would cause a module to have an unhandled error. +- Fixed incorrect task names on serveral roles +- Fixed issue where groups was required to create a namespace using ah_namespace module + +v0.8.0 +====== + +Minor Changes +------------- + +- Changed default retries on async tasks in roles to 50 + +Bugfixes +-------- + +- Fix issue where all roles had the wrong variable set and caused failures +- Fixed issue with new variables not included in ee_repository role +- Fixed issue with sync and index roles where a no_log variable was incorrect + +v0.7.0 +====== + +Major Changes +------------- + +- Added ability to add remote repositories in ah_ee_repository module. +- Adds ah_ee_registry module +- Adds ah_ee_registry_index module +- Adds ah_ee_registry_sync module +- Adds ee_registry role +- Adds ee_registry_index role +- Adds ee_registry_sync role +- module ah_collection can now upload and delete collections + +Minor Changes +------------- + +- Added group permissions for remote registry management - add_containerregistryremote, change_containerregistryremote, delete_containerregistryremote. +- ah_hostname becomes an alias for ah_host in modules +- ah_hostname is now the default option for roles, though ah_host remains an alias + +Breaking Changes / Porting Guide +-------------------------------- + +- Options for state in ah_ee_image and ah_ee_repository modules changed from 'updated' to 'present' as a bug fix. +- module ah_collection_upload has been removed. + +New Modules +----------- + +- galaxy.galaxy.ah_ee_registry - Manage private automation hub execution environment remote registries. + +v0.6.1 +====== + +Minor Changes +------------- + +- added namespace state absent module parameter +- added new permision options to the ah_group_perm module and group role. +- ah_ee_namespace and ah_ee_repository - adding the ``new_name`` parameter so that users can rename namespaces and repositories (https://github.com/ansible/galaxy_collection/issues/44) +- removed dependency for ansible.galaxy module which wasn't accessible in 2.12 Ansible + +v0.5.5 +====== + +Bugfixes +-------- + +- Add the `no_log` attribute to the `password` and `proxy_password` fields of the `ah_repository` module (Resolves + +v0.5.0 +====== + +Major Changes +------------- + +- Added execution_environment plugins +- Added user, group and group_perm plugins + +v0.4.3 +====== + +Minor Changes +------------- + +- Added meta/runtime.yml file which is now a requirement for collections to be released on Galaxy +- Added requirements_file option to ah_repository module + +v0.4.1 +====== + +Bugfixes +-------- + +- Now retries auto-approving on the publish role in case there is a delay in the collection making it to be ready for approval. + +v0.4.0 +====== + +Major Changes +------------- + +- Added ah_repository_sync module to sync remote repositories for Automation Hub. + +v0.3.1 +====== + +Bugfixes +-------- + +- Fixes issue in ah_repository where not specifying a requirements list causedd a failure. + +v0.3.0 +====== + +Major Changes +------------- + +- Added ah_repository module to configure the remote repositories for Automation Hub. + +v0.2.0 +====== + +Major Changes +------------- + +- Added ah_approval module to approve a colelction which has been uploaded. +- Added ah_collection_uploads module +- Publish role - Ability to approve role added +- Publish role - rewritten to use internal modules + +Breaking Changes / Porting Guide +-------------------------------- + +- Publish role - repo_name variable renamed to collection_name. + +v0.1.0 +====== + +Major Changes +------------- + +- Initial release of ansible_config, namespace, publish roles and ah_namespace, ah_token modules diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/COPYING b/.ansible/collections/ansible_collections/galaxy/galaxy/COPYING new file mode 100644 index 00000000..b743e04e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/COPYING @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified +it, and giving a relevant date. + +b) The work must carry prominent notices stating that it is +released under this License and any conditions added under section +7. This requirement modifies the requirement in section 4 to +"keep intact all notices". + +c) You must license the entire work, as a whole, under this +License to anyone who comes into possession of a copy. This +License will therefore apply, along with any applicable section 7 +additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no +permission to license the work in any other way, but it does not +invalidate such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your +work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +a) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium +customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a +written offer, valid for at least three years and valid for as +long as you offer spare parts or customer support for that product +model, to give anyone who possesses the object code either (1) a +copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical +medium customarily used for software interchange, for a price no +more than your reasonable cost of physically performing this +conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the +written offer to provide the Corresponding Source. This +alternative is allowed only occasionally and noncommercially, and +only if you received the object code with such an offer, in accord +with subsection 6b. + +d) Convey the object code by offering access from a designated +place (gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to +copy the object code is a network server, the Corresponding Source +may be on a different server (operated by you or a third party) +that supports equivalent copying facilities, provided you maintain +clear directions next to the object code saying where to find the +Corresponding Source. Regardless of what server hosts the +Corresponding Source, you remain obligated to ensure that it is +available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided +you inform other peers where the object code and Corresponding +Source of the work are being offered to the general public at no +charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the +terms of sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or +author attributions in that material or in the Appropriate Legal +Notices displayed by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +e) Declining to grant rights under trademark law for use of some +trade names, trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that +material by anyone who conveys the material (or modified versions of +it) with contractual assumptions of liability to the recipient, for +any liability that these contractual assumptions directly impose on +those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + +Copyright (C) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) +This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/FILES.json b/.ansible/collections/ansible_collections/galaxy/galaxy/FILES.json new file mode 100644 index 00000000..432cb96d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/FILES.json @@ -0,0 +1,2917 @@ +{ + "files": [ + { + "name": ".", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/tests/vars/users.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1fbfd41e7f01ff8224c4e967e79857abe67dba33b2d338fabe38bf00f3684312", + "format": 1 + }, + { + "name": "roles/user/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73c4446535f659e5681fe000e47337774920052140562851d2f36de6394f61ed", + "format": 1 + }, + { + "name": "roles/user/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "76243ec53471b0d54306dc103c05e7eb616a56198e063e8a6b7c496055b6d3a4", + "format": 1 + }, + { + "name": "roles/user/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "990193d0962f41618f8770e88b6a60f8cac93ed2cc6525ec5eb18a8190822e5d", + "format": 1 + }, + { + "name": "roles/user/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "12e0161d58245631913fbd3e23a75d3d7401805585c8ffa6e761a0c767c0e686", + "format": 1 + }, + { + "name": "roles/user/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/user/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d80fbd72e987d2e72db56d11f8e1f2be4af62b9c86a07f29f57ecf629e9cf2ac", + "format": 1 + }, + { + "name": "roles/user/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ea2b9721bac7e5029f56419835321ed7977b64588ad29cff4f34a2f6da3ec8c", + "format": 1 + }, + { + "name": "roles/group", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/tests/vars/groups.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3debb0161884abf9c6f244270df69c7e635ac44e3db08e5df32ed669aab786f2", + "format": 1 + }, + { + "name": "roles/group/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "977b21d6da54f962d2f8b22805ce374fc2649c54417cf60941b0f045d01e7e03", + "format": 1 + }, + { + "name": "roles/group/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c28e06dee1d645de8dec233deb5cf82428ffe6344d4f003682369ebcb3e9c087", + "format": 1 + }, + { + "name": "roles/group/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "94b3bdebcbf12aa49c6fc687a2ce1681202a35b2e826df43d3213fbba1721748", + "format": 1 + }, + { + "name": "roles/group/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84e91f907ad762e075995a8770b4f77c439835a38c8d7065ae9d95eb8b5861eb", + "format": 1 + }, + { + "name": "roles/group/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15e44e8050e8f79c4f96947cfec0e653abbc08c8455d42dbb40b97ba9edb2aa9", + "format": 1 + }, + { + "name": "roles/group/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88aa7d28377078a3e2a550f620f6d7a325c2f4482c63421bd857367f9879a73a", + "format": 1 + }, + { + "name": "roles/group_roles", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/tests/vars/group_roles.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42ed51438e2befdc2897eac2b360090b6dff05ea1a0ff9fed1ee618247b169dc", + "format": 1 + }, + { + "name": "roles/group_roles/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c24fc5017cc344926c48bfddba1ae563849ecc29efd5fbe2f11304ea2c5941c9", + "format": 1 + }, + { + "name": "roles/group_roles/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9b301495a66469ea490f43b41baacfda0fe7b919904a4275cc02ef636099f0e", + "format": 1 + }, + { + "name": "roles/group_roles/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0e6804a52efe640c2c8672438b5e0a88a1eeaf1cd71568543fed137f53d29597", + "format": 1 + }, + { + "name": "roles/group_roles/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d6a99a62907dffeb5dce281ba445d8db3b0ecc2c404b7a59797eb364c39f727e", + "format": 1 + }, + { + "name": "roles/group_roles/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/group_roles/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7c4452e4c9a290e902afdcfb2c1124480f8e5fac6568ed355a4cfd800a512db", + "format": 1 + }, + { + "name": "roles/group_roles/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5e0727d4242207d0516029e3ef6787733a70f83e15b97ce7b9235ffd771335a", + "format": 1 + }, + { + "name": "roles/collection", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e09872b170912248ab58524316498d0876d1d59c539b45a1a1c2a1a3261b66c4", + "format": 1 + }, + { + "name": "roles/collection/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "54aa726aa5c7fd585b49252f2669769762b8c66d585d18618d2d501c8591803b", + "format": 1 + }, + { + "name": "roles/collection/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "67abe82f3c4f9f97a009b138cf9e622c6d1aff453a4a6f99d1d41d8726e088e7", + "format": 1 + }, + { + "name": "roles/collection/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bce91054acb9bf05faff46d4ec73612789a02f4b103d31154f81b11b310af13e", + "format": 1 + }, + { + "name": "roles/collection/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a4e9c0e9548fa8feaf3fc4ce8cdfc48db675b87e57fae9a7e3d42dc7b809c433", + "format": 1 + }, + { + "name": "roles/collection/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c58c2a0f5688854e548413aaca6603f5cae349445f056dce16ddb440df8b012c", + "format": 1 + }, + { + "name": "roles/publish", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/tests/vars/collections.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "943e95fa798656fea060648379739d0933d9db4e42cce551b4e22d0e9a1d6a3f", + "format": 1 + }, + { + "name": "roles/publish/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bd27d8a01fb742714a77ef7c00119dc62bb1194e169ec98781c1dd1f7e02719e", + "format": 1 + }, + { + "name": "roles/publish/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "12ad833599a50985a8876091ddd0cd31a5353f171145274bca13af7d6de133a5", + "format": 1 + }, + { + "name": "roles/publish/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c8b57c09430aca62be002a22912ccdc16e29e9a20e230ff009fa22f5385e77a", + "format": 1 + }, + { + "name": "roles/publish/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec2debf6feedd7c12922cc874b6d0eb837c41136f17b3d90adf17ad8f3e45492", + "format": 1 + }, + { + "name": "roles/publish/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/publish/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc670f16def3879b79b331ef934dab2004607aef8c9bd95dc9d1f9304c8c6a67", + "format": 1 + }, + { + "name": "roles/publish/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0a319385496ffb64861b86e6d099c2bf3066b0e137d98cf5495c71cdcdf76bde", + "format": 1 + }, + { + "name": "roles/collection_repository_sync", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tests/vars/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c14a359d438cf9306424a8a7a0da55142c100b93409b149e3b581399993ee23f", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "351bec0e482ebf4329321d5ec167007eca078e30cf1783fa17affc0e108f2859", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c0f816c1af18f3fc96c47fe2aa970b6e9bafc2c82ce6d007861916993a446b5f", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e901dc818fb8447b284bc552d3d669df9c50479487efa7d9a6a7625e2f985fba", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4989982fde2e4298696cafb01b2f66639530c6554226ed182fff1be1a67ad4df", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository_sync/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6b1abee6c21a69c283dcf91eed3b137973788b2e1840602d8af570ddd417b2b4", + "format": 1 + }, + { + "name": "roles/collection_repository_sync/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f88ce373e26a83718877640236dd0ade19d382e92fe8feeea32053020b4b49b9", + "format": 1 + }, + { + "name": "roles/ee_repository", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/tests/vars/ee_repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6fc73ffa1bf006fd5eb883cde0cefd0d481ddc9605f7903995e76e100aeeb56a", + "format": 1 + }, + { + "name": "roles/ee_repository/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f965a22ef5cf074a9ddaadd4abf2c8cf4ce8760d2dcedac10eb2f0d1d8d7c671", + "format": 1 + }, + { + "name": "roles/ee_repository/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c45dd3686afd2b829b2ce31004c39c1dad532c6de97f274db123f603c73b50c", + "format": 1 + }, + { + "name": "roles/ee_repository/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d474a808c5b4e2561b42689b7115860d092e306d6c452c2f1d91a9fc05fec3fb", + "format": 1 + }, + { + "name": "roles/ee_repository/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8e9eb0088fb4a53c5aaa37b5c592eccf207d6a4f9c32db2d23245b1c2cbcbc9", + "format": 1 + }, + { + "name": "roles/ee_repository/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2a69f3ac8dcba4958ca6cba275e97b600f7fc898e66f8d7e2505f2e604030e05", + "format": 1 + }, + { + "name": "roles/ee_repository/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f9730ed1a38f0b0750a51eaec3f2cac464bf61f4095369b4d0f81d29f60e829d", + "format": 1 + }, + { + "name": "roles/ee_registry_index", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/tests/vars/ee_registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0879c2c97fd21231d19fec6edc279fde7f99bf7c460765d68c060f9abee274d2", + "format": 1 + }, + { + "name": "roles/ee_registry_index/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40f89507c15453ad4ce28d6bb7cd3adbcdd459afa2efed8edfcae1bd88e5aa3c", + "format": 1 + }, + { + "name": "roles/ee_registry_index/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "841d5b76b8552461c67eb7a6231db495f4911f068072a62021f4da1664d73de4", + "format": 1 + }, + { + "name": "roles/ee_registry_index/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3345accab95549775cd860a1e85a18da1a43454fae63a4477520d7f7b0fa0518", + "format": 1 + }, + { + "name": "roles/ee_registry_index/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "962698086343830c5355d950dee3bcd6388e029d827adef5d77f566da54d0357", + "format": 1 + }, + { + "name": "roles/ee_registry_index/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_index/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b546ac34161377bacc3955ead89709d91c9b0feafae7d1a0c3a30633725be02c", + "format": 1 + }, + { + "name": "roles/ee_registry_index/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c33271dbf1a11f587527e9913caa68c0765287a3b4e1671cb4410c9198c87f8", + "format": 1 + }, + { + "name": "roles/offline_sync", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/templates/collections_list.yml.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "90f5ceb73483207a4fec68a9864dedef11dbd767bfe532d8b95c5148ea033cac", + "format": 1 + }, + { + "name": "roles/offline_sync/templates/ansible.cfg.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "99539b32bf60bebecadc0e7614a936d7d6dae115463f4a7951f7c1fd822ce77c", + "format": 1 + }, + { + "name": "roles/offline_sync/templates/collections.yml.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "99c0cddfb53b1c1d6b6a0a761ab508babbacc942c3f92523d32a2e540d801f02", + "format": 1 + }, + { + "name": "roles/offline_sync/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6dd3a1acb120287152d9c6e0ea58a01685afd6f75af409995a1d7a8b4c8df262", + "format": 1 + }, + { + "name": "roles/offline_sync/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "28f1332b691846bc973cade573e81ca39f821365b9953ac0115a808e4ce4787f", + "format": 1 + }, + { + "name": "roles/offline_sync/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7a83bc7da29b40acd457ab7b79fd925e869e3e1296f2a8482bf23868c536cd8", + "format": 1 + }, + { + "name": "roles/offline_sync/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "636b00c3fefe78620a50bd2c7cc90d1f364b75769d71c4691dd357fd9de76fd4", + "format": 1 + }, + { + "name": "roles/offline_sync/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/offline_sync/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2412bf8cfbf4689d3a1d2445f5e65ed5fb082d2dd9d384d25b414e7b59cea084", + "format": 1 + }, + { + "name": "roles/offline_sync/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6ca71821154b956c39f648589fbcc32a812daec9db0492cc12079cf5bf14394b", + "format": 1 + }, + { + "name": "roles/role", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/tests/vars/roles.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "499287ab4355d99f5f55ecfbac676b8db806c2da667e3d91e715525eba391138", + "format": 1 + }, + { + "name": "roles/role/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c2f89a03c2128ff15b801823d893b42e87cf3e447fb422effe0e4e1bb6826315", + "format": 1 + }, + { + "name": "roles/role/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "29bf6b605daf4389076aef28bd30496311472ebd2d495bceb144865598d43a03", + "format": 1 + }, + { + "name": "roles/role/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "03f7cc143bc5f002eb4084053a7c44bcc5629d995159e93b54deec55fcf94e30", + "format": 1 + }, + { + "name": "roles/role/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "859d5923336bf42f9d616f152a58a22034e33fca9bf5f902d37f7790da81f7a2", + "format": 1 + }, + { + "name": "roles/role/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/role/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4e3aaaf0691a9650dc0053df5b89f345afac6cf0f8f5b7dbf0e24dc2a87a6eb2", + "format": 1 + }, + { + "name": "roles/role/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0e4dcf9563d22ec225fe54e59dcbfc5ca541ec29b8d7b70f82f821469e44bc8e", + "format": 1 + }, + { + "name": "roles/ee_namespace", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/tests/vars/ee_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8853f97aebc79184702982eb3f0aef6e71e33f11ef8f075f01924307f924a04a", + "format": 1 + }, + { + "name": "roles/ee_namespace/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d4b20a32436f4a87c38835e8f172592f4029de1fcf611253bc4a80932b417c62", + "format": 1 + }, + { + "name": "roles/ee_namespace/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c16efef4d30076c167182efbda7371890911a5eaf451d6a4a46fb067b71ce05e", + "format": 1 + }, + { + "name": "roles/ee_namespace/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59d82e1196f738718befc4dee7f2d676fd8720c01fc6e0b98cda6a42ec6f8215", + "format": 1 + }, + { + "name": "roles/ee_namespace/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "047a4ef628cea97535245d9f01f5470e8e2d2116f5c99d14b0934ed0fb018bc7", + "format": 1 + }, + { + "name": "roles/ee_namespace/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_namespace/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5306aa26c7c5c5cdfeb27d5edd02800286f4aec20a58268e367c1b93d5a46f22", + "format": 1 + }, + { + "name": "roles/ee_namespace/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac109c5b9bd9e449154083ff06d4cf800f1a146f98d4d7f85a0d87c4b9adb06e", + "format": 1 + }, + { + "name": "roles/ee_repository_sync", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tests/vars/ee_repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a2c5478cb9ff728993e69c165ae3f55ce932a2375ee081f5316806cfca28724c", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da75ea41032f6373d3486d1153ccffcb68afcc49ebfa99787f2401d4e0af24f6", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f8e7eb1bc35bfb779c831c08b456d4d5c29f90be796c7e82d33a8f0e46851443", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d18a2e0c63b3c61c9006a2aaa733128a925d671b0cec5ef56f7a39704cb9d49e", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "179e93069e15c03c6d7dd81c5fc5b2c03f0b9221424c3d43847da2c63f78f38c", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_repository_sync/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2475ac14adb0fae0f2a5d5f7fc9ea0e69516ad854c7608ab0aa47504feb52ef7", + "format": 1 + }, + { + "name": "roles/ee_repository_sync/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f1c9ffdf8179e54076dd56cdcd336401f8e9fd090aaa59bf95b4800ace040f1", + "format": 1 + }, + { + "name": "roles/namespace", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/tests/vars/namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e454fe98944db94cfafdd2093677a92c26919717f9be0109c27a9893cd779102", + "format": 1 + }, + { + "name": "roles/namespace/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d2f1da527c4062cc8d6d9659f7cb3946afc8ac2ee4f8be4c0b08d7985435df8", + "format": 1 + }, + { + "name": "roles/namespace/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "619b136939ba42fff384078c98e89bcdc649d84c75f94b1539a0379b9bd08eb2", + "format": 1 + }, + { + "name": "roles/namespace/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "32d8d461837f0aa297c0bbed9c40c242a876b846e6d7d8818daac42e7bc7e0ac", + "format": 1 + }, + { + "name": "roles/namespace/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "96008c8c1e8717d773c22ffe667983f3ed29319ed2aefc0c2ca7df193f39223b", + "format": 1 + }, + { + "name": "roles/namespace/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/namespace/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "06533b701a67b2406d2aaa3078f587311cbe7968c2d547001e14b6c113fbf3bb", + "format": 1 + }, + { + "name": "roles/namespace/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2206c28d5bbe5fad56f530f13ac6d653c59869ec5faa98540318c7066c2be606", + "format": 1 + }, + { + "name": "roles/repository_sync", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/tests/vars/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "61d2989fe80713315edafd7c61998c1a00659c0b0747df7ce8794a5a9d31f613", + "format": 1 + }, + { + "name": "roles/repository_sync/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3186b92393b7fc6f4a83fbc8642f28871bf8896827eae884abe21816d198c63", + "format": 1 + }, + { + "name": "roles/repository_sync/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "34531fdff3daa5316328d7a2fd2446f44378d5b164b67dcfeded6e59a176575f", + "format": 1 + }, + { + "name": "roles/repository_sync/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f87fa9330d73d5e0fac5dc1c66b89f321faf62f6f3f32303d53177e85bdd1ff8", + "format": 1 + }, + { + "name": "roles/repository_sync/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2e75ca60edc46f54322bf007d42fa9d6f582c702a5d1071ff3c5dff7b68c5bd2", + "format": 1 + }, + { + "name": "roles/repository_sync/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository_sync/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0eccfcb2cef8416da606ae200399ac9b445d8dabd64c3d1cdb4a31b01aa70cfa", + "format": 1 + }, + { + "name": "roles/repository_sync/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "09bd4ca9c1938042b6908b910445c7228059415a733c9a23b984aa4855fa3730", + "format": 1 + }, + { + "name": "roles/ee_registry_sync", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tests/vars/ee_registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0879c2c97fd21231d19fec6edc279fde7f99bf7c460765d68c060f9abee274d2", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec106c745e07830e6d2904a819998a0ce38cf5fd984c508b1b1e755c42ca2fff", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1150d0de6e95a8af3923a3bee826d33fbec68ec0367262415683ad16e4a845c0", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "304ec06d4c5072cd282e2c25673b9c364681e7815959d7a54ca6f39f606223f4", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c536337164f3c158947b199b38247343e3ca4f7c63d98d25567affdd894d5214", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry_sync/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9bc5a5d17fdac3149a093c73c7ecd9936ea7aab06e35bf4c74d25b2ebfbddb22", + "format": 1 + }, + { + "name": "roles/ee_registry_sync/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "219e85c226556ce763fc67d67e8fe0ea06aa1d974902b0c96d41d3e2a54582bb", + "format": 1 + }, + { + "name": "roles/repository", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/tests/vars/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "61d2989fe80713315edafd7c61998c1a00659c0b0747df7ce8794a5a9d31f613", + "format": 1 + }, + { + "name": "roles/repository/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44f1852647667585dfe63045e52b7fb7be50936e133a1951aee34fb625151257", + "format": 1 + }, + { + "name": "roles/repository/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a01414b9f812ee48a938db25f8d9c60c185c98e99e5f6f3bc0072dee610be420", + "format": 1 + }, + { + "name": "roles/repository/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c30d4a6ea54b5fdf4ae783ad4a676be58065706b86dc4be6a7f79772e3610e9", + "format": 1 + }, + { + "name": "roles/repository/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b31204395ef14b1950c2ec6a4758fe1fd8bc119e9672f84447f1dbf2ee8b9f48", + "format": 1 + }, + { + "name": "roles/repository/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/repository/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "643c5732abd736026d7bb5f608dca4e3cd62d4e2e39973561550766e2e9904b3", + "format": 1 + }, + { + "name": "roles/repository/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "60d1736e82918965feac7a017f4e45e082ada8214595dcc589a9e50208f66715", + "format": 1 + }, + { + "name": "roles/collection_remote", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/tests/vars/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e6121a4fe9bf79c462b2ed95438dd87acc00bad9463f561ba6dfa1430b0962fe", + "format": 1 + }, + { + "name": "roles/collection_remote/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a766f55481cacf9403e49b5e8e9eea6c383a6f7454c013ab576122d884cc7c5", + "format": 1 + }, + { + "name": "roles/collection_remote/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0a3a31b20ab48b80aa1c2c274881fdbacf347e0be650191c1d1a87701f229d95", + "format": 1 + }, + { + "name": "roles/collection_remote/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95586e324d3eacf96c9791d460693bb55ddceda505d75c7be4a1c02b38bdd6ce", + "format": 1 + }, + { + "name": "roles/collection_remote/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "45c7af273fd4f64a63f92e9eb8712aaf2ec527c3dca7339da6d227c7d4734418", + "format": 1 + }, + { + "name": "roles/collection_remote/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_remote/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1329babe65c3eaaaac5ea5cefd94269a30c1ce13a9db7eaa8c051b7aa5db5567", + "format": 1 + }, + { + "name": "roles/collection_remote/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6390cd17c3ef68dbd004875e95af52b1630890ae879290a22fb66e8f8d621899", + "format": 1 + }, + { + "name": "roles/collection_repository", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/tests/vars/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c14a359d438cf9306424a8a7a0da55142c100b93409b149e3b581399993ee23f", + "format": 1 + }, + { + "name": "roles/collection_repository/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "351bec0e482ebf4329321d5ec167007eca078e30cf1783fa17affc0e108f2859", + "format": 1 + }, + { + "name": "roles/collection_repository/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4e0423b1f07f8ed7bda02b1fae5411e45e7b2d0d02abccdd9914685fece8c3f6", + "format": 1 + }, + { + "name": "roles/collection_repository/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e901dc818fb8447b284bc552d3d669df9c50479487efa7d9a6a7625e2f985fba", + "format": 1 + }, + { + "name": "roles/collection_repository/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4989982fde2e4298696cafb01b2f66639530c6554226ed182fff1be1a67ad4df", + "format": 1 + }, + { + "name": "roles/collection_repository/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/collection_repository/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ca59c8b37b47086654a1a061f07b696fa0f9c62e8b7f04cb3728ff7e32bed374", + "format": 1 + }, + { + "name": "roles/collection_repository/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "79ab2e3a8b14085bbe5a90d34826d74f763c862cb73f39518fa44f47c7542bfa", + "format": 1 + }, + { + "name": "roles/ee_registry", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/tests/vars/ee_registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5b89045f5e2d1cdc7d089f12e1916d28d76e50caee674f31089bed2e6b9b1247", + "format": 1 + }, + { + "name": "roles/ee_registry/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e334f7393ba1a48fa764bfb9c52a44a918b77a823a1da000070d6168ef856c0c", + "format": 1 + }, + { + "name": "roles/ee_registry/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "81403e772102a1cade254f5330bb798b9bc31a57431c85b56858b1af58e8eaed", + "format": 1 + }, + { + "name": "roles/ee_registry/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a3fed373c649a0ce00183824c8119100d74451652d21f6b6a327471dfae59983", + "format": 1 + }, + { + "name": "roles/ee_registry/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "327b887e4cc04fe7074e082636b0d99d0c09ebb631d202bfd022f74677b7afd2", + "format": 1 + }, + { + "name": "roles/ee_registry/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_registry/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5b18db4873ed8729dc9e5389b0d422aabe55921872e55244dd9a23fa6f72b0cb", + "format": 1 + }, + { + "name": "roles/ee_registry/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8ca9f9258d5cdc08faed4d4c85ae18e2ff757ca726930dac5c2e396722eb6db9", + "format": 1 + }, + { + "name": "roles/dispatch", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/tests/configs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/tests/configs/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a6744dbe8cc6f7d8e3d327728af997924cb55e3ff4dd92ea431cd4ee60528c7a", + "format": 1 + }, + { + "name": "roles/dispatch/tests/configs/images.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "51da5de98cd072d898a2566127c01182f9920e6aa322bc3b81696c385b93e22e", + "format": 1 + }, + { + "name": "roles/dispatch/tests/configs/registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5b89045f5e2d1cdc7d089f12e1916d28d76e50caee674f31089bed2e6b9b1247", + "format": 1 + }, + { + "name": "roles/dispatch/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1a19ef66f375051e8d2386874ad83f65022246dd4ce039af43bf6abbec4020e", + "format": 1 + }, + { + "name": "roles/dispatch/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "924e3da5d10e6c542c56ea1655388424870d7e6e9c4d3adde08d4b1dbef105ce", + "format": 1 + }, + { + "name": "roles/dispatch/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a1de699998910a87c52cf5bcc098f1c0965add52777b6dcd5dfef0a7d02feaa5", + "format": 1 + }, + { + "name": "roles/dispatch/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "65123641e4ebe7851ba6a458c691bc0ae6cf8dcdf5c75080d4e599eeea6b0e94", + "format": 1 + }, + { + "name": "roles/dispatch/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/dispatch/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ab73ee72de4b57097e7d7cecf36a6c2fa72ff397510b065f694df885e28c73ba", + "format": 1 + }, + { + "name": "roles/dispatch/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "12e2643088e3c2a4e83a20e67c72e0539599cbab46b3a88d7ea6ea04cff687c3", + "format": 1 + }, + { + "name": "roles/ee_image", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/tests/vars/ee_images.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "654d0936af2890bcf9a709dd0c31a4e9291fa74bcab81db30b9ccd7c8398f06f", + "format": 1 + }, + { + "name": "roles/ee_image/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "765c2d6b0b9dd81f7545a3587bd3e941e17f52b84f9dd6e4fb1905fd5fa4ee89", + "format": 1 + }, + { + "name": "roles/ee_image/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1d536eb20717a291d1d1cb636799ad466d31e2b0b6d48b71606e36a6a6a28160", + "format": 1 + }, + { + "name": "roles/ee_image/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fe4b8dfffb1a09521a5f361bc28bed0991d55ffeb33f1b58debf380ed4d063c8", + "format": 1 + }, + { + "name": "roles/ee_image/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44015b2ba3f16b0dc7d50230c81199046a8cf0e2bccb6cba6e8883fb1bcaf0ec", + "format": 1 + }, + { + "name": "roles/ee_image/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ee_image/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "941009bafd7ec6be2b9e15616fd4974b2c122f6b5e2cae242fa7d18a6bdde3f8", + "format": 1 + }, + { + "name": "roles/ee_image/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bec8cf669ed831acb6be5decafd0a0df68f30510413b0930ea665e64f4264b35", + "format": 1 + }, + { + "name": "roles/ansible_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/templates/ansible.cfg.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "68966f69e3ed66c9c80a8d8b23205c5d3d5c754ded6eb59b0c271bd61ab0e262", + "format": 1 + }, + { + "name": "roles/ansible_config/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/tests/vars/config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20e5c042d8a3ffb9c8111200bdf4612766e01fc586b7ce0f61ae2b5a7398085a", + "format": 1 + }, + { + "name": "roles/ansible_config/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d2f1da527c4062cc8d6d9659f7cb3946afc8ac2ee4f8be4c0b08d7985435df8", + "format": 1 + }, + { + "name": "roles/ansible_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eaabdd67c09ba1b56b735c3c313517d8f1badb8574ffe22663ccead3c5d45c2d", + "format": 1 + }, + { + "name": "roles/ansible_config/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/meta/argument_specs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "664a3d8ade2fbc4dfe8164186f628c476ebf4bf193cf294ff5ac226fd6db2627", + "format": 1 + }, + { + "name": "roles/ansible_config/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "96008c8c1e8717d773c22ffe667983f3ed29319ed2aefc0c2ca7df193f39223b", + "format": 1 + }, + { + "name": "roles/ansible_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/ansible_config/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3da6b37152f110a17c7b0a1ec2d625577d0d7c4188349afa791f547e7a0593b0", + "format": 1 + }, + { + "name": "roles/ansible_config/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "465ed8d3f0f6db97379c87824868f8c445beb5a59ad0d4156ac0b0cff393c25d", + "format": 1 + }, + { + "name": ".pre-commit-config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5db8ff700308e1aa05c40507e32cc303a9a237ad300fb59e935dfcf07bfebf3d", + "format": 1 + }, + { + "name": ".yamllint.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "61a4bb761ecac0a8811fe7f5e96d11e04ec07464e6f0779608c3559cbf1e904a", + "format": 1 + }, + { + "name": "tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/tasks/manage_collection_publish.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "55ed177004383772d6cb9a358817c0ace098240582b068852e9a175b51051738", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_repository_sync.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5e032df8882a922f439b09c87bfdff1c84dac386ea3b95ef0725430db2ecc30", + "format": 1 + }, + { + "name": "tests/tasks/manage_groups.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02181d3ac9bc41dad66c9e9b015c09af58a6aa45b4497cc78ad9f46136e313ee", + "format": 1 + }, + { + "name": "tests/tasks/manage_collection_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "08b3fb9f1033394da4a56d90bce0fc7c514354902feb2ab32923f5af77e06d95", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eba6793204889aaef3bc3724212e398cbb279580daea151c84de50ff0f8e9444", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_registry_sync.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "377ec4b5ac1e31445e895b6b82ec367e0e7f49edc9f2e446a1ff2e02fd161df4", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_images.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73626e573de842ab3381fc7e65fda0d59c091cbecf842396f11935ab6d34b7ee", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20cb89fed949d443b165734130988f82d896dd03f4c5627134a6447ce5aecc3c", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_registry_indices.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2f93166d448e4bbbd5b100a93191ed1a722e9a6a6bf3b24a6611e3769c6b85e", + "format": 1 + }, + { + "name": "tests/tasks/manage_ee_registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ada3db6daa9ee5f34704d6a567e214b5a05c3a3263477861a5c29f89f731adc", + "format": 1 + }, + { + "name": "tests/tasks/manage_users.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "694e760ce01989185d18375aaed1eccaf633c7f1ef33c16a94b57d77e48d8b8d", + "format": 1 + }, + { + "name": "tests/tasks/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/tasks/files/ansible.cfg.example", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bcb7aacb9e58316a6743aebf5808bf8ff907e01e8f468921a4278c400774a104", + "format": 1 + }, + { + "name": "tests/tasks/manage_ansible_config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "52c8f9e4bfee1729eb29c556ff7fe454a1383b13a3c87982afc6c1e45d261b67", + "format": 1 + }, + { + "name": "tests/pah_configure.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d121e7ed19db66735f5d1f027889347065e06155aaf6c64ddd73b8ca56f22ed6", + "format": 1 + }, + { + "name": "tests/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/vars/ah_ansible_config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "51e3db2628fdf932381ef8705645e2e8eda9272dcdf6a5405b5c443bf3072bd8", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_registry_sync.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d967d5490418c8208c87bbb594a7cccb657f39f94a021775b5eb662ce8d7aad5", + "format": 1 + }, + { + "name": "tests/vars/ah_groups.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1a6bcbc1f012e5af2a9b35f6a5b8ff3033a7f6778a75a193838cfbe9c3b906e3", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_images.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "557c6656475e99516978e045200b0c964210fca0ecd7c650bf88c7ceafc5e32f", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "272c6731249030c3177ebe3f87034146fa70ca5972ee35a536cae0aa15888eaf", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_registries.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b4c4463ae9c91768076bbec8c38016800f0e398b3cf82b70f5a69f1179cfefaf", + "format": 1 + }, + { + "name": "tests/vars/pah_vars.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a5f2f84d5b46a4f63d4c0283228d1252c9a890d2ce234358486a571843b1924", + "format": 1 + }, + { + "name": "tests/vars/ah_users.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "423f8e3b46246bf1cee44ab5655e68f43477027fef8b0f61b2ed4e6bf9eb735d", + "format": 1 + }, + { + "name": "tests/vars/ah_collection_publish.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40461a5efa3cb88b25d0f1c5bba88c97db78070aceff53fd0a820deafe49a212", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73208aff2a0c3771ef6389f79c4190fe3db359c647a200bac66845510212213d", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_repository_sync.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fc32e7ddcdafe1d7230803e5e1a6ee36385501b35ef0aae7f1b2494904109cb5", + "format": 1 + }, + { + "name": "tests/vars/ah_collection_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3516365689b5a5b312df73fa8e037cfff3c6febfcb01135ed159a2d3d9cbbd4d", + "format": 1 + }, + { + "name": "tests/vars/ah_ee_registry_indices.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cafafce377b0d4ce8d19ce310b8841683a9f14fee9c254d038cfeeb613a44489", + "format": 1 + }, + { + "name": "tests/collections", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/collections/requirements.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da12643be7beca71315fb66f6074064b4442fc4631d650606c4b169ff9af3522", + "format": 1 + }, + { + "name": "tests/config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "825472cdc30d1e1e503c3d6fa2343eaf2ca27e593a887f9e1045c3e3e428869f", + "format": 1 + }, + { + "name": "tests/playbooks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_roles.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7f662aca3d5d0b5accf50bc215572f9da96e6b0268286180ef949fef87540a61", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_group_roles.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42ed51438e2befdc2897eac2b360090b6dff05ea1a0ff9fed1ee618247b169dc", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_ansible_config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fd03018d5682fcaf802507813e30a95b983432e60a3afbbfd2103da306dfda11", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_repository.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "31f21815251d0d7e50a5555df3df4cf3e6ea17fe1a3bd94d15a0f15686a12db5", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_auth.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7a807eb01be296ee9bd2e74079a27e14c0a2da77dd1e882f11043a89c845d5d6", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_collections.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e1cf097565a47881e2d36f3a0b04a327b18e5883b65656113635dfcb54f479aa", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_namespaces.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c0ee703fca68146ad355fe13546fd2a513f1a70affd24c1bab806c812069581d", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_ee_repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a550ced1dc53c0f90458a4b16413be9c8d5793021bb565a20a98e1e2cfcd8be2", + "format": 1 + }, + { + "name": "tests/playbooks/ah_configs/ah_user.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1bf975bca2be8aa24e6b7ce6e8ba1ac7f3e895899d36f1f4fce3d06b649b4566", + "format": 1 + }, + { + "name": "tests/playbooks/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/playbooks/files/collection_requirement_file.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5774871d1b27e52c8483760f02c3f7f4df59967452d61f520163aa1c0c609cb", + "format": 1 + }, + { + "name": "tests/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9b57d601171a6a3db9fe969cba7323c07a7414d2b14ba8dfb746dc37071bad7", + "format": 1 + }, + { + "name": "LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "format": 1 + }, + { + "name": ".flake8", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59f8ad952cb866f62c52aa6cb532348f05302240a713749c1dea1d36d3a9c5a5", + "format": 1 + }, + { + "name": ".ansible", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".ansible/roles", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".ansible/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".ansible/.lock", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": ".ansible/collections", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".ansible/collections/ansible_collections", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".mlc_config.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cccc99202d8774eb03654f2eddbaded464875c05cc00728eb2c990b6aeff66b0", + "format": 1 + }, + { + "name": ".markdownlint.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c4cb7effba511c734b4d08bc53f05524e23f254c1fa206b7bf42ed50a47bf0d", + "format": 1 + }, + { + "name": "changelogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/changelog.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a9393de26132b129fcbb7c131e806067f98ad60f4912b46894fa483f6158d00a", + "format": 1 + }, + { + "name": "changelogs/.plugin-cache.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e07d0d92b7969e7a8cb15f4104fa3f01a1a3b7ad2fff85cd7bcfa30fca0a19c2", + "format": 1 + }, + { + "name": "changelogs/ci_fixes.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4231f375af4cf13871a8eb7249bf933d76712203f6ef5483d1e78adff39a5aeb", + "format": 1 + }, + { + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/fragments/offline_sync.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7ac280bf05a88f887ffc28a6fa92a9722476b431429869b9d458c75e8be3e0c0", + "format": 1 + }, + { + "name": "changelogs/fragments/repositories.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e11a440fcdca6cf6a87bc9d394dd486239b07aec81dbbf9f33aa53266f1ded4", + "format": 1 + }, + { + "name": "changelogs/fragments/async.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d81014829e2b70642a9d120051b6faae62b9cba8777ea2f5c5885b2e1de5790", + "format": 1 + }, + { + "name": "changelogs/fragments/source_build.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ddf04a8e050c533ae9852e7344d7d2d92d122866e3a3e3682979d3b1e4862b3f", + "format": 1 + }, + { + "name": "changelogs/fragments/argspec.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a1321a3740136ebd7666399b0561ad6d453f2f71e47473893a9e28b0d03961f6", + "format": 1 + }, + { + "name": "changelogs/fragments/bug_galaxy_path_prefix.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "14fdf93eec2b26fa8c5f709f56e47758f38bace16d3de8dfd99fe441f8728340", + "format": 1 + }, + { + "name": "changelogs/fragments/collection_repos.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d8caa2edaead3a7036cb5bf4193a7922924c1c170cd54043ee4befd9c72e76a", + "format": 1 + }, + { + "name": "changelogs/fragments/update-github-actions.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f646b69104542ef74dc13fa479df51188c5029c0b23779d923bc94e8f257547a", + "format": 1 + }, + { + "name": "changelogs/fragments/grou_async_timeout.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cd63b02657596d596efdf1b1ace7dff83a086f36b59db783d0b0fd161b9fa33e", + "format": 1 + }, + { + "name": "changelogs/fragments/api_prefix_with_resource_provider.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f1bc52362b84257e3f56a575f9d7c6b7fecebff8c45455c71ec43a3aea9cfc60", + "format": 1 + }, + { + "name": "changelogs/fragments/flake8bug.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2acc5313aa37d6f3a19738befae53c29b335e10a99fc9b0aa8ff5509f507eb14", + "format": 1 + }, + { + "name": "changelogs/fragments/removed_modules.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6a6bad2eb9d5c0d673a9e5567c2f14dd71f6cdd3a6dd8a3df745a3189c178c5d", + "format": 1 + }, + { + "name": "changelogs/fragments/update_new_ci_workflow.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2bd47e65f9859eedccf9043dd58a48854256bae32c94d8221a3f76ad6c438032", + "format": 1 + }, + { + "name": "changelogs/fragments/400-collection-upload.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c2c60069274f949e6e7b3ea1276cfba673e91a5a8428e233615da2043603a69", + "format": 1 + }, + { + "name": "changelogs/fragments/request_timeout.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04a5f16d18800c4d5b3aca64f9f45a56f36de7c509cb2f9d957eb594f3a98b89", + "format": 1 + }, + { + "name": "changelogs/fragments/group_roles.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a8f5cf2080a3eda1926577f3b7c1959028fe216069eb8d9fd49a1a066623a842", + "format": 1 + }, + { + "name": "changelogs/fragments/token_auth.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b25ebdf4cc409f687c6d7558197619a93969847c76b8c703a9fe9817fe379bee", + "format": 1 + }, + { + "name": "changelogs/fragments/.gitkeep", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "changelogs/fragments/collection_remote.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bd9833bf84c6d0a096afb9864cebd16db2ea969559494a85b0b9a21ec7b1be57", + "format": 1 + }, + { + "name": "changelogs/fragments/remove_bindep.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5db9f94ec2090b08059a4704a02f8ec8b250bff10c164721d856921079d0ff55", + "format": 1 + }, + { + "name": "changelogs/fragments/collection_remote_requirements.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed3c1d1728618718916bc54231252419191a11bfab2a04fe56f834c7f4ee274", + "format": 1 + }, + { + "name": "changelogs/fragments/ah_host_env.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c7c75566b4fc4a6fba068ff0b8582cfa92a5ae665974c8493ff59d0f78cfe9c", + "format": 1 + }, + { + "name": "changelogs/fragments/depreciation.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97c4e81d190640c4c81ef75690c2203c6b5c5f42db96818191bb1d7575bfd85e", + "format": 1 + }, + { + "name": "changelogs/fragments/bug_collection_delete.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b23197a5b277aedfe0b804e0b505cce7f0a3188a0524a8e8ef076a1e825e45c2", + "format": 1 + }, + { + "name": "changelogs/fragments/reroute.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d6ab1fc1570f31a46a07175e41fd65d0667b91390541cd68e58e8e0be7f613d", + "format": 1 + }, + { + "name": "changelogs/fragments/roles_token.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce5239b1789eeb344daffc76926376f26569cf8665560bf79dcd271651837f90", + "format": 1 + }, + { + "name": "changelogs/fragments/ansible_config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "135c72cad49182e9a76090a0486a972ab0bee6abf5d2c321662c33752fa9b9f0", + "format": 1 + }, + { + "name": "changelogs/fragments/add_new_ci_workflow.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8fafd77f728c3758767efd711d18434207ebf3894ce5fd225c4379d6cb83ee32", + "format": 1 + }, + { + "name": "changelogs/fragments/collection_overwrite_existing.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b7fd28f1a30717d95e2af80943607b0df03657fb13cb8c8692d11ec51756f64b", + "format": 1 + }, + { + "name": "changelogs/fragments/global_proxy.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bbbf1e3c34fccd9d39307cd8fbcc598e75fec006e4133b6b56706cd1960ebe12", + "format": 1 + }, + { + "name": "changelogs/fragments/ee_repos.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "09d6e57d5108100f49634b9f5cd3976e9efcfb5be35f09f1f10490cec9dcbbd6", + "format": 1 + }, + { + "name": "changelogs/config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "686433c5afa832996c2e7085ee8057e12aa980aa356b9b29eb6868bed63f69a7", + "format": 1 + }, + { + "name": "CHANGELOG.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "030592ba801770c03fb836af202ae83f722c7bca58ef8785b6cafe12acdb3492", + "format": 1 + }, + { + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "meta/runtime.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "27ae9cb2ae311cd51d05c311d2d93850c1f545280800adbb38ae98d366df99db", + "format": 1 + }, + { + "name": ".gitignore", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "407099b7a0d100d6f7700d3192fe76d27c18b3a138009e6135aaae6ba22d8a22", + "format": 1 + }, + { + "name": "STANDARDS.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "067522e6508974df1996b0b625db3a30cabd6f1b9ce3e7e70841267aec698809", + "format": 1 + }, + { + "name": "README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "12c0eeeda15ad5b3229cbecc9b26d6c916f3148cb9160c32f9e7628964af2bbd", + "format": 1 + }, + { + "name": ".ansible-lint", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6323e9bec8286a72e3d5d72b9c8e3057a1cf991e614dd10b10c88194bebbf706", + "format": 1 + }, + { + "name": "COPYING", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7c50cd9b85e2b7eebaea2b5618b402862b01d5a66befff8e41401ef3f14e471a", + "format": 1 + }, + { + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/CONTRIBUTING.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0e675682fc361c0f5e9ddcd736891bef51b11aa366ea85a022f50d09a2cba490", + "format": 1 + }, + { + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows/pre-commit.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f834ca46bb88d73f3583e5cf640af94a42687263f4893af0dac21817f91c98f", + "format": 1 + }, + { + "name": ".github/workflows/release.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9045960596c77fbf09d021b26c82c2a12fd38a6aa27dbaf6315efa878a07099d", + "format": 1 + }, + { + "name": ".github/workflows/issue-find-inactive.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d8908d827a629ef00a253014258790564cc55264ebd7234f8cb8c0ac92fd0f50", + "format": 1 + }, + { + "name": ".github/workflows/issue-labeled.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c48592a2d9681b0b4914c867a2116ec567de54bfe8324f73cb7ba9d13b03df08", + "format": 1 + }, + { + "name": ".github/workflows/update_pre_commit.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "464b0f939b111548606495d6bcc8c2e5dfe702dfedd755ef137917558d8a4268", + "format": 1 + }, + { + "name": ".github/workflows/issue-close-inactive.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "23954e141ed3d105903f6911c5f984f510da62b680c16a56a2500d27111d5942", + "format": 1 + }, + { + "name": ".github/workflows/issue-remove-inactive.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1d31664dac6a8f350cfd08bb66c3950cd572499892e8944bbfe26e1d7a30edba", + "format": 1 + }, + { + "name": ".github/PULL_REQUEST_TEMPLATE.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b055d15c654b5ab21289701047da978d8e34e8e66785fe45fae13e66af3711e3", + "format": 1 + }, + { + "name": ".github/ISSUE_TEMPLATE", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/ISSUE_TEMPLATE/feature_request.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "313237299e1bb32564f4085126fc32b33c8898120fdc3a39b4e9b4c26409f414", + "format": 1 + }, + { + "name": ".github/ISSUE_TEMPLATE/config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5bf83e39b2d45c1343e5e4a9aef660cf7385098a0393d9114c023f3844658345", + "format": 1 + }, + { + "name": ".github/ISSUE_TEMPLATE/bug_report.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec9f9ac210699fbc37b81f45e28f96226aa58463a87c6ec26ca046c2d86cb78b", + "format": 1 + }, + { + "name": ".github/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/files/ansible.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ca3d97ddd2595f1c5397a54eb35cc296bfde4405b4c9c8db3edb023a6ea24751", + "format": 1 + }, + { + "name": ".github/files/galaxy.yml.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "82dfdca349e1fa418f2afe962807105f98ce7fd0b26a9cc1dda0373f47e69cb9", + "format": 1 + }, + { + "name": ".github/CODE_OF_CONDUCT.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44ae76ff9678b0b8e79c96678dd55bea202c592159aaffb2b8f6ef7bd28981e4", + "format": 1 + } + ], + "format": 1 +} \ No newline at end of file diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/LICENSE b/.ansible/collections/ansible_collections/galaxy/galaxy/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/MANIFEST.json b/.ansible/collections/ansible_collections/galaxy/galaxy/MANIFEST.json new file mode 100644 index 00000000..14cb7437 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/MANIFEST.json @@ -0,0 +1,39 @@ +{ + "collection_info": { + "namespace": "galaxy", + "name": "galaxy", + "version": "1.1.1-devel", + "authors": [ + "Sean Sullivan @sean-m-sullivan", + "Tom Page @Tompage1994", + "David Danielsson @djdanielsson" + ], + "readme": "README.md", + "tags": [ + "cloud", + "infrastructure", + "galaxy", + "ansible", + "galaxy", + "automation" + ], + "description": "Ansible content that interacts with the Ansible Automation Hub or Galaxy NG API.", + "license": [ + "GPL-3.0-only" + ], + "license_file": null, + "dependencies": {}, + "repository": "https://github.com/ansible/galaxy_collection", + "documentation": "https://github.com/ansible/galaxy_collection/blob/devel/README.md", + "homepage": null, + "issues": "https://github.com/ansible/galaxy_collection/issues" + }, + "file_manifest_file": { + "name": "FILES.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cc9a3aadbe1e6645b490006d7015427f919a50cfc99dc14366ec9936d634bbdb", + "format": 1 + }, + "format": 1 +} \ No newline at end of file diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/README.md new file mode 100644 index 00000000..9af8bb55 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/README.md @@ -0,0 +1,102 @@ +# Red Hat Ansible Automation Hub Configuration Collection + +[![pre-commit tests](https://github.com/ansible/galaxy_collection/actions/workflows/pre-commit.yml/badge.svg?branch=devel)](https://github.com/ansible/galaxy_collection/actions/workflows/pre-commit.yml) +![Code style: flake8](https://img.shields.io/badge/Code%20style-flake8-orange) + + +This Ansible collection allows for easy interaction with an Ansible Automation Hub or Galaxy NG server via Ansible playbooks. + +## Links to Ansible Automation Platform Collections + +| Collection Name | Purpose | +|:--------------------------------------------------------------------------------------------:|:----------------------------------------:| +| [awx.awx/Ansible.controller repo](https://github.com/ansible/awx/tree/devel/awx_collection) | Automation controller modules | +| [ansible.hub repo](https://github.com/ansible-collections/ansible_hub) | Automation hub modules | + +## Links to other Validated Configuration Collections for Ansible Automation Platform + +| Collection Name | Purpose | +|:------------------------------------------------------------------------------------------:|:----------------------------------------:| +| [Controller Configuration](https://github.com/redhat-cop/controller_configuration) | Automation controller configuration | +| [Ansible Hub Configuration](https://github.com/ansible/galaxy_collection) | Automation hub configuration | +| [EE Utilities](https://github.com/redhat-cop/ee_utilities) | Execution Environment creation utilities | +| [AAP installation Utilities](https://github.com/redhat-cop/aap_utilities) | Ansible Automation Platform Utilities | +| [AAP Configuration Template](https://github.com/redhat-cop/aap_configuration_template) | Configuration Template for this suite | + +## Included content + +Click the `Content` button to see the list of content included in this collection. + +## Installing this collection + +You can install the galaxy galaxy collection with the Ansible Galaxy CLI: + +```bash +ansible-galaxy collection install galaxy.galaxy +``` + +You can also include it in a `requirements.yml` file and install it with `ansible-galaxy collection install -r requirements.yml`, using the format: + +```yaml +--- +collections: + - name: galaxy.galaxy + # If you need a specific version of the collection, you can specify like this: + # version: ... +``` + +## Using this collection + +Define following vars here, or in `galaxy_configs/galaxy_auth.yml` +`galaxy_server: ansible-galaxy-web-svc-test-project.example.com` + +You can also specify authentication by setting the following variables: + +- `galaxy_server`, `galaxy_oauthtoken`, `ah_token` + +The OAuth2 token is the only method. You can obtain the token through the web interface. If you only pass a username and password to galaxy API roles/modules a new OAUTH2 token will be generated, invalidating the previous user token. To ensure this doesn't occur always set the ah_token variable to the users OAUTH2 token before executing automation. This does not affect pulp API calls. + +Galaxy API calls + +- group +- namespace +- publish +- repository +- repository_sync +- user + +These can be specified via (from highest to lowest precedence): + +- direct role variables as mentioned above + +### See Also + +- [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details. + +## Release and Upgrade Notes + +For details on changes between versions, please see [the changelog for this collection](CHANGELOG.rst). + +## Roadmap + +Add more roles and modules for endpoints on the Automation Hub. + +## Contributing to this collection + +We welcome community contributions to this collection. If you find problems, please open an issue or create a PR against the [Automation Hub Configuration collection repository](https://github.com/ansible/galaxy_collection). +More information about contributing can be found in our [Contribution Guidelines.](https://github.com/ansible/galaxy_collection/blob/devel/.github/CONTRIBUTING.md) + +## Licensing + +GNU General Public License v3.0 or later. + +See [LICENSE](LICENSE) to see the full text. + +All content in this folder is licensed under the same license as Ansible, +which is the same as license that applied before when the base for this +code was derived form the [AWX.AWX](https://galaxy.ansible.com/awx/awx) collection. + +## Documentation + +Documentation for Automation hub URI can be found at +[Documentation for Automation hub URI.](https://github.com/ansible/galaxy_ng/wiki/Automating-Collection-Uploads) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/STANDARDS.md b/.ansible/collections/ansible_collections/galaxy/galaxy/STANDARDS.md new file mode 100644 index 00000000..8d239096 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/STANDARDS.md @@ -0,0 +1,13 @@ + +# Contributor's Guidelines + +- All YAML files named with '.yml' extension +- Use spaces around jinja variables. {{ var }} over {{var}} +- Variables that are internal to the role should be lowercase +- Keep roles self contained - Roles should avoid including tasks from other roles when possible +- Plays should do nothing more than include a list of roles except where pre_tasks and post_tasks are required when possible +- Separators - Use underscores (e.g. my_role my_playbook) not dashes (my-role) +- Paths - When defining paths, do not include trailing slashes (e.g. my_path: /foo not my_path: /foo/). When concatenating paths, follow the same convention (e.g. {{ my_path }}/bar not {{ my_path }}bar) +- Indentation - Use 2 spaces for each indent +- `vars/` vs `defaults/` - if you have variables that don't need to change or be overridden by user, put those in `vars/` and those that a user would likely override, put those under `defaults/` directory. +- All playbooks/roles should be focused on compatibility with Automation Hub diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/.plugin-cache.yaml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/.plugin-cache.yaml new file mode 100644 index 00000000..c02ec78d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/.plugin-cache.yaml @@ -0,0 +1,118 @@ +objects: + role: {} +plugins: + become: {} + cache: {} + callback: {} + cliconf: {} + connection: {} + filter: {} + httpapi: {} + inventory: {} + lookup: + ah_api: + description: Search the API for objects + name: ah_api + version_added: null + module: + ah_approval: + description: Approve a collection in Automation Hub. + name: ah_approval + namespace: '' + version_added: null + ah_build: + description: Build a collection tar. + name: ah_build + namespace: '' + version_added: null + ah_collection: + description: update, or destroy Automation Hub Collections. + name: ah_collection + namespace: '' + version_added: null + ah_collection_upload: + description: Upload a collection artifact to Automation Hub. + name: ah_collection_upload + namespace: '' + version_added: null + ah_ee_image: + description: Manage private automation hub execution environment images + name: ah_ee_image + namespace: '' + version_added: 0.4.3 + ah_ee_namespace: + description: Manage private automation hub execution environment namespaces + name: ah_ee_namespace + namespace: '' + version_added: 0.4.3 + ah_ee_registry: + description: Manage private automation hub execution environment remote registries. + name: ah_ee_registry + namespace: '' + version_added: 0.7.0 + ah_ee_registry_index: + description: Initiate an execution environment registry indexing. + name: ah_ee_registry_index + namespace: '' + version_added: null + ah_ee_registry_sync: + description: Initiate an execution environment registry sync. + name: ah_ee_registry_sync + namespace: '' + version_added: null + ah_ee_repository: + description: Manage private automation hub execution environment repositories/containers + name: ah_ee_repository + namespace: '' + version_added: 0.4.3 + ah_ee_repository_sync: + description: Initiate an execution environment repository sync. + name: ah_ee_repository_sync + namespace: '' + version_added: null + ah_group: + description: Manage private automation hub user groups + name: ah_group + namespace: '' + version_added: 0.4.3 + ah_group_perm: + description: Manage group permissions + name: ah_group_perm + namespace: '' + version_added: 0.4.3 + ah_namespace: + description: create, update, or destroy Automation Hub Namespace. + name: ah_namespace + namespace: '' + version_added: null + ah_repository: + description: Configure a repository. + name: ah_repository + namespace: '' + version_added: null + ah_repository_sync: + description: Configure a repository. + name: ah_repository_sync + namespace: '' + version_added: null + ah_role: + description: Manage a role of group permissions + name: ah_role + namespace: '' + version_added: 1.1.0 + ah_token: + description: create, update, or destroy Automation Hub tokens. + name: ah_token + namespace: '' + version_added: null + ah_user: + description: Manage private automation hub users + name: ah_user + namespace: '' + version_added: 0.4.3 + netconf: {} + shell: {} + strategy: {} + test: {} + vars: {} +version: 1.1.1 diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/changelog.yaml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/changelog.yaml new file mode 100644 index 00000000..6ad781b6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/changelog.yaml @@ -0,0 +1,296 @@ +ancestor: null +releases: + 0.1.0: + changes: + major_changes: + - Initial release of ansible_config, namespace, publish roles and ah_namespace, + ah_token modules + fragments: + - initial.yml + release_date: '2021-02-13' + 0.2.0: + changes: + breaking_changes: + - Publish role - repo_name variable renamed to collection_name. + major_changes: + - Added ah_approval module to approve a colelction which has been uploaded. + - Added ah_collection_uploads module + - Publish role - Ability to approve role added + - Publish role - rewritten to use internal modules + fragments: + - ah_approval.yml + - ah_collection.yaml + - publish_role.yaml + release_date: '2021-05-13' + 0.3.0: + changes: + major_changes: + - Added ah_repository module to configure the remote repositories for Automation + Hub. + fragments: + - ah_repository.yml + release_date: '2021-05-25' + 0.3.1: + changes: + bugfixes: + - Fixes issue in ah_repository where not specifying a requirements list causedd + a failure. + fragments: + - repository_fix.yml + release_date: '2021-05-27' + 0.4.0: + changes: + major_changes: + - Added ah_repository_sync module to sync remote repositories for Automation + Hub. + fragments: + - ah_repo_sync.yml + release_date: '2021-06-01' + 0.4.1: + changes: + bugfixes: + - Now retries auto-approving on the publish role in case there is a delay in + the collection making it to be ready for approval. + fragments: + - publish_approval_retry.yml + release_date: '2021-06-24' + 0.4.3: + changes: + minor_changes: + - Added meta/runtime.yml file which is now a requirement for collections to + be released on Galaxy + - Added requirements_file option to ah_repository module + fragments: + - changes.yml + release_date: '2021-07-21' + 0.5.0: + changes: + major_changes: + - Added execution_environment plugins + - Added user, group and group_perm plugins + fragments: + - new_changes.yml + release_date: '2021-09-16' + 0.5.5: + changes: + bugfixes: + - Add the `no_log` attribute to the `password` and `proxy_password` fields of + the `ah_repository` module (Resolves + fragments: + - changes.yml + release_date: '2021-12-02' + 0.6.1: + changes: + minor_changes: + - added namespace state absent module parameter + - added new permision options to the ah_group_perm module and group role. + - ah_ee_namespace and ah_ee_repository - adding the ``new_name`` parameter so + that users can rename namespaces and repositories (https://github.com/redhat-cop/ah_configuration/issues/44) + - removed dependency for ansible.galaxy module which wasn't accessible in 2.12 + Ansible + fragments: + - 49-ee-new-name.yml + - galaxy_deps.yml + - new_ah_perms.yml + release_date: '2022-02-17' + 0.7.0: + changes: + breaking_changes: + - Options for state in ah_ee_image and ah_ee_repository modules changed from + 'updated' to 'present' as a bug fix. + - module ah_collection_upload has been removed. + major_changes: + - Added ability to add remote repositories in ah_ee_repository module. + - Adds ah_ee_registry module + - Adds ah_ee_registry_index module + - Adds ah_ee_registry_sync module + - Adds ee_registry role + - Adds ee_registry_index role + - Adds ee_registry_sync role + - module ah_collection can now upload and delete collections + minor_changes: + - Added group permissions for remote registry management - add_containerregistryremote, + change_containerregistryremote, delete_containerregistryremote. + - ah_hostname becomes an alias for ah_host in modules + - ah_hostname is now the default option for roles, though ah_host remains an + alias + fragments: + - ah_ee_registry.yml + - ah_ee_registry_sync.yml + - ee_modules_state.yml + - hostname.yml + - new_ah_perms copy.yml + - newperms.yml + modules: + - description: Manage private automation hub execution environment remote registries. + name: ah_ee_registry + namespace: '' + release_date: '2022-04-28' + 0.8.0: + changes: + bugfixes: + - Fix issue where all roles had the wrong variable set and caused failures + - Fixed issue with new variables not included in ee_repository role + - Fixed issue with sync and index roles where a no_log variable was incorrect + minor_changes: + - Changed default retries on async tasks in roles to 50 + fragments: + - rolefixes.yml + release_date: '2022-06-07' + 0.8.1: + changes: + bugfixes: + - Fixed an issue where a genuine API error would cause a module to have an unhandled + error. + - Fixed incorrect task names on serveral roles + - Fixed issue where groups was required to create a namespace using ah_namespace + module + major_changes: + - Allows basic auth as backup method to enable keycloak based users to authenticate. + minor_changes: + - Added certificate and key authentication for ee registries in ah_ee_registry + module + - Added repository role + - Added repository sync role + - Added several options to the ah_repository module + fragments: + - ah_namespace_group.yml + - auth.yml + - ee_registry_options.yml + - repo_options.yml + - repositories.yml + - repositories_sync.yml + - response.yml + - tasknames.yml + release_date: '2022-07-13' + 0.9.1: + changes: + major_changes: + - Adds the ah_api lookup plugin to do generic API lookups on endpoints. + fragments: + - api_lookup.yml + release_date: '2022-07-28' + 0.9.2: + changes: + bugfixes: + - Fixed a major bug that was preventing publish role from uploading new versions + without removing all prior versions. + deprecated_features: + - ah_token auth for modules + known_issues: + - ah_overwrite_existing when set to true, will sometimes cause errors due to + the time it takes to delete namespaces + - ah_token does not work in every module (errors saying parameter is not supported) + - auto_approve does not work when publishing new collections (throws error) + fragments: + - publish_fix.yml + release_date: '2022-10-07' + 0.9.2-beta: + changes: + minor_changes: + - Add markdown linter + - Fix all linter reported errors + - Move linter configurations to root directory + - Update linter versions + - add `ah_token` so `repository_sync` that was missing + - created a role from ah_collection module + fragments: + - collection.yml + - update_linting.yml + release_date: '2022-10-01' + 1.0.0: + changes: + bugfixes: + - Enforced type checking on groups option of ah_namespace + - Fixed doc issue in ah_collection module where overwrite_existing option was + reported with default True when functionality was False + - Fixed doc issue in ah_collection_upload module where wait option was reported + with default True when functionality was False + - Fixed doc issue in collection role where ah_overwrite_existing option was + reported with default True when functionality was False + - Removed ah_token from roles where the modules don't accept it + - Secret fields (password, client_key, proxy_password) set to no_log in ah_ee_registry + module + - Updated ah_ee_namespace to use object_roles instead of object_permissions + when inspecting group permissions + - token option in ah_repository set as no_log to prevent exposure of secret + - url field explicitly required when state=present in ah_ee_registry module + minor_changes: + - Added timeout and interval for waiting for auto approval on ah_collection + module. + - Added timeout and interval for waiting for auto approval on collection role. + - Changed default of overwrite_existing var in collection role to False to match + module + - groups option of ah_namespace module changed to accept just the names of groups + who own the namespace + fragments: + - autoapprove.yml + - linting.yml + - object_roles.yml + release_date: '2022-12-24' + 1.0.1: + changes: + bugfixes: + - Checks for username and password passed to api lookup plugin + - Removed incorrect reference to oauth token abilities for api lookup plugin. + minor_changes: + - Added option to pull all collections from a specific repository + - Collection module and role - add way to get version from path for auto approval + if not provided. + - Update Publish role to be namespace agnostic. + fragments: + - api_lookup.yml + - approval.yaml + release_date: '2023-01-11' + 1.1.0: + changes: + breaking_changes: + - Introduces a `sync` option to the ee_registry_sync role on the `ah_ee_registries` + variable which by default is false and which is required true to sync the + registry. + - Introduces a `sync` option to the ee_repository_sync role on the `ah_ee_repositories` + variable which by default is false and which is required true to sync the + repository. + - Introduces an `index` option to the ee_registry_index role on the `ah_ee_registries` + variable which by default is false and which is required true to index the + registry. + - Removed ah_ee_registry new name option. This affected underlying images indexed + from the registery leaving them abandoned, and subsequent indexes of the renamned + registery would fail. + - removed the options of new_name and delete_namespace_if_empty from ah_ee_repository. + This is due to limitations of the API that broke pushing images to old repository + name. + minor_changes: + - Added ansible role 'role' for creating roles of group permsions. + - Fixed issue with ah_ee_repository working on newer versions. + - Fixed issue with ah_namespace delete + - Updated ah_collection_upload to exit properly. + - Updated ah_role to not require permisions in order to allow for deletion. + - Updated testing coverage. + - add the ah_role module to add role permisions. + - added better error catching to ah_ee_registery_index/sync to handle when a + registery is not found. + - ah_ee_repository include/exclude tags are no longer mutually exclusive + - updated UI get_object method to use version variable. + - updated ah_ee_image to work with galaxy 4.7+ + - updated ah_ee_repository to work with galaxy 4.6+ + fragments: + - repository.yaml + - role.yaml + - sync-index.yml + - testing.yaml + modules: + - description: Manage a role of group permissions + name: ah_role + namespace: '' + release_date: '2023-01-24' + 1.1.1: + changes: + bugfixes: + - add ah_token for the community repository. This commit adds that. + minor_changes: + - Simplify dispatch role + - remove unused import module + fragments: + - general_changes.yml + release_date: '2023-03-16' diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/ci_fixes.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/ci_fixes.yml new file mode 100644 index 00000000..c15a286f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/ci_fixes.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Fixing errors in CI +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/config.yaml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/config.yaml new file mode 100644 index 00000000..c0cb7457 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/config.yaml @@ -0,0 +1,34 @@ +--- +changelog_filename_template: ../CHANGELOG.rst +changelog_filename_version_depth: 0 +changes_file: changelog.yaml +changes_format: combined +ignore_other_fragment_extensions: true +keep_fragments: false +mention_ancestor: true +new_plugins_after_name: removed_features +notesdir: fragments +prelude_section_name: release_summary +prelude_section_title: Release Summary +sanitize_changelog: true +sections: +- - major_changes + - Major Changes +- - minor_changes + - Minor Changes +- - breaking_changes + - Breaking Changes / Porting Guide +- - deprecated_features + - Deprecated Features +- - removed_features + - Removed Features (previously deprecated) +- - security_fixes + - Security Fixes +- - bugfixes + - Bugfixes +- - known_issues + - Known Issues +title: galaxy.galaxy +trivial_section_name: trivial +use_fqcn: true +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/.gitkeep b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/400-collection-upload.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/400-collection-upload.yml new file mode 100644 index 00000000..036fc7a1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/400-collection-upload.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixed an issue where ah_collection_upload was breaking when colelcting from a URL due to generated temp filenames +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/add_new_ci_workflow.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/add_new_ci_workflow.yml new file mode 100644 index 00000000..48a99f24 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/add_new_ci_workflow.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Add new CI workflow to test Galaxy api prefix supplied from resource_provider (#403). +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ah_host_env.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ah_host_env.yml new file mode 100644 index 00000000..6307ef73 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ah_host_env.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixed issue in all roles where AH_HOST was not being defaulted to if no variable set. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ansible_config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ansible_config.yml new file mode 100644 index 00000000..6de8db8a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ansible_config.yml @@ -0,0 +1,9 @@ +--- +minor_changes: + - In ansible_config role, changed default singular value of ansible_config_list to take the validate_certs from the ah_validate_certs value as documented + - Added auth_url option for automation_hub_list in ansible_config role + - Changed ansible_config template to default to use ah_token and prevent two tokens being added + - Added argument spec for ansible_config role +bugfixes: + - Fixed documentation for ansible_config role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/api_prefix_with_resource_provider.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/api_prefix_with_resource_provider.yml new file mode 100644 index 00000000..5d2bb36f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/api_prefix_with_resource_provider.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Retrieves Galaxy api prefix when resource_provider is present, defaults to existing behavior. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/argspec.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/argspec.yml new file mode 100644 index 00000000..89065f4e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/argspec.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Add arg spec to all roles +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/async.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/async.yml new file mode 100644 index 00000000..d6727381 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/async.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Add option to change async directory, and set the default to null. /tmp/.ansible_async was a workaround while the default was broken previously. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_collection_delete.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_collection_delete.yml new file mode 100644 index 00000000..36d9e524 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_collection_delete.yml @@ -0,0 +1,5 @@ +--- +bugfixes: + - Fixed an issue where if version was not specified in ah_collection and state=absent then the module will fail + - Fixed an issue where if the collection version has a '-' then it would not be referenced properly from the file path +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_galaxy_path_prefix.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_galaxy_path_prefix.yml new file mode 100644 index 00000000..a538f4a3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/bug_galaxy_path_prefix.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixed issue where collection exits when detecting Galaxy path prefix +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_overwrite_existing.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_overwrite_existing.yml new file mode 100644 index 00000000..7285b666 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_overwrite_existing.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixes issue with overwriting existing collection where timing didn't work correctly +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote.yml new file mode 100644 index 00000000..566ac827 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote.yml @@ -0,0 +1,6 @@ +--- +major_changes: + - Added collection_remote role and module to manage collection remotes. This will only work in Galaxy 4.7 or AAP 2.4. +deprecated_features: + - ah_repository, ah_repository_sync modules and repository, repository_sync roles are being depreciated, they will be removed when support for AAP 2.3 ends in May of 2024. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote_requirements.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote_requirements.yml new file mode 100644 index 00000000..f8b0208c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_remote_requirements.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixes issue in collection_remotes module where the requriements could not be blanked out +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_repos.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_repos.yml new file mode 100644 index 00000000..1668f81c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/collection_repos.yml @@ -0,0 +1,5 @@ +--- +major_changes: + - Added collection_repository and collection_repository_sync roles and modules to manage collection repositories. This will only work in Galaxy 4.7 or AAP 2.4. + - Fix collection repository roles and modules update options and role options to behave correctly. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/depreciation.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/depreciation.yml new file mode 100644 index 00000000..5c2d836a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/depreciation.yml @@ -0,0 +1,7 @@ +--- +deprecated_features: + - Added warnings to ah_ee_namespace module to depreciate it and the ee_namespace role that they will be removed when support for AAP 2.2 ends in November of 2023. + - Added warnings to ah_group_perm module to depreciate it and the group role that uses it they will be removed when support for AAP 2.2 ends in November of 2023. + - Added warnings to ah_repository module to depreciate it and the repository role that they will be removed when support for AAP 2.3 ends in May of 2024. + - Added warnings to ah_repository_sync module to depreciate it and the repository_sync role that they will be removed when support for AAP 2.3 ends in May of 2024. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ee_repos.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ee_repos.yml new file mode 100644 index 00000000..750b4134 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/ee_repos.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fix issue where changing an execution environment repository caused an error statingCannot make a PUT request to this endpoint. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/flake8bug.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/flake8bug.yml new file mode 100644 index 00000000..35cf1941 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/flake8bug.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixed a flake8 failure with comparison of types. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/global_proxy.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/global_proxy.yml new file mode 100644 index 00000000..7ab562ca --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/global_proxy.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Add role option for proxy information rather than being forced to use global +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/grou_async_timeout.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/grou_async_timeout.yml new file mode 100644 index 00000000..b28f05d5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/grou_async_timeout.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - Fixed an issue where where default async timeout was not set in the group role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/group_roles.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/group_roles.yml new file mode 100644 index 00000000..943571c6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/group_roles.yml @@ -0,0 +1,10 @@ +--- +major_changes: + - Added group_roles role and module to manage and attach roles to groups. Global role assignment will only work in Galaxy 4.6 or AAP 2.3 or later, while the targeted role assignment will work in Galaxy 4.7 or AAP 2.4 and above. +minor_changes: + - Updated output in multiple roles to provide more information. + - Updated server version lookup to remove the dev portion if working on a developmental version of Galaxy. + - Updated ah_groups module to use new Pulp endpoint. The change should be seamless. + - added more permissions to the ah_role modules. Consult your web UI to see what roles are available specific to your version. + - added more roles to the dispatch role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/offline_sync.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/offline_sync.yml new file mode 100644 index 00000000..7c242c7d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/offline_sync.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - added offline_sync role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/remove_bindep.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/remove_bindep.yml new file mode 100644 index 00000000..c0d9eaa1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/remove_bindep.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - removed bindep.txt as the only requirement was python. Ansible requires python, it shouldn't be needed in our bindep. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/removed_modules.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/removed_modules.yml new file mode 100644 index 00000000..19349f2d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/removed_modules.yml @@ -0,0 +1,4 @@ +--- +major_changes: + - removed modules and now expected to used ansible.hub collection +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/repositories.yml new file mode 100644 index 00000000..b0a882fe --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/repositories.yml @@ -0,0 +1,4 @@ +--- +breaking_changes: + - Update collection repository roles to use allow for lists (you now need to have a name for each repo and update the variable name) as this has been expanded in the newer version of the product. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/request_timeout.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/request_timeout.yml new file mode 100644 index 00000000..f83f9f2a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/request_timeout.yml @@ -0,0 +1,7 @@ +--- +minor_changes: + - Added request_timeout option for plugins and roles in the collection + +bugfixes: + - Fixed role readme errors and standardised variable section of role readmes +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/reroute.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/reroute.yml new file mode 100644 index 00000000..0d5eceb6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/reroute.yml @@ -0,0 +1,3 @@ +--- +major_changes: + - redirect all modules to ansible.hub. diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/roles_token.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/roles_token.yml new file mode 100644 index 00000000..32669e7b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/roles_token.yml @@ -0,0 +1,8 @@ +--- +minor_changes: + - Gathers a token on collection role if necessary to prevent token becoming invalid by another async task. + - Gathers a token on namespace role if necessary to prevent token becoming invalid by another async task. + - Gathers a token on publish role if necessary to prevent token becoming invalid by another async task. + - Gathers a token on repository role if necessary to prevent token becoming invalid by another async task. + - Gathers a token on repository_sync role if necessary to prevent token becoming invalid by another async task. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/source_build.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/source_build.yml new file mode 100644 index 00000000..1a65407d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/source_build.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - ansible.cfg removed from root and galaxy.yml added to enable install from source +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/token_auth.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/token_auth.yml new file mode 100644 index 00000000..3789a2d3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/token_auth.yml @@ -0,0 +1,6 @@ +--- +bugfixes: + - Removed token authentication from the following roles - collection_remote, collection_repository, collection_repository_sync. The corresponding modules did not support token authentication. + - Removed References in the readmes to token authentication for any module that does not support token authentication. + - ah_repository_sync incorrectly stated which module replaced it, It is being replaced by collection_repository_sync. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update-github-actions.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update-github-actions.yml new file mode 100644 index 00000000..1d8999a9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update-github-actions.yml @@ -0,0 +1,5 @@ +--- +minor_changes: + - Added AH_HOST, AH_USERNAME and AH_PASSWORD to github environment variables + - Added extra variable ci_workflow to allow for more flexibility in testing playbooks. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update_new_ci_workflow.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update_new_ci_workflow.yml new file mode 100644 index 00000000..1898fed9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/changelogs/fragments/update_new_ci_workflow.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Remove testing playbook, expected to fail, from new CI workflow. (#416). +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/meta/runtime.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/meta/runtime.yml new file mode 100644 index 00000000..eb9efb8b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/meta/runtime.yml @@ -0,0 +1,59 @@ +--- +requires_ansible: '>=2.14.0' +plugin_routing: + modules: + ah_approval: + redirect: ansible.hub.ah_approval + ah_build: + redirect: ansible.hub.ah_build + ah_collection: + redirect: ansible.hub.ah_collection + ah_collection_upload: + redirect: ansible.hub.ah_collection_upload + ah_ee_image: + redirect: ansible.hub.ah_ee_image + ah_ee_registry: + redirect: ansible.hub.ah_ee_registry + ah_ee_registry_index: + redirect: ansible.hub.ah_ee_registry_index + ah_ee_registry_sync: + redirect: ansible.hub.ah_ee_registry_sync + ah_ee_repository: + redirect: ansible.hub.ah_ee_repository + ah_ee_repository_sync: + redirect: ansible.hub.ah_ee_repository_sync + ah_group: + redirect: ansible.hub.ah_group + ah_namespace: + redirect: ansible.hub.ah_namespace + ah_role: + redirect: ansible.hub.ah_role + ah_token: + redirect: ansible.hub.ah_token + ah_user: + redirect: ansible.hub.ah_user + collection_remote: + redirect: ansible.hub.collection_remote + collection_repository: + redirect: ansible.hub.collection_repository + collection_repository_sync: + redirect: ansible.hub.collection_repository_sync + group_roles: + redirect: ansible.hub.group_roles + ah_ee_namespace: + deprecation: + removal_version: 3.0.0 + warning_text: The endpoint has been removed and is not supported in AAP 2.3 onwards + ah_group_perm: + deprecation: + removal_version: 3.0.0 + warning_text: The endpoint has been removed and is not supported in AAP 2.3 onwards + ah_repository: + deprecation: + removal_version: 3.0.0 + warning_text: The endpoint has been removed and is not supported in AAP 2.4 onwards + ah_repository_sync: + deprecation: + removal_version: 3.0.0 + warning_text: The endpoint has been removed and is not supported in AAP 2.4 onwards +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/README.md new file mode 100644 index 00000000..80f770d9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/README.md @@ -0,0 +1,116 @@ +# galaxy.galaxy.ansible_config + +## Description + +An Ansible Role to create ansible.cfg files based on your Automation Hub servers + +## Requirements + +ansible-galaxy collection install -r tests/collections/requirements.yml to be installed +Currently: + awx.awx + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ansible_config_mode`|'0644'|no|str|The permissions the resulting ansible config file or directory should have.| +|`ansible_config_owner`|""|no|str|The owner the resulting ansible config file or directory should have.| +|`ansible_config_group`|""|no|str|The group the resulting ansible config file or directory should have.| +|`ah_configuration_working_dir`|"/var/tmp"|no|path|Location to render the ansible config file to.| +|`automation_hub_list`|`[]`|no|list|A list of Automation hubs and galaxies to put in the ansible config, see below for details.| +|`ansible_config_list`|`[{"header":"galaxy","keypairs":[{"key":"ignore_certs","value":"{{ not (ah_validate_certs \| bool) }}"}]}]`|no|list|A set of ansible config settings, a default is set, but can be overridden, see below for details.| +|`ah_token`|""|no|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_path_prefix`|`galaxy`|no|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the ansible config task does not by default include sensitive information, we highly recommend the use of ansible vault for passwords and tokens. +ah_configuration_ansible_config_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ansible_config_secure_logging`|`False`|no|Whether or not to include the sensitive ansible config role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +## Data Structures + +### automation_hub_list + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Name of the Automation Hub or Galaxy Server.| +|`url`|""|yes|str|URL to the Automation Hub or Galaxy Server| +|`auth_url`|""|no|str|URL to the authentication for Automation Hub or Galaxy Server| +|`token`|""|no|str|Automation Hub or Galaxy Server token.| + +### ansible_config_list + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`header`|""|yes|str|Header of the section that contains keypairs.| +|`keypairs`|`[]`|no|list|List key value pairs for settings in the ansible.cfg.| + +### ansible_config_list[].keypairs + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`key`|""|yes|str|Key for entry under this header.| +|`value`|""|yes|str|Value for entry for the corresponding key.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ansible_config_list: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{{ not (ah_validate_certs | bool) }}" + - key: server_list + value: "{{ automation_hub_list | map(attribute='name') | join(',') }}" + +automation_hub_list: + - name: automation_hub + url: "{{ah_host}}/api/automation-hub/content/0000001-synclist/" + auth_url: https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token + token: changeme +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Set up Ansible Configuration for usage with PAH + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ansible_config +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Sean Sullivan](https://github.com/sean-m-sullivan/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/defaults/main.yml new file mode 100644 index 00000000..de89f5f0 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/defaults/main.yml @@ -0,0 +1,35 @@ +--- + +# These are the default variables common to most ah_configuration and _utilities roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the ansible config role +# ansible_config_owner: # optional +# ansible_config_group: # optional +ansible_config_mode: 0644 +ah_configuration_working_dir: "/var/tmp" +validate_certs: false +ah_path_prefix: galaxy +# a list of dictionaries describing the Automation Hub namespace +automation_hub_list: [] +# possible fields: +# - name: automation-hub +# url: "url of server" # mandatory +# auth_url: "url of auth server" # optional +# token: "token" # optional +# username: "username" # optional +# password: "password" # optional + +ansible_config_list: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{{ not (ah_validate_certs | default(true) | bool) }}" +# - key: server_list +# value: "{{ automation_hub_list | map(attribute="name") | join(",") }}" + +ah_configuration_ansible_config_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/argument_specs.yml new file mode 100644 index 00000000..dd899847 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/argument_specs.yml @@ -0,0 +1,100 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create ansible.cfg files based on your Automation Hub servers + options: + ah_token: + required: false + type: str + description: Token for access to the Automation Hub server + ah_path_prefix: + default: galaxy + required: false + type: str + description: API path used to access the api for the Automation Hub server. + ansible_config_mode: + default: 0644 + required: false + type: str + description: Mode for the created ansible.cfg file to take + ansible_config_owner: + required: false + type: str + description: The owner of the created ansible.cfg file + ansible_config_group: + required: false + type: str + description: The group owner of the created ansible.cfg file + ah_configuration_working_dir: + default: /var/tmp + required: false + type: str + description: The location the ansible.cfg will be stored + automation_hub_list: + default: [] + required: false + type: list + description: A list of Automation hubs and galaxies to put in the ansible config + elements: dict + options: + name: + required: true + type: str + description: The name to use to reference the AH repository + url: + required: true + type: str + description: The URL for the AH repository + auth_url: + required: false + type: str + description: The URL for the authentication to AH server. Most likely to be used to connect to Red Hat Cloud Automation Hub. + token: + default: "{{ ah_token | default(omit) }}" + required: false + type: str + description: The token to use to authenticate to the AH server + ansible_config_list: + default: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{{ not (ah_validate_certs | default(true) | bool) }}" + required: false + type: list + description: A set of ansible config settings, a default is set, but can be overridden. + elements: str + options: + header: + required: true + type: str + description: The section header for the ansible.cfg file + keypairs: + required: false + default: [] + type: list + description: List key value pairs for settings in the ansible.cfg + elements: dict + options: + key: + required: true + type: str + description: Key for entry under the header + value: + required: true + type: str + description: Value for entry for the corresponding key. + + # No_log variables + ah_configuration_ansible_config_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/main.yml new file mode 100644 index 00000000..06f4bda5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "namespace" + author: "Sean Sullivan" + description: "An Ansible Role to create namespace in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "namespace" + - "namespaces" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tasks/main.yml new file mode 100644 index 00000000..710c0a44 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tasks/main.yml @@ -0,0 +1,11 @@ +--- +# Create ansible config template +- name: Template config template + ansible.builtin.template: + src: ansible.cfg.j2 + dest: "{{ ah_configuration_working_dir }}/ansible.cfg" + owner: "{{ ansible_config_owner | default(omit) }}" + group: "{{ ansible_config_group | default(omit) }}" + mode: "{{ ansible_config_mode }}" + no_log: "{{ ah_configuration_ansible_config_secure_logging }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/templates/ansible.cfg.j2 b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/templates/ansible.cfg.j2 new file mode 100644 index 00000000..de2d7582 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/templates/ansible.cfg.j2 @@ -0,0 +1,19 @@ +{% for section in ansible_config_list %} +[{{ section.header }}] +{% for key_set in (section.keypairs | default([])) %} +{{ key_set.key }}={{ key_set.value }} +{% endfor %} +{% endfor %} + +{% for server in automation_hub_list %} +[galaxy_server.{{ server.name }}] +url={{ server.url }} +{% if server.auth_url is defined %} +auth_url={{ server.auth_url }} +{% endif %} +{% if server.token is defined %} +token={{ server.token }} +{% elif ah_token is defined %} +token={{ ah_token }} +{% endif %} +{% endfor %} diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/test.yml new file mode 100644 index 00000000..182db944 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add namespace to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../namespace +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/vars/config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/vars/config.yml new file mode 100644 index 00000000..d736530a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ansible_config/tests/vars/config.yml @@ -0,0 +1,16 @@ +--- +ansible_config_list: + settings: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{{ validate_certs | bool }}" + - key: server_list + value: "{{ automation_hub_list | map(attribute='name') | join(',') }}" + +automation_hub_list: + - name: automation_hub + url: https://cloud.redhat.com/api/automation-hub/ + auth_url: https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token + token: "{{ ah_token }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/README.md new file mode 100644 index 00000000..4a57fce3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/README.md @@ -0,0 +1,117 @@ +# galaxy.galaxy.collection + +## Description + +An Ansible Role to update, or destroy Automation Hub Collections. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_collections`|`see below`|yes|Data structure describing your collections, described below.|| + +These are the sub options for the vars `ah_collections` which are dictionaries with the options you want. See examples for details. +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`namespace`|""|yes|Namespace name. Must be lower case containing only alphanumeric characters and underscores.|"awx"| +|`name`|""|yes|Collection name. Must be lower case containing only alphanumeric characters and underscores.|| +|`version`|""|no|Collection Version. Must be lower case containing only alphanumeric characters and underscores. If not provided and 'auto_approve' true, will be derived from the path.|| +|`path`|""|no|Collection artifact file path.|| +|`wait`|"true"|no|Waits for the collection to be uploaded|| +|`auto_approve`|"true"|no|Approves a collection and requires version to be set.|| +|`timeout`|"true"||Maximum time to wait for the collection approval|| +|`interval`|"true"|10|Interval at which approval is checked|| +|`overwrite_existing`|"false"|no|Overwrites an existing collection and requires version to be set.|| +|`state`|"present"|no|Desired state of the resource|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_collection_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_collection_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_collection_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_collection_secure_logging`|`False`|no|Whether or not to include the sensitive collection role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +## Data Structure + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_collections: + - namespace: 'awx' + name: 'awx' + path: /var/tmp/collections/awx_awx-15.0.0.tar.gz + state: present + + - namespace: test_collection + name: test + version: 4.1.2 + state: absent +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add collection + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Inderpal Tiwana](https://github.com/inderpaltiwana/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/defaults/main.yml new file mode 100644 index 00000000..66541d29 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/defaults/main.yml @@ -0,0 +1,26 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the collection role +ah_collections: [] +# possible fields: +# - namespace +# - name +# - version +# - path +# - wait +# - auto_approve +# - overwrite_existing +# - state + +ah_configuration_collection_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_collection_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_collection_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_collection_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/argument_specs.yml new file mode 100644 index 00000000..f9895cc5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/argument_specs.yml @@ -0,0 +1,76 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to update, or destroy Automation Hub Collections. + options: + ah_collections: + default: [] + required: false + description: Data structure describing your collections to manage. + type: list + elements: dict + + # Async variables + ah_configuration_collection_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_collection_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_collection_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/main.yml new file mode 100644 index 00000000..e89b485d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "collection" + author: "Inderpal Tiwana" + description: "An Ansible Role to update, or destroy Automation Hub Collections." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "collection" + - "sync" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tasks/main.yml new file mode 100644 index 00000000..670900df --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tasks/main.yml @@ -0,0 +1,65 @@ +# Update or destroy Automation Hub Collection +--- +- name: Get token + ah_token: + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + when: + - ah_token is not defined + - lookup("ansible.builtin.env", "AH_API_TOKEN") == "" + - ah_collections | length > 1 + +- name: Update or destroy Automation Hub Collection + ah_collection: + namespace: "{{ __collection.namespace }}" + name: "{{ __collection.name }}" + version: "{{ __collection.version | default(omit) }}" + path: "{{ __collection.path | default(omit) }}" + repository: "{{ __collection.repository | default(omit) }}" + wait: "{{ __collection.wait | default(omit) }}" + auto_approve: "{{ __collection.auto_approve | default(omit) }}" + timeout: "{{ __collection.timeout | default(omit) }}" + interval: "{{ __collection.interval | default(omit) }}" + overwrite_existing: "{{ __collection.overwrite_existing | default(omit) }}" + state: "{{ __collection.state | default('present') }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collections }}" + loop_control: + loop_var: "__collection" + no_log: "{{ ah_configuration_collection_secure_logging }}" + async: "{{ ah_configuration_collection_async_timeout }}" + poll: 0 + register: __collections_job_async + changed_when: not __collections_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: Sleep for 10 seconds and continue with play + ansible.builtin.wait_for: + timeout: 10 + +- name: "Update/Destroy collection | Wait for finish the update/destruction of collection" + ansible.builtin.async_status: + jid: "{{ __collections_job_async_result_item.ansible_job_id }}" + register: __collections_job_async_result + until: __collections_job_async_result.finished + retries: "{{ ah_configuration_collection_async_retries }}" + delay: "{{ ah_configuration_collection_async_delay }}" + loop: "{{ __collections_job_async.results }}" + loop_control: + loop_var: __collections_job_async_result_item + when: __collections_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_collection_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tests/test.yml new file mode 100644 index 00000000..dbd972fc --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Update or destroy Automation Hub Collection + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/README.md new file mode 100644 index 00000000..6adf27dc --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/README.md @@ -0,0 +1,125 @@ +# collection_remote + +## Description + +An Ansible Role to create a Collection Remote Repository. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_collection_remotes`|`see below`|yes|Data structure describing your collection remote repository, described below.|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_collection_remote_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_collection_remote_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_collection_remote_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_collection_remote_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Collection Remote Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`name`|``|yes| Repository name. Probably one of community, validated, or rh-certified|| +|`url`|`https://cloud.redhat.com/api/automation-hub/`|no|(`ah_repository_certified`)Remote URL for the repository.|`https://console.redhat.com/api/automation-hub/content/`| +|`url`|`https://galaxy.ansible.com/api/`|no|(`ah_repository_community`)Remote URL for the repository.|| +|`auth_url`|`https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token`|no|(`ah_repository_certified`)Remote URL for the repository authentication if separate.|| +|`token`|``|no|Token to authenticate to the remote repository.|| +|`policy`|`immediate`|no|The policy to use when downloading content. Can be one of `immediate`, `When syncing, download all metadata and content now.`.|| +|`requirements`|``|no|Requirements, a list of collections in [requirements file format](https://docs.ansible.com/ansible/latest/collections_guide/collections_installing.html#install-multiple-collections-with-a-requirements-file) to limit thedownload from remote. This will only download provided collections. This is only the list under collections. See examples for usage.|| +|`requirements_file`|``|no|A yaml requirements file to download from remote. In requirements file format. Exclusive with `requirements` || +|`username`|``|no|Username to authenticate to the remote repository.|| +|`password`|``|no|Password to authenticate to the remote repository.|| +|`tls_validation`|`True`|no|Whether to use TLS validation against the remote repository|True| +|`client_key`|``|no|A PEM encoded private key file used for authentication|| +|`client_cert`|``|no|A PEM encoded client certificate used for authentication|| +|`ca_cert`|``|no|A PEM encoded CA certificate used for authentication|| +|`client_key_path`|``|no|Path to a PEM encoded private key file used for authentication|| +|`client_cert_path`|``|no|Path to a PEM encoded client certificate used for authentication|| +|`ca_cert_path`|``|no|Path to a PEM encoded CA certificate used for authentication|| +|`download_concurrency`|`10`|no| Number of concurrent collections to download.|| +|`max_retries`|`0`|no|Retries to use when running sync. Default is 0 which does not limit.|| +|`rate_limit`|`8`|no|Limits total download rate in requests per second.|| +|`signed_only`|`False`|no|Only download signed collections|False| +|`sync_dependencies`|`True`|no|Whether to download dependencies when syncing collections.|False| +|`proxy_url`|``|no|The URL for the proxy. Defaults to global `proxy_url` variable.|| +|`proxy_username`|``|no|The username for the proxy authentication. Defaults to global `proxy_username` variable.|| +|`proxy_password`|``|no|The password for the proxy authentication. Defaults to global `proxy_password` variable.|| +|`state`|`present`|no|Desired state of the collection_remote. Either `present` or `absent`.|| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_collection_remotes: + - name: community-infra + url: https://beta-galaxy.ansible.com/ + requirements: + - name: infra.ee_utilities + - name: infra.controller_configuration +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_remote +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/defaults/main.yml new file mode 100644 index 00000000..c1f02ff1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role +ah_configuration_collection_remote_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_collection_remote_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_collection_remote_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_collection_remote_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/argument_specs.yml new file mode 100644 index 00000000..59559d75 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create collection remotes in Automation Hub. + options: + ah_collection_remotes: + default: [] + required: false + description: Data structure describing the certified collection remotes to manage. + type: list + elements: dict + proxy_url: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + proxy_username: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + proxy_password: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + + # Async variables + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_collection_remote_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/main.yml new file mode 100644 index 00000000..71d194ab --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + role_name: "collection_remote" + author: "Sean Sullivan" + description: "An Ansible Role to create collection remotes in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "remote" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tasks/main.yml new file mode 100644 index 00000000..c17d7a01 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tasks/main.yml @@ -0,0 +1,62 @@ +--- +# Create AH repository +- name: Add Automation Hub Collection Remote repository + collection_remote: + name: "{{ __collection_remote_item.name }}" + url: "{{ __collection_remote_item.url }}" + auth_url: "{{ __collection_remote_item.auth_url | default(omit) }}" + token: "{{ __collection_remote_item.token | default(omit) }}" + policy: "{{ __collection_remote_item.policy | default(omit) }}" + requirements: "{{ __collection_remote_item.requirements | default(omit) }}" + requirements_file: "{{ __collection_remote_item.requirements_file | default(omit) }}" + username: "{{ __collection_remote_item.username | default(omit) }}" + password: "{{ __collection_remote_item.password | default(omit) }}" + tls_validation: "{{ __collection_remote_item.tls_validation | default(true) }}" + client_key: "{{ __collection_remote_item.client_key | default(omit) }}" + client_cert: "{{ __collection_remote_item.client_cert | default(omit) }}" + ca_cert: "{{ __collection_remote_item.ca_cert | default(omit) }}" + client_key_path: "{{ __collection_remote_item.client_key_path | default(omit) }}" + client_cert_path: "{{ __collection_remote_item.client_cert_path | default(omit) }}" + ca_cert_path: "{{ __collection_remote_item.ca_cert_path | default(omit) }}" + download_concurrency: "{{ __collection_remote_item.download_concurrency | default(10) }}" + max_retries: "{{ __collection_remote_item.max_retries | default(0) }}" + rate_limit: "{{ __collection_remote_item.rate_limit | default(8) }}" + signed_only: "{{ __collection_remote_item.signed_only | default(omit) }}" + sync_dependencies: "{{ __collection_remote_item.sync_dependencies | default(omit) }}" + proxy_url: "{{ __collection_remote_item.proxy_url | default(proxy_url | default(omit)) }}" + proxy_username: "{{ __collection_remote_item.proxy_username | default(proxy_username | default(omit)) }}" + proxy_password: "{{ __collection_remote_item.proxy_password | default(proxy_password | default(omit)) }}" + state: "{{ __collection_remote_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collection_remotes }}" + loop_control: + loop_var: "__collection_remote_item" + no_log: "{{ ah_configuration_collection_remote_secure_logging }}" + async: "{{ ah_configuration_collection_remote_async_timeout }}" + poll: 0 + register: __collection_remote_job_async + changed_when: not __collection_remote_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Repository | Wait for finish the repository creation" + ansible.builtin.async_status: + jid: "{{ __collection_remote_job_async_result_item.ansible_job_id }}" + register: __collection_remote_job_async_result + until: __collection_remote_job_async_result.finished + retries: "{{ ah_configuration_collection_remote_async_retries }}" + delay: "{{ ah_configuration_collection_remote_async_delay }}" + loop: "{{ __collection_remote_job_async.results }}" + loop_control: + loop_var: __collection_remote_job_async_result_item + when: __collection_remote_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_collection_remote_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/test.yml new file mode 100644 index 00000000..57f6dab5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_remote +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/vars/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/vars/repositories.yml new file mode 100644 index 00000000..577fdbc8 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_remote/tests/vars/repositories.yml @@ -0,0 +1,8 @@ +--- +ah_collection_remotes: + - name: community-infra + url: https://beta-galaxy.ansible.com/ + requirements: + - name: infra.ee_utilities + - name: infra.controller_configuration +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/README.md new file mode 100644 index 00000000..656f2251 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/README.md @@ -0,0 +1,133 @@ +# collection_repository + +## Description + +An Ansible Role to create a Collection Repository. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_collection_repositories`|`see below`|yes|Data structure describing your collection remote repository, described below.|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_collection_repository_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_collection_repository_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_collection_repository_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_collection_repository_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Collection Repository Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str| Collection Repository name. Probably one of community, validated, rh-certified, or one you have created.| +|`description`|""|no|str|Description to use for the Collection Repository.| +|`retain_repo_versions`|0|no|int|Retain X versions of the Collection repository. Default is 0 which retains all versions.| +|`pulp_labels`|""|no|dict|Pipeline and search options for the collection repository. See additional options below for details.| +|`distribution`|""|no|dict|Distribution options for the collection repository. See additional options below for details. Most users will leave this blank| +|`private`|""|no|boolean|Make the Collection repository private.| +|`remote`|""|no|str|Remote repository name. This is used if the collections use a remote source.| +|`update`|`false`|no|bool|Wait for the Collection repository to finish syncing before returning.| +|`wait`|`true`|no|bool|Wait for the Collection repository to finish syncing before returning.| +|`interval`|1.0|no|float|The interval to request an update from Automation Hub.| +|`timeout`|""|no|int|If waiting for the project to update this will abort after this amount of seconds.| +|`state`|`present`|no|str|Desired state of the collection repository. Either `present` or `absent`.| + +#### Additional Option Variables + +```yaml +--- +pulp_labels: + pipeline: "approved" + hide_from_search: "" +distribution: + name: "foobar" + state: present +``` + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`pipeline`|""|no|str|Description to use for the Collection Repository.| +|`hide_from_search`|""|no|str|Pipeline and search options for the collection repository.| +|`name`|""|no|dict|Distribution name to use for this collection repository. Will default to repository name if not provided.| +|`state`|`absent`|no|str|Desired state of the distribution. Either `present` or `absent`.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_collection_repositories: + - name: "foobar" + description: "description of foobar repository" + pulp_labels: + pipeline: "approved" + distribution: + name: "foobar" + state: present + remote: community +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_repository +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/defaults/main.yml new file mode 100644 index 00000000..8b7153cc --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role +ah_configuration_collection_repository_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_collection_repository_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_collection_repository_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_collection_repository_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/argument_specs.yml new file mode 100644 index 00000000..95dbdbaa --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/argument_specs.yml @@ -0,0 +1,60 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create collection remotes in Automation Hub. + options: + ah_collection_repositories: + default: [] + required: false + description: Data structure describing the certified collection remotes to manage. + type: list + elements: dict + + # Async variables + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_collection_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/main.yml new file mode 100644 index 00000000..2555bb03 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + role_name: "collection_repository" + author: "Sean Sullivan" + description: "An Ansible Role to create collection remote in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "repository" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tasks/main.yml new file mode 100644 index 00000000..a571b7ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tasks/main.yml @@ -0,0 +1,49 @@ +--- +# Create AH repository +- name: Add Automation Hub Collection Remote repository + collection_repository: + name: "{{ __collection_repository_item.name }}" + description: "{{ __collection_repository_item.description | default(omit) }}" + retain_repo_versions: "{{ __collection_repository_item.retain_repo_versions | default(omit) }}" + pulp_labels: "{{ __collection_repository_item.pulp_labels | default(omit) }}" + distribution: "{{ __collection_repository_item.distribution | default(omit) }}" + private: "{{ __collection_repository_item.private | default(omit) }}" + remote: "{{ __collection_repository_item.remote | default(omit) }}" + update_repo: "{{ __collection_repository_item.update_repo | default(omit) }}" + wait: "{{ __collection_repository_item.wait | default(omit) }}" + interval: "{{ __collection_repository_item.interval | default(1) }}" + timeout: "{{ __collection_repository_item.timeout | default(omit) }}" + state: "{{ __collection_repository_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collection_repositories }}" + loop_control: + loop_var: "__collection_repository_item" + no_log: "{{ ah_configuration_collection_repository_secure_logging }}" + async: "{{ ah_configuration_collection_repository_async_timeout }}" + poll: 0 + register: __collection_repository_job_async + changed_when: not __collection_repository_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Repository | Wait for finish the repository creation" + ansible.builtin.async_status: + jid: "{{ __collection_repository_job_async_result_item.ansible_job_id }}" + register: __collection_repository_job_async_result + until: __collection_repository_job_async_result.finished + retries: "{{ ah_configuration_collection_repository_async_retries }}" + delay: "{{ ah_configuration_collection_repository_async_delay }}" + loop: "{{ __collection_repository_job_async.results }}" + loop_control: + loop_var: __collection_repository_job_async_result_item + when: __collection_repository_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_collection_repository_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/test.yml new file mode 100644 index 00000000..99d0ada6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add collection repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_repository +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/vars/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/vars/repositories.yml new file mode 100644 index 00000000..173b8957 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository/tests/vars/repositories.yml @@ -0,0 +1,11 @@ +--- +ah_collection_repositories: + - name: "foobar" + description: "description of foobar repository" + pulp_labels: + pipeline: "approved" + distribution: + name: "foobar" + state: present + remote: community +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/README.md new file mode 100644 index 00000000..fc077db5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/README.md @@ -0,0 +1,104 @@ +# collection_repository_sync + +## Description + +An Ansible Role to sync a Collection Repository. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_collection_repositories`|`see below`|yes|Data structure describing your collection remote repository, described below.|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_collection_repository_sync_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_collection_repository_sync_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_collection_repository_sync_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_collection_repository_sync_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Collection Repository Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str| Collection Repository name. Probably one of community, validated, rh-certified, or one you have created.| +|`wait`|`true`|no|bool|Wait for the Collection repository to finish syncing before returning.| +|`interval`|1.0|no|float|The interval to request an update from Automation Hub.| +|`timeout`|""|no|int|If waiting for the repository to update this will abort after this amount of seconds.| +|`state`|`present`|no|str|Desired state of the collection repository. Either `present` or `absent`.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_collection_repositories: + - name: rh-certified + wait: false + - name: community + wait: true + timeout: 60 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Sync repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_repository_sync +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/defaults/main.yml new file mode 100644 index 00000000..8ca8ff22 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role +ah_configuration_collection_repository_sync_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_collection_repository_sync_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_collection_repository_sync_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_collection_repository_sync_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/argument_specs.yml new file mode 100644 index 00000000..95dbdbaa --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/argument_specs.yml @@ -0,0 +1,60 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create collection remotes in Automation Hub. + options: + ah_collection_repositories: + default: [] + required: false + description: Data structure describing the certified collection remotes to manage. + type: list + elements: dict + + # Async variables + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_collection_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/main.yml new file mode 100644 index 00000000..2555bb03 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + role_name: "collection_repository" + author: "Sean Sullivan" + description: "An Ansible Role to create collection remote in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "repository" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tasks/main.yml new file mode 100644 index 00000000..a13cb22e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tasks/main.yml @@ -0,0 +1,41 @@ +--- +# Sync AH repository +- name: Sync Automation Hub Collection Remote repository + collection_repository_sync: + name: "{{ __collection_repository_sync_item.name }}" + wait: "{{ __collection_repository_sync_item.wait | default(omit) }}" + interval: "{{ __collection_repository_sync_item.interval | default(1) }}" + timeout: "{{ __collection_repository_sync_item.timeout | default(omit) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collection_repositories }}" + loop_control: + loop_var: "__collection_repository_sync_item" + no_log: "{{ ah_configuration_collection_repository_sync_secure_logging }}" + async: "{{ ah_configuration_collection_repository_sync_async_timeout }}" + poll: 0 + register: __collection_repository_sync_job_async + changed_when: not __collection_repository_sync_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Sync Repository | Wait for finish the repository sync" + ansible.builtin.async_status: + jid: "{{ __collection_repository_sync_job_async_result_item.ansible_job_id }}" + register: __collection_repository_sync_job_async_result + until: __collection_repository_sync_job_async_result.finished + retries: "{{ ah_configuration_collection_repository_sync_async_retries }}" + delay: "{{ ah_configuration_collection_repository_sync_async_delay }}" + loop: "{{ __collection_repository_sync_job_async.results }}" + loop_control: + loop_var: __collection_repository_sync_job_async_result_item + when: __collection_repository_sync_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_collection_repository_sync_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/test.yml new file mode 100644 index 00000000..99d0ada6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add collection repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../collection_repository +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/vars/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/vars/repositories.yml new file mode 100644 index 00000000..173b8957 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/collection_repository_sync/tests/vars/repositories.yml @@ -0,0 +1,11 @@ +--- +ah_collection_repositories: + - name: "foobar" + description: "description of foobar repository" + pulp_labels: + pipeline: "approved" + distribution: + name: "foobar" + state: present + remote: community +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/README.md new file mode 100644 index 00000000..bf15469c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/README.md @@ -0,0 +1,109 @@ +# galaxy.galaxy.dispatch + +## Description + +An Ansible Role to run all roles for which variables are found on Ansible Automation Hub. + +## Before Using + +This collection is most useful for experienced AAP2 users who want to quickly configure a Automation Hub instance. + +If you are new to AAP2 and/or to the galaxy.galaxy collection, it is highly recommended that you ensure that you're familiar with both AAP2 and the collection, before using this role. + +## Variables + +Each role that is called also has its own variables. For information on those, please see the README documents for those roles. + +The key variable in this role is `ah_configuration_dispatcher_roles`. The default value is shown below: + +```yaml +ah_configuration_dispatcher_roles: + - {role: ansible_config, var: [ansible_config_list, automation_hub_list], tags: config} + - {role: collection, var: [ah_collections], tags: collections} + - {role: ee_image, var: [ah_ee_images], tags: images} + - {role: ee_registry, var: [ah_ee_registries], tags: registries} + - {role: ee_registry_index, var: [ah_ee_registries], tags: indices} + - {role: ee_registry_sync, var: [ah_ee_registries], tags: regsync} + - {role: ee_repository, var: [ah_ee_repositories], tags: repos} + - {role: ee_repository_sync, var: [ah_ee_repository_sync], tags: reposync} + - {role: namespace, var: [ah_namespaces], tags: namespaces} + - {role: group, var: [ah_groups], tags: groups} + - {role: publish, var: [ah_collections], tags: publish} + - {role: user, var: [ah_users], tags: users} +``` + +Each item within the variable has three elements: + +- `role` which is the name of the role within galaxy.galaxy +- `var` which is the variable or variables in that role. We use this to prevent the role being called if the variable is not set. +- `tags` the tags which are applied to the role so it is possible to apply tags to a playbook using the dispatcher with these tags. + +If the functionality of Automation Hub is extended in the future, and more variables are able to trigger a role, the new variable should be added into the `var` list for the role above. + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Authentication + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|yes|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| + +### Secure Logging Variables + +The role defaults to False as normally most projects task does not include sensitive information. +Each role the dispatch role calls has a separate variable which can be turned on to enforce secure logging for that role but defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of configuration roles with a single variable, or for the user to selectively use it. If neither value is set then each role has a default value of true or false as determined by best practices for each role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_registry_secure_logging`|`False`|no|Whether or not to include the sensitive Registry role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|""|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. Each individual role has its own variable which can allow the individual setting of values. See each role for more the variable names. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_retries`|30|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Playbook to configure Ansible Automation Hub post installation + hosts: localhost + connection: local + # Define following vars here, or in ah_configs/controller_auth.yml + # ah_hostname: ansible-ah-web-svc-test-project.example.com + # ah_username: admin + # ah_password: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./yaml + ignore_files: [ah_config.yml.template] + extensions: ["yml"] + roles: + - galaxy.galaxy.dispatch +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Alan Wong](https://github.com/alawong) +[Tom Page](https://github.com/Tompage1994) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/defaults/main.yml new file mode 100644 index 00000000..60162c8d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/defaults/main.yml @@ -0,0 +1,17 @@ +--- +ah_configuration_dispatcher_roles: + - {role: group, var: ah_groups, tags: groups} + - {role: user, var: ah_users, tags: users} + - {role: namespace, var: ah_namespaces, tags: namespaces} + - {role: collection, var: ah_collections, tags: collections} + - {role: ee_registry, var: ah_ee_registries, tags: registries} + - {role: ee_repository, var: ah_ee_repositories, tags: repos} + - {role: ee_repository_sync, var: ah_ee_repository_sync, tags: reposync} + - {role: ee_image, var: ah_ee_images, tags: images} + - {role: ee_registry_index, var: ah_ee_registries, tags: indices} + - {role: ee_registry_sync, var: ah_ee_registries, tags: regsync} + - {role: collection_remote, var: ah_collection_remotes, tags: collectionremote} + - {role: collection_repository, var: ah_collection_repositories, tags: collectionsrep} + - {role: collection_repository_sync, var: ah_collection_repositories, tags: collectionsrepsync} + - {role: group_roles, var: ah_group_roles, tags: group_roles} +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/argument_specs.yml new file mode 100644 index 00000000..2a5276ec --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/argument_specs.yml @@ -0,0 +1,81 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to run all roles for which variables are found on Ansible Automation Hub. + options: + ah_configuration_dispatcher_roles: + required: false + description: List of roles, variables and tags to run through + type: list + elements: dict + options: + role: + required: true + description: Name of role from this collection to call + type: str + var: + required: true + description: Name of variable to be passed to the role + type: str + tags: + required: false + description: Tags to be applied to the role so tagging can be used to run only part of a playbook + default: + - {role: group, var: ah_groups, tags: groups} + - {role: user, var: ah_users, tags: users} + - {role: namespace, var: ah_namespaces, tags: namespaces} + - {role: collection, var: ah_collections, tags: collections} + - {role: ee_repository, var: ah_ee_repositories, tags: repos} + - {role: ee_repository_sync, var: ah_ee_repository_sync, tags: reposync} + - {role: ee_image, var: ah_ee_images, tags: images} + - {role: ee_registry, var: ah_ee_registries, tags: registries} + - {role: ee_registry_index, var: ah_ee_registries, tags: indices} + - {role: ee_registry_sync, var: ah_ee_registries, tags: regsync} + + # Async variables + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + + # No_log variables + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/main.yml new file mode 100644 index 00000000..b6197831 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/meta/main.yml @@ -0,0 +1,45 @@ +--- +galaxy_info: + role_name: "dispatch" + author: "Alan Wong and Tom Page" + description: "An Ansible Role which launches all of the roles for which variables are found within the ah_configuration collection." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "ah" + - "aap" + - "awx" + - "configuration" + - "dispatch" + +collections: + - ansible.controller + - awx.awx + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tasks/main.yml new file mode 100644 index 00000000..f612ec82 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tasks/main.yml @@ -0,0 +1,13 @@ +--- + +- name: "Run galaxy.galaxy.{{ __role.role }}" + ansible.builtin.include_role: + name: "{{ __role.role }}" + apply: + tags: "{{ __role.tags }}" + when: hostvars[inventory_hostname][__role.var] is defined + tags: always + loop: "{{ ah_configuration_dispatcher_roles }}" + loop_control: + loop_var: __role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/images.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/images.yml new file mode 100644 index 00000000..151a031b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/images.yml @@ -0,0 +1,10 @@ +--- +ah_ee_images: + - name: ansible-automation-platform-22-early-access/ee-supported-rhel8:2.0.0-15 + state: present + append: false + tags: + - v2 + - "2.0" + - prod1 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/registries.yml new file mode 100644 index 00000000..1ca54dd4 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/registries.yml @@ -0,0 +1,7 @@ +--- +ah_ee_registries: + - name: registry.redhat + url: registry.redhat.io + username: myuser + password: mypassword +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/repositories.yml new file mode 100644 index 00000000..3372ad71 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/configs/repositories.yml @@ -0,0 +1,6 @@ +--- +ah_ee_repositories: + - name: abc123 + description: string + readme: "# My EE repository" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/test.yml new file mode 100644 index 00000000..ef740846 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/dispatch/tests/test.yml @@ -0,0 +1,16 @@ +--- +- name: Run dispatch job to Automation Hub + hosts: localhost + connection: local + gather_facts: false + + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./configs + extensions: ["yml"] + tags: always + + roles: + - ../../dispatch +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/README.md new file mode 100644 index 00000000..ac6ee411 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/README.md @@ -0,0 +1,106 @@ +# galaxy.galaxy.ee_image + +## Description + +An Ansible Role to create execution environment images in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_images`|`see below`|yes|Data structure describing your execution environment images, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_image task does not include sensitive information. +ah_configuration_ee_image_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_image_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_image_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_image_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_image_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### EE Image Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Execution environment image name. Must be lower case containing only alphanumeric characters and underscores.| +|`append`|`true`|no|bool|Whether to append or replace the tags specified to the image.| +|`tags`|""|no|str|List of the image tags to update.| +|`state`|`present`|no|str|Desired state of the ee_image. (Possible values of `present` or `absent`)| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_images: + - name: ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0-15 + state: present + append: false + tags: + - v2 + - "2.0" + - prod1 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add ee_image to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_image +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/defaults/main.yml new file mode 100644 index 00000000..27eafcbd --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/defaults/main.yml @@ -0,0 +1,27 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub execution environment image +ah_ee_images: [] +# possible fields: +# - name: name: ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0-15 +# state: present +# append: true +# tags: +# - v2 +# - "2.0" +# - prod1 + +ah_configuration_ee_image_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_image_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_image_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_image_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/argument_specs.yml new file mode 100644 index 00000000..7c9480b7 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create execution environment images in Automation Hub. + options: + ah_ee_images: + default: [] + required: false + description: Data structure describing your ee images to manage. + type: list + elements: dict + + # Async variables + ah_configuration_ee_image_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_image_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_image_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/main.yml new file mode 100644 index 00000000..c945674e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "ee_image" + author: "Tom Page" + description: "An Ansible Role to manage an execution environment image in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "image" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tasks/main.yml new file mode 100644 index 00000000..4038607f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +# Create AH EE Image +- name: Add Automation Hub EE Image + ah_ee_image: + name: "{{ __ee_image_item.name }}" + # new_name: "{{ __ee_image_item.new_name | default(omit) }}" <-- Needs adding once new_name option added to module + append: "{{ __ee_image_item.append | default(omit) }}" + tags: "{{ __ee_image_item.tags | default(omit) }}" + state: "{{ __ee_image_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_images }}" + loop_control: + loop_var: "__ee_image_item" + no_log: "{{ ah_configuration_ee_image_secure_logging }}" + async: "{{ ah_configuration_ee_image_async_timeout }}" + poll: 0 + register: __ee_images_job_async + changed_when: not __ee_images_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create EE Image | Wait for finish the ee_image creation" + ansible.builtin.async_status: + jid: "{{ __ee_images_job_async_result_item.ansible_job_id }}" + register: __ee_images_job_async_result + until: __ee_images_job_async_result.finished + retries: "{{ ah_configuration_ee_image_async_retries }}" + delay: "{{ ah_configuration_ee_image_async_delay }}" + loop: "{{ __ee_images_job_async.results }}" + loop_control: + loop_var: __ee_images_job_async_result_item + when: __ee_images_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_image_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/test.yml new file mode 100644 index 00000000..13909ba2 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add ee_image to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_image +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/vars/ee_images.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/vars/ee_images.yml new file mode 100644 index 00000000..c70a9a87 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_image/tests/vars/ee_images.yml @@ -0,0 +1,10 @@ +--- +ah_ee_images: + - name: ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0-15 + state: present + append: false + tags: + - v2 + - "2.0" + - prod1 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/README.md new file mode 100644 index 00000000..7d8fe15d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/README.md @@ -0,0 +1,105 @@ +# galaxy.galaxy.ee_namespace + +## Description + +An Ansible Role to create Namespaces in Automation Hub. +This was depreciated with AAP 2.4 and Galaxy NG 4.6.3+, and removed from the API so it is no longer functional. Please use the ee_repository to achieve the same functionality. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_namespaces`|`see below`|yes|Data structure describing your ee_namespaces, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_namespace task does not include sensitive information. +ah_configuration_ee_namespace_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_namespace_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_namespace_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_namespace_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_namespace_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### EE Namespace Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Namespace name. Must be lower case containing only alphanumeric characters and underscores.| +|`new_name`|""|yes|str|Setting this option will change the existing name (looked up via the name field.)| +|`append`|`true`|no|bool|Whether to append or replace the groups specified for the ee_namespace.| +|`groups`|[]|yes|list|A list of names for groups that control the Namespace.| +|`state`|`present`|no|str|Desired state of the ee_namespace.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_namespaces: + - name: abc15 + append: true + groups: + - system:partner-engineers +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add ee_namespace to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_namespace +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/defaults/main.yml new file mode 100644 index 00000000..f0bd3edb --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/defaults/main.yml @@ -0,0 +1,25 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee namespace +ah_ee_namespaces: [] +# possible fields: +# - name: "namespace_name" # mandatory +# append: true +# groups: +# - "group1" +# - "group2" + +ah_configuration_ee_namespace_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_namespace_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_namespace_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_namespace_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/argument_specs.yml new file mode 100644 index 00000000..6c842a7c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create execution environment namespaces in Automation Hub. + options: + ah_ee_namespaces: + default: [] + required: false + description: Data structure describing your ee namespaces to manage. + type: list + elements: dict + + # Async variables + ah_configuration_ee_namespace_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_namespace_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_namespace_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/main.yml new file mode 100644 index 00000000..ffbead2c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "ee_namespace" + author: "Tom Page" + description: "An Ansible Role to create execution environment namespaces in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "namespace" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tasks/main.yml new file mode 100644 index 00000000..b88945da --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +# Create AH EE Namespace +- name: Add Automation Hub Execution Environment Namespace + ah_ee_namespace: + name: "{{ __ee_namespace_item.name }}" + # new_name: "{{ __ee_namespace_item.new_name | default(omit) }}" <-- Needs adding once new_name option added to module + append: "{{ __ee_namespace_item.append | default(omit) }}" + groups: "{{ __ee_namespace_item.groups | default([]) }}" + state: "{{ __ee_namespace_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_namespaces }}" + loop_control: + loop_var: "__ee_namespace_item" + no_log: "{{ ah_configuration_ee_namespace_secure_logging }}" + async: "{{ ah_configuration_ee_namespace_async_timeout }}" + poll: 0 + register: __ee_namespaces_job_async + changed_when: not __ee_namespaces_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create EE Namespace | Wait for finish the ee_namespace creation" + ansible.builtin.async_status: + jid: "{{ __ee_namespaces_job_async_result_item.ansible_job_id }}" + register: __ee_namespaces_job_async_result + until: __ee_namespaces_job_async_result.finished + retries: "{{ ah_configuration_ee_namespace_async_retries }}" + delay: "{{ ah_configuration_ee_namespace_async_delay }}" + loop: "{{ __ee_namespaces_job_async.results }}" + loop_control: + loop_var: __ee_namespaces_job_async_result_item + when: __ee_namespaces_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_namespace_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/test.yml new file mode 100644 index 00000000..5f512fee --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add ee namespace to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_namespace +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/vars/ee_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/vars/ee_namespaces.yml new file mode 100644 index 00000000..049dd9f6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_namespace/tests/vars/ee_namespaces.yml @@ -0,0 +1,8 @@ +--- +ah_ee_namespaces: + - name: abc15 + append: true + groups: + - administrators + - operators +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/README.md new file mode 100644 index 00000000..01bea0d1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/README.md @@ -0,0 +1,109 @@ +# galaxy.galaxy.ee_registry + +## Description + +An Ansible Role to create EE Registries in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`proxy_url`|""|no|str|The URL for the proxy. Defaults to global `proxy_url` variable.| +|`proxy_username`|""|no|str|The username for the proxy authentication. Defaults to global `proxy_username` variable.| +|`proxy_password`|""|no|str|The password for the proxy authentication. Defaults to global `proxy_password` variable.| +|`ah_ee_registries`|`see below`|yes|Data structure describing your ee_registries, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_registry task does not include sensitive information. +ah_configuration_ee_registry_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_registry_secure_logging`|`False`|no|Whether or not to include the sensitive Registry role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_registry_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_registry_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_registry_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### EE Registry Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Registry name. Must be lower case containing only alphanumeric characters and underscores.| +|`new_name`|""|no|str|Setting this option will change the existing name (looked up via the name field.| +|`url`|""|yes|str|The URL for the registry| +|`username`|""|no|str|The username for authentication to the registry| +|`password`|""|no|str|The password for authentication to the registry| +|`tls_validation`|""|no|str|Whether to use TLS when connecting to the registry| +|`download_concurrency`|""|no|str|Number of concurrent collections to download| +|`rate_limit`|""|no|str|Limits total download rate in requests per second.| +|`state`|`present`|no|str|Desired state of the ee_registry.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_registries: + - name: myreg + url: https://quay.io/my/registry +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add ee_registry to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_registry +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/defaults/main.yml new file mode 100644 index 00000000..82e97ded --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/defaults/main.yml @@ -0,0 +1,31 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee repository +ah_ee_registries: [] +# possible fields: +# - name: "registry" # mandatory +# url: registry.redhat.io # mandatory +# username: myuser +# password: mypass +# tls_validation: false +# proxy_url: myproxy.example.com:8080 +# proxy_username: proxyadmin +# proxy_password: proxyadmin +# download_concurrency: 100 +# rate_limit: 5 +# state: present + +ah_configuration_ee_registry_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_registry_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_registry_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_registry_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/argument_specs.yml new file mode 100644 index 00000000..d964d58d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/argument_specs.yml @@ -0,0 +1,84 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create execution environment registry in Automation Hub. + options: + ah_ee_registries: + default: [] + required: false + description: Data structure describing your ee registries to manage. + type: list + elements: dict + proxy_url: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + proxy_username: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + proxy_password: + required: false + type: str + description: Information regarding the proxy that AH will use to communicate to the Red Hat repositories. Can be left empty if no proxy used. + + # Async variables + ah_configuration_ee_registry_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_registry_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_registry_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/main.yml new file mode 100644 index 00000000..d66b3fea --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "ee_registry" + author: "Tom Page" + description: "An Ansible Role to create ee_registry in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "registry" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tasks/main.yml new file mode 100644 index 00000000..e32e3d93 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tasks/main.yml @@ -0,0 +1,48 @@ +--- + +# Create AH EE registry +- name: Add Automation Hub EE Registry + ah_ee_registry: + name: "{{ __ee_registry_item.name }}" + url: "{{ __ee_registry_item.url }}" + username: "{{ __ee_registry_item.username | default(omit) }}" + password: "{{ __ee_registry_item.password | default(omit) }}" + tls_validation: "{{ __ee_registry_item.tls_validation | default(omit) }}" + download_concurrency: "{{ __ee_registry_item.download_concurrency | default(omit) }}" + rate_limit: "{{ __ee_registry_item.rate_limit | default(omit) }}" + state: "{{ __ee_registry_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + proxy_url: "{{ __ee_registry_item.proxy_url | default(proxy_url | default(omit)) }}" + proxy_username: "{{ __ee_registry_item.proxy_username | default(proxy_username | default(omit)) }}" + proxy_password: "{{ __ee_registry_item.proxy_password | default(proxy_password | default(omit)) }}" + loop: "{{ ah_ee_registries }}" + loop_control: + loop_var: "__ee_registry_item" + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + async: "{{ ah_configuration_ee_registry_async_timeout }}" + poll: 0 + register: __ee_registries_job_async + changed_when: not __ee_registries_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create EE Registry | Wait for finish the ee_registry creation" + ansible.builtin.async_status: + jid: "{{ __ee_registries_job_async_result_item.ansible_job_id }}" + register: __ee_registries_job_async_result + until: __ee_registries_job_async_result.finished + retries: "{{ ah_configuration_ee_registry_async_retries }}" + delay: "{{ ah_configuration_ee_registry_async_delay }}" + loop: "{{ __ee_registries_job_async.results }}" + loop_control: + loop_var: __ee_registries_job_async_result_item + when: __ee_registries_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/test.yml new file mode 100644 index 00000000..9bb24ee5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add ee_registry to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_registry +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/vars/ee_registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/vars/ee_registries.yml new file mode 100644 index 00000000..1ca54dd4 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry/tests/vars/ee_registries.yml @@ -0,0 +1,7 @@ +--- +ah_ee_registries: + - name: registry.redhat + url: registry.redhat.io + username: myuser + password: mypassword +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/README.md new file mode 100644 index 00000000..34f267f2 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/README.md @@ -0,0 +1,105 @@ +# galaxy.galaxy.ee_registry_index + +## Description + +An Ansible Role to index EE Registries in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_registries`|`see below`|yes|Data structure describing your ee_registries, described below. (Note this is the same as for the `ee_registries` role and the variable can be combined). Note that this role will only do anything if the `index` suboption of this variable is set to true.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_registry task does not include sensitive information. +ah_configuration_ee_registry_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_registry_secure_logging`|`False`|no|Whether or not to include the sensitive Registry role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_registry_index_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_registry_index_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_registry_index_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### EE Registry Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Registry name. Must be lower case containing only alphanumeric characters and underscores.| +|`index`|false|no|bool|Whether to index the ee_registry. Bu default it will not index unless this is set to true.| +|`wait`|true|no|str|Whether to wait for the indexing to complete| +|`interval`|`ah_configuration_ee_registry_index_async_delay`|no|str|The interval which the indexing task will be checked for completion| +|`timeout`|""|no|str|How long to wait for the indexing task to complete| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_registries: + - name: myreg + url: https://quay.io/my/registry + interval: 10 + wait: true + timeout: 300 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Index ee_registry in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ee_registry_index +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/defaults/main.yml new file mode 100644 index 00000000..4c68a045 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/defaults/main.yml @@ -0,0 +1,24 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee repository +ah_ee_registries: [] +# possible fields: +# - name: "registry_name" # mandatory +# interval: 1 +# wait: true +# timeout: + +ah_configuration_ee_registry_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_registry_index_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_registry_index_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_registry_index_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/argument_specs.yml new file mode 100644 index 00000000..07e71dba --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to index execution environment registries in Automation Hub. + options: + ah_ee_registries: + default: [] + required: false + description: Data structure describing your ee registries to manage. If the index option is set then the registry will be indexed + type: list + elements: dict + + # Async variables + ah_configuration_ee_registry_index_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_registry_index_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_registry_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/main.yml new file mode 100644 index 00000000..c5766bf4 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/meta/main.yml @@ -0,0 +1,43 @@ +--- +galaxy_info: + role_name: "ee_registry_index" + author: "Tom Page" + description: "An Ansible Role to index ee_registry in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "registry" + - "index" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tasks/main.yml new file mode 100644 index 00000000..4c688b1b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +# Create AH EE registry +- name: Index Automation Hub EE Registry + ah_ee_registry_index: + name: "{{ __ee_registry_item.name }}" + wait: "{{ __ee_registry_item.wait | default(omit) }}" + interval: "{{ __ee_registry_item.interval | default(ah_configuration_ee_registry_index_async_delay) }}" + timeout: "{{ __ee_registry_item.timeout | default(omit) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_registries }}" + loop_control: + loop_var: "__ee_registry_item" + when: __ee_registry_item.index | default(false) + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + async: "{{ ah_configuration_ee_registry_index_async_timeout }}" + poll: 0 + register: __ee_registry_indexes_job_async + changed_when: not __ee_registry_indexes_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Index EE Registry | Wait for finish the ee_registry_index creation" + ansible.builtin.async_status: + jid: "{{ __ee_registry_indexes_job_async_result_item.ansible_job_id }}" + register: __ee_registry_indexes_job_async_result + until: __ee_registry_indexes_job_async_result.finished + retries: "{{ ah_configuration_ee_registry_index_async_retries }}" + delay: "{{ ah_configuration_ee_registry_index_async_delay }}" + loop: "{{ __ee_registry_indexes_job_async.results }}" + loop_control: + loop_var: __ee_registry_indexes_job_async_result_item + when: __ee_registry_indexes_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/test.yml new file mode 100644 index 00000000..e6135eb3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Index ee_registry in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_registry_index +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/vars/ee_registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/vars/ee_registries.yml new file mode 100644 index 00000000..1487ca47 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_index/tests/vars/ee_registries.yml @@ -0,0 +1,9 @@ +--- +ah_ee_registries: + - name: registry.redhat + url: registry.redhat.io + username: myuser + password: mypassword + wait: true + interval: 10 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/README.md new file mode 100644 index 00000000..28048498 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/README.md @@ -0,0 +1,105 @@ +# galaxy.galaxy.ee_registry_sync + +## Description + +An Ansible Role to sync EE Registries in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_registries`|`see below`|yes|Data structure describing your ee_registries, described below. (Note this is the same as for the `ee_registries` role and the variable can be combined. Note that this role will only do anything if the `sync` suboption of this variable is set to true.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_registry task does not include sensitive information. +ah_configuration_ee_registry_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_registry_secure_logging`|`False`|no|Whether or not to include the sensitive Registry role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_repository_sync_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_registry_sync_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_registry_sync_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Registry Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Registry name. Must be lower case containing only alphanumeric characters and underscores.| +|`sync`|false|no|bool|Whether to sync the ee_registry. By default it will not sync unless this is set to true.| +|`wait`|true|no|str|Whether to wait for the sync to complete| +|`interval`|`ah_configuration_ee_registry_sync_async_delay`|no|str|The interval which the sync task will be checked for completion| +|`timeout`|""|no|str|How long to wait for the sync task to complete| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_registries: + - name: myreg + url: https://quay.io/my/registry + interval: 10 + wait: true + timeout: 300 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Sync ee_registry in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ee_registry_sync +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/defaults/main.yml new file mode 100644 index 00000000..1f660190 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/defaults/main.yml @@ -0,0 +1,24 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee repository +ah_ee_registries: [] +# possible fields: +# - name: "registry_name" # mandatory +# interval: 1 +# wait: true +# timeout: + +ah_configuration_ee_registry_sync_async_timeout: "{{ ah_configuration_async_timeout }}" +ah_configuration_ee_registry_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_registry_sync_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_registry_sync_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/argument_specs.yml new file mode 100644 index 00000000..0aefcdc5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to sync execution environment registries in Automation Hub. + options: + ah_ee_registries: + default: [] + required: false + description: Data structure describing your ee registries to manage. If the sync option is set then the registry will be synced. + type: list + elements: dict + + # Async variables + ah_configuration_ee_registry_sync_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_registry_sync_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_registry_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/main.yml new file mode 100644 index 00000000..9253dc1a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/meta/main.yml @@ -0,0 +1,43 @@ +--- +galaxy_info: + role_name: "ee_registry_sync" + author: "Tom Page" + description: "An Ansible Role to sync ee_registry in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "registry" + - "sync" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tasks/main.yml new file mode 100644 index 00000000..fb36f695 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +# Create AH EE registry +- name: Sync Automation Hub EE Registry + ah_ee_registry_sync: + name: "{{ __ee_registry_item.name }}" + wait: "{{ __ee_registry_item.wait | default(omit) }}" + interval: "{{ __ee_registry_item.interval | default(ah_configuration_ee_registry_sync_async_delay) }}" + timeout: "{{ __ee_registry_item.timeout | default(omit) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_registries }}" + loop_control: + loop_var: "__ee_registry_item" + when: __ee_registry_item.sync | default(false) + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + async: "{{ ah_configuration_ee_registry_sync_async_timeout }}" + poll: 0 + register: __ee_registry_syncs_job_async + changed_when: not __ee_registry_syncs_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "EE Registry Sync | Wait for finish the ee_registry_sync to complete" + ansible.builtin.async_status: + jid: "{{ __ee_registry_syncs_job_async_result_item.ansible_job_id }}" + register: __ee_registry_syncs_job_async_result + until: __ee_registry_syncs_job_async_result.finished + retries: "{{ ah_configuration_ee_registry_sync_async_retries }}" + delay: "{{ ah_configuration_ee_registry_sync_async_delay }}" + loop: "{{ __ee_registry_syncs_job_async.results }}" + loop_control: + loop_var: __ee_registry_syncs_job_async_result_item + when: __ee_registry_syncs_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_registry_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/test.yml new file mode 100644 index 00000000..5fb6a129 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Sync ee_registry in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_registry_sync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/vars/ee_registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/vars/ee_registries.yml new file mode 100644 index 00000000..1487ca47 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_registry_sync/tests/vars/ee_registries.yml @@ -0,0 +1,9 @@ +--- +ah_ee_registries: + - name: registry.redhat + url: registry.redhat.io + username: myuser + password: mypassword + wait: true + interval: 10 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/README.md new file mode 100644 index 00000000..788add48 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/README.md @@ -0,0 +1,107 @@ +# galaxy.galaxy.ee_repository + +## Description + +An Ansible Role to create Repositories in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_repositories`|`see below`|yes|Data structure describing your ee_repositories, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_repository task does not include sensitive information. +ah_configuration_ee_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_repository_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_repository_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_repository_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_repository_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Repository Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Repository name. Must be lower case containing only alphanumeric characters and underscores.| +|`description`|""|yes|str|Description to use for the Repository.| +|`readme`|""|no|str|The readme for the ee repository. (mutex with readme_file)| +|`readme_file`|""|no|str|The file location for the readme for the ee repository. (mutex with readme)| +|`state`|`present`|no|str|Desired state of the ee_repository.| +|`registry`|""|no|str|The remote registry that the repository belongs in.| +|`upstream_name`|""|no|str|The name of the image upstream.| +|`include_tags`|""|no|str|The tags to pull in.| +|`exclude_tags`|""|no|str|The tags to avoid pulling in.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_repositories: + - name: abc15 + description: string + readme: "# My ee repo" +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add ee_repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_repository +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/defaults/main.yml new file mode 100644 index 00000000..777760ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/defaults/main.yml @@ -0,0 +1,24 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee repository +ah_ee_repositories: [] +# possible fields: +# - name: "namespace_name" # mandatory +# description: "A description" +# readme: "The contents of a readme will go here" +# readme_file: "readme.md" + +ah_configuration_ee_repository_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_repository_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_repository_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_repository_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/argument_specs.yml new file mode 100644 index 00000000..422ca395 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create execution environment repositories in Automation Hub. + options: + ah_ee_repositories: + default: [] + required: false + description: Data structure describing your ee repositories to manage. + type: list + elements: dict + + # Async variables + ah_configuration_ee_repository_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_repository_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/main.yml new file mode 100644 index 00000000..3d3c2722 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "ee_repository" + author: "Tom Page" + description: "An Ansible Role to create ee_repository in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "repository" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tasks/main.yml new file mode 100644 index 00000000..fd852d83 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tasks/main.yml @@ -0,0 +1,46 @@ +--- + +# Create AH EE repository +- name: Add Automation Hub EE repository + ah_ee_repository: + name: "{{ __ee_repository_item.name }}" + description: "{{ __ee_repository_item.description | default(omit) }}" + readme: "{{ __ee_repository_item.readme | default(omit) }}" + readme_file: "{{ __ee_repository_item.readme_file | default(omit) }}" + registry: "{{ __ee_repository_item.registry | default(omit) }}" + upstream_name: "{{ __ee_repository_item.upstream_name | default(omit) }}" + include_tags: "{{ __ee_repository_item.include_tags | default(omit) }}" + exclude_tags: "{{ __ee_repository_item.exclude_tags | default(omit) }}" + state: "{{ __ee_repository_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_repositories }}" + loop_control: + loop_var: "__ee_repository_item" + no_log: "{{ ah_configuration_ee_repository_secure_logging }}" + async: "{{ ah_configuration_ee_repository_async_timeout }}" + poll: 0 + register: __ee_repositories_job_async + changed_when: not __ee_repositories_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create EE Repository | Wait for finish the ee_repository creation" + ansible.builtin.async_status: + jid: "{{ __ee_repositories_job_async_result_item.ansible_job_id }}" + register: __ee_repositories_job_async_result + until: __ee_repositories_job_async_result.finished + retries: "{{ ah_configuration_ee_repository_async_retries }}" + delay: "{{ ah_configuration_ee_repository_async_delay }}" + loop: "{{ __ee_repositories_job_async.results }}" + loop_control: + loop_var: __ee_repositories_job_async_result_item + when: __ee_repositories_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_repository_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/test.yml new file mode 100644 index 00000000..206aedae --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add ee_repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_repository +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/vars/ee_repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/vars/ee_repositories.yml new file mode 100644 index 00000000..eeb34317 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository/tests/vars/ee_repositories.yml @@ -0,0 +1,6 @@ +--- +ah_ee_repositories: + - name: abc15 + description: string + readme: "# My EE repository" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/README.md new file mode 100644 index 00000000..4a551dd7 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/README.md @@ -0,0 +1,105 @@ +# galaxy.galaxy.ee_repository_sync + +## Description + +An Ansible Role to sync EE Repositories in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_ee_repositories`|`see below`|yes|Data structure describing your ee_repositories, described below. (Note this is the same as for the `ee_repository` role and the variable can be combined. Note that this role will only do anything if the `sync` suboption of this variable is set to true.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add ee_repository task does not include sensitive information. +ah_configuration_ee_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_ee_repository_secure_logging`|`False`|no|Whether or not to include the sensitive Repository role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_ee_repository_sync_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_ee_repository_sync_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_ee_repository_sync_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Repository Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Repository name. Must be lower case containing only alphanumeric characters and underscores.| +|`sync`|false|no|bool|Whether to sync the ee_registry. By default it will not sync unless this is set to true.| +|`wait`|true|no|str|Whether to wait for the sync to complete| +|`interval`|`ah_configuration_ee_repository_sync_async_delay`|no|str|The interval which the sync task will be checked for completion| +|`timeout`|""|no|str|How long to wait for the sync task to complete| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_ee_repositories: + - name: abc15 + description: string + readme: "# My EE repository" + wait: true + interval: 10 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Sync ee_repository in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ee_repository_sync +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/defaults/main.yml new file mode 100644 index 00000000..0ba48b74 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/defaults/main.yml @@ -0,0 +1,24 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub ee repository +ah_ee_repositories: [] +# possible fields: +# - name: "namespace_name" # mandatory +# interval: 1 +# wait: true +# timeout: + +ah_configuration_ee_repository_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_ee_repository_sync_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_ee_repository_sync_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_ee_repository_sync_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/argument_specs.yml new file mode 100644 index 00000000..d3eaead9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to sync execution environment repositories in Automation Hub. + options: + ah_ee_repositories: + default: [] + required: false + description: Data structure describing your ee repositories to manage. If the sync option is set then the repository will be synced. + type: list + elements: dict + + # Async variables + ah_configuration_ee_repository_sync_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_ee_repository_sync_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_ee_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/main.yml new file mode 100644 index 00000000..1b622ddd --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/meta/main.yml @@ -0,0 +1,43 @@ +--- +galaxy_info: + role_name: "ee_repository_sync" + author: "Tom Page" + description: "An Ansible Role to sync ee_repository in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "ee" + - "repository" + - "sync" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tasks/main.yml new file mode 100644 index 00000000..78bc6000 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +# Create AH EE repository +- name: Sync Automation Hub EE Repository + ah_ee_repository_sync: + name: "{{ __ee_repository_item.name }}" + wait: "{{ __ee_repository_item.wait | default(omit) }}" + interval: "{{ __ee_repository_item.interval | default(ah_configuration_ee_repository_sync_async_delay) }}" + timeout: "{{ __ee_repository_item.timeout | default(omit) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_ee_repositories }}" + loop_control: + loop_var: "__ee_repository_item" + when: __ee_repository_item.sync | default(false) + no_log: "{{ ah_configuration_ee_repository_secure_logging }}" + async: "{{ ah_configuration_ee_repository_sync_async_timeout }}" + poll: 0 + register: __ee_repository_syncs_job_async + changed_when: not __ee_repository_syncs_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "EE Repository Sync | Wait for finish the ee_repository_sync to finish" + ansible.builtin.async_status: + jid: "{{ __ee_repository_syncs_job_async_result_item.ansible_job_id }}" + register: __ee_repository_syncs_job_async_result + until: __ee_repository_syncs_job_async_result.finished + retries: "{{ ah_configuration_ee_repository_sync_async_retries }}" + delay: "{{ ah_configuration_ee_repository_sync_async_delay }}" + loop: "{{ __ee_repository_syncs_job_async.results }}" + loop_control: + loop_var: __ee_repository_syncs_job_async_result_item + when: __ee_repository_syncs_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_ee_repository_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/test.yml new file mode 100644 index 00000000..1ae33b88 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Sync ee_repository in Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../ee_repository_sync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/vars/ee_repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/vars/ee_repositories.yml new file mode 100644 index 00000000..7e3d4d3b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/ee_repository_sync/tests/vars/ee_repositories.yml @@ -0,0 +1,8 @@ +--- +ah_ee_repositories: + - name: abc15 + description: string + readme: "# My EE repository" + wait: true + interval: 10 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/README.md new file mode 100644 index 00000000..9c5aff78 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/README.md @@ -0,0 +1,113 @@ +# galaxy.galaxy.group + +## Description + +An Ansible Role to create groups in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_groups`|`see below`|yes|Data structure describing your groups, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add group task does not include sensitive information. +ah_configuration_group_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_group_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_group_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_group_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Group Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Group Name. Must be lower case containing only alphanumeric characters and underscores.| +|`perms`|""|yes|str|The list of permissions to add to or remove from the given group. See below for options.| +|`state`|`present`|no|str|Desired state of the group.| + +#### perms + +The module accepts the following roles: + +- For user management, `add_user`, `change_user`, `delete_user`, and `view_user`. +- For group management, `add_group`, `change_group`, `delete_group`, and `view_group`. +- For collection namespace management, `add_namespace`, `change_namespace`, `upload_to_namespace`, and `delete_namespace`. +- For collection content management, `modify_ansible_repo_content`, and `delete_collection`. +- For remote repository configuration, `change_collectionremote` and `view_collectionremote`. +- For container image management, only with private automation hub v4.3.2 + or later, `change_containernamespace_perms`, `change_container`, + `change_image_tag`, `create_container`, `push_container`, and `delete_containerrepository`. +- For task management, `change_task`, `view_task`, and `delete_task`. +- You can also grant or revoke all permissions with `*` or `all`. + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_groups: + - name: group1 + state: present +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add group to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../group +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/defaults/main.yml new file mode 100644 index 00000000..b67bac59 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/defaults/main.yml @@ -0,0 +1,22 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub groups +ah_groups: [] +# possible fields: +# - name +# - perms +# - state +ah_configuration_group_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_group_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_group_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_group_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/argument_specs.yml new file mode 100644 index 00000000..674e39ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create groups in Automation Hub. + options: + ah_groups: + default: [] + required: false + description: Data structure describing your groups to manage. + type: list + elements: dict + + # Async variables + ah_configuration_group_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_group_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_group_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/main.yml new file mode 100644 index 00000000..d2edeb4a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "group" + author: "Tom Page" + description: "An Ansible Role to manage groups in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "group" + - "groups" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tasks/main.yml new file mode 100644 index 00000000..00b64fa3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tasks/main.yml @@ -0,0 +1,77 @@ +--- + +# Create AH Group +- name: Add Automation Hub group + ah_group: + name: "{{ __group.name | default(omit) }}" + # new_name: "{{ __group.new_name | default(omit) }}" <-- Needs adding once new_name option added to module + state: "{{ __group.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_groups }}" + loop_control: + loop_var: "__group" + no_log: "{{ ah_configuration_group_secure_logging }}" + async: "{{ ah_configuration_group_async_timeout }}" + poll: 0 + register: __groups_job_async + changed_when: not __groups_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Group | Wait for finish the group creation" + ansible.builtin.async_status: + jid: "{{ __groups_job_async_result_item.ansible_job_id }}" + register: __groups_job_async_result + until: __groups_job_async_result.finished + retries: "{{ ah_configuration_group_async_retries }}" + delay: "{{ ah_configuration_group_async_delay }}" + loop: "{{ __groups_job_async.results }}" + loop_control: + loop_var: __groups_job_async_result_item + when: __groups_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_group_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: Add Automation Hub group permissions + ah_group_perm: + name: "{{ __group.new_name | default(__group.name | default(omit)) }}" + perms: "{{ __group.perms }}" + state: "{{ __group.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + loop: "{{ ah_groups }}" + loop_control: + loop_var: "__group" + when: __group.perms is defined + no_log: "{{ ah_configuration_group_secure_logging }}" + async: "{{ ah_configuration_group_async_timeout }}" + poll: 0 + register: __group_perms_job_async + changed_when: not __group_perms_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Group | Wait for finish the group creation" + ansible.builtin.async_status: + jid: "{{ __group_perms_job_async_result_item.ansible_job_id }}" + register: __group_perms_job_async_result + until: __group_perms_job_async_result.finished + retries: "{{ ah_configuration_group_async_retries }}" + delay: "{{ ah_configuration_group_async_delay }}" + loop: "{{ __group_perms_job_async.results }}" + loop_control: + loop_var: __group_perms_job_async_result_item + when: __group_perms_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_group_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/test.yml new file mode 100644 index 00000000..1ad1dc58 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add groups to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../group +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/vars/groups.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/vars/groups.yml new file mode 100644 index 00000000..cf06b842 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group/tests/vars/groups.yml @@ -0,0 +1,5 @@ +--- +ah_groups: + - name: group1 + state: present +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/README.md new file mode 100644 index 00000000..cd6e0911 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/README.md @@ -0,0 +1,155 @@ +# group_roles + +## Description + +An Ansible Role to add roles to groups in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_group_roles`|`see below`|yes|Data structure describing the roles which are applied to groups, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add group task does not include sensitive information. +ah_configuration_group_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_group_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_group_roles_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_group_roles_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_group_roles_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Group Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`groups`|""|yes|str| List of Group Names to apply the roles to. If the group does not exist, it will be created. Must be lower case containing only alphanumeric characters and underscores.| +|`role_list`|""|yes|str|The list of roles to add to or remove from the given group. See below for options.| +|`state`|`present`|no|str|Desired state of the group. Can be `present`, `enforced`, or `absent`. If absent, then the module deletes the given combination of roles for given groups. If present, then the module creates the group roles if it does not already exist. If enforced, then the module will remove any group role combinations not provided.| + +#### role_list + +The `role_list` variable is a combination of roles and targets that are applied to the groups listed in `groups`. +The structure look slike + +```yaml +- roles: + - container.containerdistribution_owner + targets: + execution_environments: + - ee-minimal-rhel8 +``` + +Roles can be those that were created using the `role` role, the `ah_role`, or the built in roles. + +If no targets are listed, the roles are applied globally to the groups. +Targets consist of the following. + +|Target|Description| +|:---:|:---:| +|`collection_namespaces`|List of collection namespaces to apply the roles to.| +|`collection_remotes`|List of collection remotes to apply the roles to.| +|`collection_repositories`|List of collection repositories to apply the roles to.| +|`execution_environments`|List of execution environments to apply the roles to.| +|`container_registery_remotes`|List of container registry remotes to apply the roles to.| + +#### Yaml Example + +```yaml +--- +ah_group_roles: + - state: present + groups: + - santa + - group1 + role_list: + - roles: + - container.containerdistribution_owner + targets: + execution_environments: + - redhat_cop/config_as_code_ee + - roles: + - galaxy.container_remote + targets: + container_registery_remotes: + - quay + - roles: + - galaxy.user_admin + - galaxy.group_admin + - roles: + - galaxy.ansible_repository_owner + targets: + collection_repositories: + - validated + - roles: + - galaxy.collection_remote_owner + targets: + collection_remotes: + - community + - roles: + - galaxy.collection_namespace_owner + targets: + collection_namespaces: + - autohubtest2 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add group roles to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../group_roles +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/defaults/main.yml new file mode 100644 index 00000000..5f871cf9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/defaults/main.yml @@ -0,0 +1,21 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub groups roles +ah_group_roles: [] +# - groups +# - role_list + +ah_configuration_group_roles_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_group_roles_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_group_roles_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_group_roles_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/argument_specs.yml new file mode 100644 index 00000000..9540af45 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create groups roles in Automation Hub. + options: + ah_group_roles: + default: [] + required: false + description: Data structure describing your groups roles to manage. + type: list + elements: dict + + # Async variables + ah_configuration_group_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_group_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_group_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/main.yml new file mode 100644 index 00000000..98d28c3a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/meta/main.yml @@ -0,0 +1,44 @@ +--- +galaxy_info: + role_name: group_roles + author: Sean Sullivan + description: "An Ansible Role to manage groups roles in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "group" + - "groups" + - "role" + - "roles" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tasks/main.yml new file mode 100644 index 00000000..e97dde3c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tasks/main.yml @@ -0,0 +1,39 @@ +--- +# Add Group Roles +- name: Add Roles to Groups in Automation Hubs + group_roles: + groups: "{{ __group_role.groups | default(omit) }}" + role_list: "{{ __group_role.role_list | default(omit) }}" + state: "{{ __group_role.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_group_roles }}" + loop_control: + loop_var: "__group_role" + no_log: "{{ ah_configuration_group_roles_secure_logging }}" + async: "{{ ah_configuration_group_roles_async_timeout }}" + poll: 0 + register: __group_roles_job_async + changed_when: not __group_roles_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Add Roles to Groups | Wait for finish the group creation" + ansible.builtin.async_status: + jid: "{{ __group_roles_job_async_result_item.ansible_job_id }}" + register: __group_roles_job_async_result + until: __group_roles_job_async_result.finished + retries: "{{ ah_configuration_group_roles_async_retries }}" + delay: "{{ ah_configuration_group_roles_async_delay }}" + loop: "{{ __group_roles_job_async.results }}" + loop_control: + loop_var: __group_roles_job_async_result_item + when: __group_roles_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_group_roles_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/test.yml new file mode 100644 index 00000000..c47bcf19 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add group roles to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../group_roles +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/vars/group_roles.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/vars/group_roles.yml new file mode 100644 index 00000000..f120c437 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/group_roles/tests/vars/group_roles.yml @@ -0,0 +1,36 @@ +--- +ah_group_roles: + - state: present + groups: + - santa + - group1 + role_list: + - roles: + - container.containerdistribution_owner + targets: + execution_environments: + - redhat_cop/config_as_code_ee + - roles: + - galaxy.container_remote + targets: + container_registery_remotes: + - quay + - roles: + - galaxy.user_admin + - galaxy.group_admin + - roles: + - galaxy.ansible_repository_owner + targets: + collection_repositories: + - validated + - roles: + - galaxy.collection_remote_owner + targets: + collection_remotes: + - community + - roles: + - galaxy.collection_namespace_owner + targets: + collection_namespaces: + - autohubtest2 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/README.md new file mode 100644 index 00000000..aaf61703 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/README.md @@ -0,0 +1,128 @@ +# galaxy.galaxy.namespace + +## Description + +An Ansible Role to create Namespaces in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|yes|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_namespaces`|`see below`|yes|Data structure describing your namespaces, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add namespace task does not include sensitive information. +ah_configuration_namespace_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_namespace_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_namespace_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_namespace_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_namespace_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Namespace Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Namespace name. Must be lower case containing only alphanumeric characters and underscores.| +|`new_name`|""|yes|str|Setting this option will change the existing name (looked up via the name field.| +|`description`|""|yes|str|Description to use for the Namespace.| +|`company`|""|no|str|Namespace owner company name.| +|`email`|"password"|yes|str|Namespace contact email.| +|`avatar_url`|"public"|yes|str|Namespace logo URL.| +|`resources`|""|no|str|Namespace resource page in Markdown format.| +|`links`|[]|no|list|A list of dictionaries of Name and url values for links related the Namespace. See below for details.| +|`groups`|[]|yes|list|A list of dictionaries of the Names of groups that own the Namespace.| +|`state`|`present`|no|str|Desired state of the namespace.| + +#### Links + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Link Text.| +|`description`|""|yes|str|Link URL.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_namespaces: + - name: abc15 + company: Redhat + email: user@example.com + avatar_url: https://static.redhat.com/libs/redhat/brand-assets/latest/corp/logo.svg + description: string + resources: "# Redhat\nA Namespace test with changes" + links: + - name: "New_Google" + url: "http://www.google.com" + groups: + - name: system:partner-engineers + object_roles: + - "change_namespace" + - "upload_to_namespace" +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add namespace to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../namespace +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Sean Sullivan](https://github.com/sean-m-sullivan/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/defaults/main.yml new file mode 100644 index 00000000..489921dd --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/defaults/main.yml @@ -0,0 +1,33 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub namespace +ah_namespaces: [] +# possible fields: +# - name: "namespace_name" # mandatory +# company: Redhat +# email: user@example.com +# avatar_url: image_url # optional +# description: string # optional +# resources: "markdown file in a string" # optional +# links: #both fields mandatory when using links +# - name: "Link Text" +# url: "url" +# groups: #both fields mandatory when using groups +# - name: "group_name" +# object_roles: #Possible options below +# - # mandatory, choices: change_namespace, upload_to_namespace + +ah_configuration_namespace_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_namespace_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_namespace_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_namespace_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/argument_specs.yml new file mode 100644 index 00000000..9fecf1ce --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/argument_specs.yml @@ -0,0 +1,76 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create namespaces in Automation Hub. + options: + ah_namespaces: + default: [] + required: false + description: Data structure describing your namespaces to manage. + type: list + elements: dict + + # Async variables + ah_configuration_namespace_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_namespace_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_namespace_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/main.yml new file mode 100644 index 00000000..06f4bda5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "namespace" + author: "Sean Sullivan" + description: "An Ansible Role to create namespace in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "namespace" + - "namespaces" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tasks/main.yml new file mode 100644 index 00000000..12d56afd --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tasks/main.yml @@ -0,0 +1,60 @@ +--- +# Create AH Namespace +- name: Get token + ah_token: + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + when: + - ah_token is not defined + - lookup("ansible.builtin.env", "AH_API_TOKEN") == "" + - ah_namespaces | length > 1 + +- name: Add Automation Hub Namespace + ah_namespace: + name: "{{ __namespace_item.name }}" + new_name: "{{ __namespace_item.new_name | default('') }}" + description: "{{ __namespace_item.description | default('') }}" + company: "{{ __namespace_item.company | default('') }}" + email: "{{ __namespace_item.email | default(omit) }}" + avatar_url: "{{ __namespace_item.avatar_url | default('') }}" + resources: "{{ __namespace_item.resources | default('') }}" + links: "{{ __namespace_item.links | default([]) }}" + groups: "{{ __namespace_item.groups | default([]) }}" + state: "{{ __namespace_item.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_namespaces }}" + loop_control: + loop_var: "__namespace_item" + no_log: "{{ ah_configuration_namespace_secure_logging }}" + async: "{{ ah_configuration_namespace_async_timeout }}" + poll: 0 + register: __namespaces_job_async + changed_when: not __namespaces_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Namespace | Wait for finish the namespace creation" + ansible.builtin.async_status: + jid: "{{ __namespaces_job_async_result_item.ansible_job_id }}" + register: __namespaces_job_async_result + until: __namespaces_job_async_result.finished + retries: "{{ ah_configuration_namespace_async_retries }}" + delay: "{{ ah_configuration_namespace_async_delay }}" + loop: "{{ __namespaces_job_async.results }}" + loop_control: + loop_var: __namespaces_job_async_result_item + when: __namespaces_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_namespace_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/test.yml new file mode 100644 index 00000000..182db944 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add namespace to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../namespace +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/vars/namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/vars/namespaces.yml new file mode 100644 index 00000000..71b22c39 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/namespace/tests/vars/namespaces.yml @@ -0,0 +1,14 @@ +--- +ah_namespaces: + - name: abc15 + company: Redhat + email: user@example.com + avatar_url: https://static.redhat.com/libs/redhat/brand-assets/latest/corp/logo.svg + description: string + resources: "# Redhat\nA Namespace test with changes" + links: + - name: "New_Google" + url: "http://www.google.com" + groups: + - system:partner-engineers +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/README.md new file mode 100644 index 00000000..ff71c889 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/README.md @@ -0,0 +1,101 @@ +# galaxy.galaxy.offline_sync + +## Description + +An Ansible Role to offline_sync collections to Automation Hub or Galaxies. NOTE: if you do not provide an ah_token one will be generated which will invalidate any prior token. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|no|Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_collection_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_collection_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### ah_collections Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`ah_configuration_working_dir`|`/var/tmp/pah_offline_sync`|no|string|The working directory where the collections will be downloaded and any required files.| +|`ah_configuration_no_deps`|false|no|bool|Whether to download all dependencies for each collection or not, if false it may cause errors if dependency sync is off in Automation Hub.| + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Download all collections from Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - galaxy.galaxy.offline_sync +``` + +### Playbook to upload to offline Automation Hub after using this role to download the collections + +```yaml +--- +- name: Upload all collections + hosts: localhost + gather_facts: false + connection: local + vars_files: + - "collections.yml" + pre_tasks: + - name: Include vars from ah_configs directory with collections.yml file added + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + tasks: + - name: Ensure the namespaces exists + ansible.builtin.import_role: + name: galaxy.galaxy.namespace + + - name: Upload collections + ansible.builtin.include_role: + name: galaxy.galaxy.collection +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[David Danielsson](https://github.com/djdanielsson) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/defaults/main.yml new file mode 100644 index 00000000..c3bcf2e8 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/defaults/main.yml @@ -0,0 +1,13 @@ +--- + +# These are the default variables common to most ah_configuration and _utilities roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +ah_configuration_working_dir: /var/tmp/pah_offline_sync +ah_configuration_no_deps: false +# ah_overwrite_existing: false + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/argument_specs.yml new file mode 100644 index 00000000..4104f6d1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/argument_specs.yml @@ -0,0 +1,47 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to offline sync collections in Automation Hub. + options: + ah_configuration_working_dir: + default: /var/tmp/pah_offline_sync + type: str + required: false + description: The working directory where the collections will be downloaded and any required files. + ah_configuration_no_deps: + default: false + type: bool + required: false + description: Whether to download all dependencies for each collection or not, if false it may cause errors if dependency sync is off in Automation Hub. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: User's token on the Automation Hub Server + type: str + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/main.yml new file mode 100644 index 00000000..ab626ce4 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + role_name: offline_sync + author: David Danielsson + description: An Ansible Role to offline_sync collections to Automation Hub or Galaxies. + company: Red Hat + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: EL + versions: + - all + + galaxy_tags: + - automationhub + - galaxy + - configuration + - collection + - collections + - offlinesync + +dependencies: [] +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tasks/main.yml new file mode 100644 index 00000000..26ae74f0 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tasks/main.yml @@ -0,0 +1,80 @@ +--- +- name: Create directory to work in + ansible.builtin.file: + path: "{{ ah_configuration_working_dir }}" + state: directory + mode: "0755" + +- name: Check for ansible.cfg + ansible.builtin.stat: + path: "{{ ah_configuration_working_dir }}/ansible.cfg" + register: r_ansible_cfg + +- name: Figuring out AH token + when: (not r_ansible_cfg['stat']['exists']) and (ah_token is not defined or ah_token['token'] is defined) + block: + - name: Authenticate and get an API token from Automation Hub + ah_token: + ah_host: "{{ ah_host }}" + ah_username: "{{ ah_username }}" + ah_password: "{{ ah_password }}" + ah_path_prefix: galaxy # this is for private automation hub + validate_certs: false + register: r_ah_token + + - name: Fixing format + ansible.builtin.set_fact: + ah_token: "{{ ah_token['token'] }}" + when: r_ah_token['changed'] # noqa: no-handler + +- name: Create ansible.cfg + ansible.builtin.template: + src: ansible.cfg.j2 + dest: "{{ ah_configuration_working_dir }}/ansible.cfg" + mode: "0755" + when: not r_ansible_cfg['stat']['exists'] + +- name: Get list of all collections + ansible.builtin.uri: + url: https://{{ ah_host }}/api/galaxy/pulp/api/v3/ansible/collections/?limit=1000 + user: "{{ ah_username }}" + password: "{{ ah_password }}" + method: GET + force_basic_auth: true + validate_certs: "{{ ah_validate_certs }}" + register: r_collections + +- name: Create requirements.yml + ansible.builtin.template: + src: collections.yml.j2 + dest: "{{ ah_configuration_working_dir }}/requirements.yml" + mode: "0755" + +- name: Create directory to put all collections + ansible.builtin.file: + path: "{{ ah_configuration_working_dir }}/collections" + state: directory + mode: "0755" + +- name: Download all collections + ansible.builtin.command: ansible-galaxy collection download {% if ah_configuration_no_deps %}--no-deps{% endif %} -r requirements.yml -p "{{ ah_configuration_working_dir }}/collections" + changed_when: true + +- name: Find all relevant built collection files + ansible.builtin.find: + paths: "{{ collection_dir }}" + patterns: "{{ (collection_dir) | ternary('*.tar.gz', (collection_dir | basename)) }}" + register: __ah_collections_find_results + vars: + collection_dir: "{{ ah_configuration_working_dir }}/collections/" + +- name: Create collections list + ansible.builtin.template: + src: collections_list.yml.j2 + dest: "{{ ah_configuration_working_dir }}/collections.yml" + mode: "0755" + vars: + _namespaces: "{{ r_collections['json']['results'] | map(attribute='namespace') | flatten | sort | unique }}" + _collections: "{{ (__ah_collections_find_results['files'] | flatten) | map(attribute='path') | flatten | sort | unique }}" + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/ansible.cfg.j2 b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/ansible.cfg.j2 new file mode 100644 index 00000000..809d667c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/ansible.cfg.j2 @@ -0,0 +1,19 @@ +[galaxy] +server_list = rh-certified,validated,community,published +ignore_certs = {% if ah_validate_certs %}false{% else %}true{% endif %} + +[galaxy_server.rh-certified] +url=https://{{ ah_host }}/api/galaxy/content/rh-certified/ +token={{ ah_token }} + +[galaxy_server.validated] +url=https://{{ ah_host }}/api/galaxy/content/validated/ +token={{ ah_token }} + +[galaxy_server.community] +url=https://{{ ah_host }}/api/galaxy/content/community/ +token={{ ah_token }} + +[galaxy_server.published] +url=https://{{ ah_host }}/api/galaxy/content/published/ +token={{ ah_token }} diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections.yml.j2 b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections.yml.j2 new file mode 100644 index 00000000..bbf10810 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections.yml.j2 @@ -0,0 +1,6 @@ +--- +collections: +{% for each in r_collections['json']['results'] %} + - name: {{ each.namespace }}.{{ each.name }} +{% endfor %} +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections_list.yml.j2 b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections_list.yml.j2 new file mode 100644 index 00000000..2f5168cc --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/templates/collections_list.yml.j2 @@ -0,0 +1,14 @@ +--- +ah_auto_approve: true +ah_namespaces: +{% for namespace in _namespaces %} + - name: {{ namespace }} +{% endfor %} +ah_collections: +{% for each in _collections %} + - name: {{ (each | basename).split('-')[1] }} + namespace: {{ (each | basename).split('-')[0] }} + path: {{ each }} + state: present +{% endfor %} +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tests/test.yml new file mode 100644 index 00000000..e442a2a3 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/offline_sync/tests/test.yml @@ -0,0 +1,13 @@ +--- +- name: Offline_sync collections to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + roles: + - ../../offline_sync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/README.md new file mode 100644 index 00000000..0bac087f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/README.md @@ -0,0 +1,111 @@ +# galaxy.galaxy.publish + +## Description + +An Ansible Role to publish collections to Automation Hub or Galaxies. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|no|Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_configuration_working_dir`|`/var/tmp`|no|The working directory where the built artifacts live, or where the artifacts will be built.|| +|`ah_auto_approve`|`False`|no|Whether the collection will be automatically approved in Automation Hub. This will only work if the account being used has correct privileges.|| +|`ah_overwrite_existing`|`False`|no|Whether the collection will be automatically overwrite an existing collection in Automation Hub. This will only work if the account being used has correct privileges.|| +|`ah_collections`|`see below`|no|Data structure describing your collections, mutually exclusive to ah_collection_list, described below.|| +|`ah_collection_list`|`list`|no|Data structure file paths to pre built collections, mutually exclusive with ah_collections.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add publish collections task does not include sensitive information. +ah_configuration_publish_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_publish_secure_logging`|`False`|no|Whether or not to include the sensitive publish collections role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_publish_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_publish_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_publish_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### ah_collections Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`collection_name`|""|yes|str|Name of collection, normally the last part before the / in a git url.| +|`git_url`|""|no|str|Url to git repo. Required if collection_local_path not set| +|`version`|""|no|str|Git ref to pull. Will default to default branch if unset. Can specify tag, branch or commit ref here.| +|`key_path`|""|no|str|Path to ssh key for authentication.| +|`ssh_opts`|""|no|str|Options git will pass to ssh when used as protocol.| +|`collection_local_path`|""|no|str|Path to collection stored locally. Required if git_url not set. This value will be used rather than git_url if set.| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_collections: + - collection_name: cisco.iosxr + git_url: https://github.com/ansible-collections/cisco.iosxr + +ah_auto_approve: true +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Build and add collection to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - galaxy.galaxy.publish +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Sean Sullivan](https://github.com/sean-m-sullivan/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/defaults/main.yml new file mode 100644 index 00000000..921191e6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/defaults/main.yml @@ -0,0 +1,30 @@ +--- + +# These are the default variables common to most ah_configuration and _utilities roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# The following two lists are mutually exclusive, you need to provide at least one of them, and ah_collections will override the collection list. +# A list of paths to collection tarballs to publish if you are not cloning from a git and building them. +# ah_collection_list: [] +# a list of dictionaries describing collections to publish +# ah_collections: [] +# possible fields: +# - collection_name: "name of collection, normally the last part before the / in a git url" # mandatory +# git_url: "url to git repo." # mandatory when type=git + +ah_configuration_working_dir: "/var/tmp" + +ah_auto_approve: false +ah_overwrite_existing: false + +ah_configuration_publish_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_publish_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_publish_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_publish_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/argument_specs.yml new file mode 100644 index 00000000..57eb3f8e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/argument_specs.yml @@ -0,0 +1,93 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to publish collections in Automation Hub. + options: + ah_configuration_working_dir: + default: /var/tmp + type: str + required: false + description: The working directory where the built artifacts live, or where the artifacts will be built. + ah_auto_approve: + default: false + type: bool + required: false + description: Whether the collection will be automatically approved in Automation Hub. This will only work if the account being used has correct privileges. + ah_overwrite_existing: + default: false + type: bool + required: false + description: Whether the collection will be automatically overwrite an existing collection in Automation Hub. This will only work if the account being used has correct privileges. + ah_collections: + default: [] + required: false + description: Data structure describing your collections, mutually exclusive to ah_collection_list + type: list + elements: dict + ah_collection_list: + default: [] + required: false + description: Data structure file paths to pre built collections, mutually exclusive with ah_collections. + type: list + elements: str + + # Async variables + ah_configuration_publish_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_publish_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_publish_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/main.yml new file mode 100644 index 00000000..1fe766be --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/meta/main.yml @@ -0,0 +1,43 @@ +--- +galaxy_info: + role_name: "publish" + author: "Sean Sullivan" + description: "An Ansible Role to publish collections to Automation Hub or Galaxies." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "collection" + - "collections" + - "publish" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tasks/main.yml new file mode 100644 index 00000000..7f459c61 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tasks/main.yml @@ -0,0 +1,146 @@ +--- +- name: Git checkout + ansible.builtin.git: + repo: "{{ __ah_collection_item.git_url }}" + dest: "{{ ah_configuration_working_dir }}/{{ __ah_collection_item.collection_name }}/" + version: "{{ __ah_collection_item.version | default(omit) }}" + key_file: "{{ __ah_collection_item.key_path | default(omit) }}" + ssh_opts: "{{ __ah_collection_item.ssh_opts | default(omit) }}" + loop: "{{ ah_collections }}" + loop_control: + loop_var: "__ah_collection_item" + no_log: "{{ ah_configuration_publish_secure_logging }}" + when: + - ah_collection_list is not defined + - __ah_collection_item.collection_local_path is not defined + +- name: Copy local collection to working dir + ansible.builtin.copy: + src: "{{ __ah_collection_item.collection_local_path }}/" + dest: "{{ ah_configuration_working_dir }}/{{ __ah_collection_item.collection_name }}" + remote_src: true + mode: 0755 + loop: "{{ ah_collections }}" + loop_control: + loop_var: "__ah_collection_item" + no_log: "{{ ah_configuration_publish_secure_logging }}" + when: + - ah_collection_list is not defined + - __ah_collection_item.collection_local_path is defined + +- name: Build Collections + ah_build: + path: "{{ ah_configuration_working_dir }}/{{ __ah_collection_item.collection_name }}" + output_path: "{{ ah_configuration_working_dir }}/{{ __ah_collection_item.collection_name }}" + force: true + register: ah_build_results + loop: "{{ ah_collections }}" + loop_control: + loop_var: "__ah_collection_item" + no_log: "{{ ah_configuration_publish_secure_logging }}" + when: ah_collection_list is not defined + +- name: Find if variable contains file or dir + ansible.builtin.stat: + path: "{{ __ah_build_result_item.path }}" + register: ah_build_stat_results + no_log: "{{ ah_configuration_publish_secure_logging }}" + loop: "{{ ah_build_results.results }}" + loop_control: + loop_var: "__ah_build_result_item" + when: ah_collection_list is not defined + +# __ah_build_result_item.results.path will be the output_path in ansible<2.10 but the actual built path in ansible>=2.10 +- name: Find all relevant built collection files + ansible.builtin.find: + paths: "{{ (__ah_build_result_item.stat.isdir) | ternary(__ah_build_result_item.stat.path, (__ah_build_result_item.stat.path | dirname)) }}" + patterns: "{{ (__ah_build_result_item.stat.isdir) | ternary('*.tar.gz', (__ah_build_result_item.stat.path | basename)) }}" + register: __ah_collections_find_results + no_log: "{{ ah_configuration_publish_secure_logging }}" + loop: "{{ ah_build_stat_results.results }}" + loop_control: + loop_var: "__ah_build_result_item" + when: ah_collection_list is not defined + +- name: Set path for all collections found + ansible.builtin.set_fact: + ah_collection_list: "{{ __ah_collections_find_results.results | map(attribute='files') | flatten | map(attribute='path') | flatten }}" + no_log: "{{ ah_configuration_publish_secure_logging }}" + when: ah_collection_list is not defined + +- name: Get token + ah_token: + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + when: + - ah_token is not defined + - lookup("ansible.builtin.env", "AH_API_TOKEN") == "" + - ah_collection_list | length > 1 + +- name: Publish Collections + ah_collection: + namespace: "{{ (__ah_collection_file | basename).split('-')[0] }}" + name: "{{ (__ah_collection_file | basename).split('-')[1] }}" + version: "{{ (__ah_collection_file | basename).split('-')[2:] | join('-') | splitext | first | splitext | first }}" + path: "{{ __ah_collection_file }}" + auto_approve: "{{ ah_auto_approve }}" + overwrite_existing: "{{ ah_overwrite_existing }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collection_list }}" + loop_control: + loop_var: "__ah_collection_file" + no_log: "{{ ah_configuration_publish_secure_logging }}" + async: "{{ ah_configuration_publish_async_timeout }}" + poll: 0 + register: __publish_job_async + changed_when: not __publish_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Publish Collection | Wait for finish the publish creation" + ansible.builtin.async_status: + jid: "{{ __publish_job_async_result_item.ansible_job_id }}" + register: __publish_job_async_result + until: __publish_job_async_result.finished + retries: "{{ ah_configuration_publish_async_retries }}" + delay: "{{ ah_configuration_publish_async_delay }}" + loop: "{{ __publish_job_async.results }}" + loop_control: + loop_var: __publish_job_async_result_item + when: __publish_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_publish_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: Approve Collections + ah_approval: + namespace: "{{ (__ah_collection_file | basename).split('-')[0] }}" + name: "{{ (__ah_collection_file | basename).split('-')[1] }}" + version: "{{ (__ah_collection_file | basename).split('-')[2:] | join('-') | splitext | first | splitext | first }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_collection_list }}" + loop_control: + loop_var: "__ah_collection_file" + no_log: "{{ ah_configuration_publish_secure_logging }}" + when: not ah_auto_approve + register: approval + retries: 3 + delay: 2 + until: not approval is failed +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/test.yml new file mode 100644 index 00000000..e5ed7fcf --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Publish collections to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../publish +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/vars/collections.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/vars/collections.yml new file mode 100644 index 00000000..af3dcacd --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/publish/tests/vars/collections.yml @@ -0,0 +1,9 @@ +--- +ah_collections: + - collection_name: cisco.iosxr + git_url: https://github.com/ansible-collections/cisco.iosxr + - collection_local_path: /var/tmp/tower_configuration + collection_name: tower_configuration + +ah_auto_approve: true +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/README.md new file mode 100644 index 00000000..661da614 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/README.md @@ -0,0 +1,130 @@ +# galaxy.galaxy.repository + +## Description + +An Ansible Role to create Repositories in Automation Hub. +This role has been depreciated and is not supported in AAP 2.4 onwards. It is replaced by collection_remote. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|yes|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_repositories`|`see below`|yes|Data structure describing your namespaces, described below.|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_repository_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_repository_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_repository_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_repository_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Repository Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes| Repository name. Probably one of community, validated, or rh-certified|| +|`url`|`https://cloud.redhat.com/api/automation-hub/`|no|(`ah_repository_certified`)Remote URL for the repository.|`https://console.redhat.com/api/automation-hub/content/`| +|`url`|`https://galaxy.ansible.com/api/`|no|(`ah_repository_community`)Remote URL for the repository.|| +|`auth_url`|`https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token`|no|(`ah_repository_certified`)Remote URL for the repository authentication if separate.|| +|`token`|""|no|Token to authenticate to the remote repository.|| +|`username`|""|no|Username to authenticate to the remote repository.|| +|`password`|""|no|Password to authenticate to the remote repository.|| +|`requirements`|""|no|(`ah_repository_community`)Requirements to download from remote.|| +|`requirements_file`|""|no|(`ah_repository_community`)A yaml requirements file to download from remote.|| +|`proxy_url`|""|no|The URL for the proxy. Defaults to global `proxy_url` variable.|| +|`proxy_username`|""|no|The username for the proxy authentication. Defaults to global `proxy_username` variable.|| +|`proxy_password`|""|no|The password for the proxy authentication. Defaults to global `proxy_password` variable.|| +|`ah_token`|""|yes|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`download_concurrency`|"10"|no| Number of concurrent collections to download.|| +|`rate_limit`|"8"|no|Limits total download rate in requests per second|| +|`signed_only`|"False"|no|Only download signed collections|True| +|`tls_validation`|"True"|no|Whether to use TLS validation against the remote repository|False| +|`client_key`|""|no|A PEM encoded private key file used for authentication|| +|`client_cert`|""|no|A PEM encoded client certificate used for authentication|| +|`ca_cert`|""|no|A PEM encoded CA certificate used for authentication|| +|`client_key_path`|""|no|Path to a PEM encoded private key file used for authentication|| +|`client_cert_path`|""|no|Path to a PEM encoded client certificate used for authentication|| +|`ca_cert_path`|""|no|Path to a PEM encoded CA certificate used for authentication|| + +#### Yaml Example + +```yaml +--- +ah_repositories: + - name: community + url: https://beta-galaxy.ansible.com/ + requirements: + - name: infra.ee_utilities + - name: infra.controller_configuration + wait: true + interval: 25 + timeout: 1000000 +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../repository +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Inderpal Tiwana](https://github.com/inderpaltiwana/) and [David Danielsson](https://github.com/djdanielsson) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/defaults/main.yml new file mode 100644 index 00000000..407535b6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role +ah_configuration_repository_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_repository_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_repository_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_repository_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/argument_specs.yml new file mode 100644 index 00000000..7ab2f5d5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/argument_specs.yml @@ -0,0 +1,60 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create repositories in Automation Hub. + options: + ah_repositories: + default: [] + required: false + description: Data structure describing the collection repositories to sync. + type: list + elements: dict + + # Async variables + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/main.yml new file mode 100644 index 00000000..3f3c9310 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/meta/main.yml @@ -0,0 +1,41 @@ +--- +galaxy_info: + role_name: "repository" + author: "Inderpal Tiwana and David Danielsson" + description: "An Ansible Role to create repository in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "repository" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tasks/main.yml new file mode 100644 index 00000000..9abc1eb2 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tasks/main.yml @@ -0,0 +1,72 @@ +--- +# Create AH repository +- name: Get token + ah_token: + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + when: + - ah_token is not defined + - lookup("ansible.builtin.env", "AH_API_TOKEN") == "" + - ah_repositories | length > 1 + +- name: Add Automation Hub repository + ah_repository: + name: "{{ __repository_item['name'] }}" + url: "{{ __repository_item['url'] }}" + auth_url: "{{ __repository_item['auth_url'] | default(omit) }}" + token: "{{ __repository_item['token'] | default(omit) }}" + username: "{{ __repository_item['username'] | default(omit) }}" + password: "{{ __repository_item['password'] | default(omit) }}" + requirements: "{{ __repository_item['requirements'] | default(omit) }}" + requirements_file: "{{ __repository_item['requirements_file'] | default(omit) }}" + download_concurrency: "{{ __repository_item['download_concurrency'] | default(10) }}" + rate_limit: "{{ __repository_item['rate_limit'] | default(8) }}" + signed_only: "{{ __repository_item['signed_only'] | default(omit) }}" + tls_validation: "{{ __repository_item['tls_validation'] | default(true) }}" + client_key: "{{ __repository_item['client_key'] | default(omit) }}" + client_cert: "{{ __repository_item['client_cert'] | default(omit) }}" + ca_cert: "{{ __repository_item['ca_cert'] | default(omit) }}" + client_key_path: "{{ __repository_item['client_key_path'] | default(omit) }}" + client_cert_path: "{{ __repository_item['client_cert_path'] | default(omit) }}" + ca_cert_path: "{{ __repository_item['ca_cert_path'] | default(omit) }}" + proxy_url: "{{ __repository_item.proxy_url | default(proxy_url | default(omit)) }}" + proxy_username: "{{ __repository_item.proxy_username | default(proxy_username | default(omit)) }}" + proxy_password: "{{ __repository_item.proxy_password | default(proxy_password | default(omit)) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_repositories }}" + loop_control: + loop_var: "__repository_item" + no_log: "{{ ah_configuration_repository_secure_logging }}" + async: "{{ ah_configuration_repository_async_timeout }}" + poll: 0 + register: __repositories_job_async + changed_when: not __repositories_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Repository | Wait for finish the repository creation" + ansible.builtin.async_status: + jid: "{{ __repositories_job_async_result_item.ansible_job_id }}" + register: __repositories_job_async_result + until: __repositories_job_async_result.finished + retries: "{{ ah_configuration_repository_async_retries }}" + delay: "{{ ah_configuration_repository_async_delay }}" + loop: "{{ __repositories_job_async.results }}" + loop_control: + loop_var: __repositories_job_async_result_item + when: __repositories_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_repository_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/test.yml new file mode 100644 index 00000000..4abd2dda --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../repository +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/vars/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/vars/repositories.yml new file mode 100644 index 00000000..20bd87ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository/tests/vars/repositories.yml @@ -0,0 +1,5 @@ +--- +ah_repositories: + - name: abc15 + url: ansible-ah-test-repository.example.com +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/README.md new file mode 100644 index 00000000..6b89cb95 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/README.md @@ -0,0 +1,106 @@ +# galaxy.galaxy.repository_sync + +## Description + +An Ansible Role to sync Repositories in Automation Hub. +This role has been depreciated and is not supported in AAP 2.4 onwards. It is replaced by collection_remote_sync. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_token`|""|yes|Tower Admin User's token on the Automation Hub Server. This should be stored in an Ansible Vault at or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_repositories`|`see below`|yes|Data structure describing your namespaces, described below.|| + +The `ah_configuration_async_dir` variable sets the directory to write the results file for async tasks. +The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add repository task does not include sensitive information. +ah_configuration_repository_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_repository_secure_logging`|`False`|no|Whether or not to include the sensitive Repository roles tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_repository_sync_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_repository_sync_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_repository_sync_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Repository Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes| Repository name. Probably one of community, validated, or rh-certified.|| +|`wait`|"false"|no|Wait for the repository to finish syncing before returning.|| +|`interval`|"1"|no|The interval to request an update from Automation Hub.|| +|`timeout`|""|no|If waiting for the project to update this will abort after this amount of seconds.|| + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_repositories: + - name: community +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../repository_sync +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Inderpal Tiwana](https://github.com/inderpaltiwana/) and [David Danielsson](https://github.com/djdanielsson) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/defaults/main.yml new file mode 100644 index 00000000..66d42c5b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role +ah_configuration_repository_sync_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_repository_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_repository_sync_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_repository_sync_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/argument_specs.yml new file mode 100644 index 00000000..6cc5b3b4 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/argument_specs.yml @@ -0,0 +1,60 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to sync repositories in Automation Hub. + options: + ah_repositories: + default: [] + required: false + description: Data structure describing the collection repositories to sync. + type: list + elements: dict + + # Async variables + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_repository_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str + ah_token: + required: false + description: Automation Hub token for authentication. + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/main.yml new file mode 100644 index 00000000..9ad06083 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "repository_sync" + author: "Inderpal Tiwana and David Danielsson" + description: "An Ansible Role to sync repository in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "repository" + - "sync" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tasks/main.yml new file mode 100644 index 00000000..cee4c840 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tasks/main.yml @@ -0,0 +1,53 @@ +--- +- name: Get token + ah_token: + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + when: + - ah_token is not defined + - lookup("ansible.builtin.env", "AH_API_TOKEN") == "" + - ah_repositories | length > 1 + +- name: Sync Automation Hub repository + ah_repository_sync: + name: "{{ __repository_item.name }}" + wait: "{{ __repository_item.wait | default(omit) }}" + interval: "{{ __repository_item.interval | default(1) }}" + timeout: "{{ __repository_item.timeout | default(omit) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_token: "{{ ah_token | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + ah_verify_ssl: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_repositories }}" + loop_control: + loop_var: "__repository_item" + no_log: "{{ ah_configuration_repository_secure_logging }}" + async: "{{ ah_configuration_repository_sync_async_timeout }}" + poll: 0 + register: __repositories_syncs_job_async + changed_when: not __repositories_syncs_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Repository Sync | Wait for finish the repository_sync to finish" + ansible.builtin.async_status: + jid: "{{ __repositories_syncs_job_async_result_item.ansible_job_id }}" + register: __repositories_syncs_job_async_result + until: __repositories_syncs_job_async_result.finished + retries: "{{ ah_configuration_repository_sync_async_retries }}" + delay: "{{ ah_configuration_repository_sync_async_delay }}" + loop: "{{ __repositories_syncs_job_async.results }}" + loop_control: + loop_var: __repositories_syncs_job_async_result_item + when: __repositories_syncs_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_repository_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/test.yml new file mode 100644 index 00000000..992e34ab --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Sync repository to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../repository_sync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/vars/repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/vars/repositories.yml new file mode 100644 index 00000000..20bd87ed --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/repository_sync/tests/vars/repositories.yml @@ -0,0 +1,5 @@ +--- +ah_repositories: + - name: abc15 + url: ansible-ah-test-repository.example.com +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/README.md new file mode 100644 index 00000000..73f805af --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/README.md @@ -0,0 +1,127 @@ +# galaxy.galaxy.role + +## Description + +An Ansible Role to create role permissions in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_roles`|`see below`|yes|Data structure describing your role permissions, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add group task does not include sensitive information. +ah_configuration_group_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_role_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_role_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_role_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_role_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### Role Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`name`|""|yes|str|Group Name. Must be lower case containing only alphanumeric characters and underscores. Must start with 'galaxy.'.| +|`description`|""|yes|str|The description of the permission role.| +|`perms`|""|yes|str|The list of permissions for the given role. See below for options.| +|`state`|`present`|no|str|Desired state of the group.| + +#### perms + +The module accepts the following roles: + +- For user management, `add_user`, `change_user`, `delete_user`, and `view_user`. +- For group management, `add_group`, `change_group`, `delete_group`, and `view_group`. +- For collection namespace management, `add_namespace`, `change_namespace`, `upload_to_namespace`, and `delete_namespace`. +- For collection content management, `modify_ansible_repo_content`, `delete_collection`, and `sign_ansiblerepository`. +- For remote repository configuration, `change_collectionremote`, `view_collectionremote`, + `add_collectionremote`, `delete_collectionremote`, and `manage_roles_collectionremote`. +- For Ansible Repository management, only with private automation hub v4.7.0 + `add_ansiblerepository`, `change_ansiblerepository`, `delete_ansiblerepository`, `manage_roles_ansiblerepository`, + `repair_ansiblerepository`, `view_ansiblerepository`, +- For container image management, only with private automation hub v4.3.2 or later, + `change_containernamespace_perms`, `change_container`, `change_image_tag`, `create_container`, + Push existing container `push_container`, `namespace_add_containerdistribution`, `manage_roles_containernamespace`, + and `delete_containerrepository`. +- For remote registry management, `add_containerregistryremote`, `change_containerregistryremote`, and`delete_containerregistryremote`. +- For task management, `change_task`, `view_task`, and `delete_task`. +- You can also grant or revoke all permissions with `*` or `all`. + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_roles: + - name: galaxy.stuff.mcstuffins + description: test + perms: + - add_user + - change_user + - delete_user + - view_user +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add roles to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../role +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/defaults/main.yml new file mode 100644 index 00000000..1f9e1f9c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/defaults/main.yml @@ -0,0 +1,23 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub groups +ah_roles: [] +# possible fields: +# - name +# - perms +# - state + +ah_configuration_role_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_role_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_role_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_role_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/argument_specs.yml new file mode 100644 index 00000000..701a411b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create role permissions in Automation Hub. + options: + ah_roles: + default: [] + required: false + description: Data structure describing your role permissions to manage. + type: list + elements: dict + + # Async variables + ah_configuration_role_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_role_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_role_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/main.yml new file mode 100644 index 00000000..bc1d1d80 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "role" + author: Sean Sullivan + description: "An Ansible Role to manage roles in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "role" + - "roles" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tasks/main.yml new file mode 100644 index 00000000..24403269 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tasks/main.yml @@ -0,0 +1,41 @@ +--- + +# Create AH Role +- name: Add Automation Hub role + ah_role: + name: "{{ __role.name }}" + description: "{{ __role.description | default(omit) }}" + perms: "{{ __role.perms | default(omit) }}" + state: "{{ __role.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_roles }}" + loop_control: + loop_var: "__role" + no_log: "{{ ah_configuration_role_secure_logging }}" + async: "{{ ah_configuration_role_async_timeout }}" + poll: 0 + register: __roles_job_async + changed_when: not __roles_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create Role | Wait for finish the role creation" + ansible.builtin.async_status: + jid: "{{ __roles_job_async_result_item.ansible_job_id }}" + register: __roles_job_async_result + until: __roles_job_async_result.finished + retries: "{{ ah_configuration_role_async_retries }}" + delay: "{{ ah_configuration_role_async_delay }}" + loop: "{{ __roles_job_async.results }}" + loop_control: + loop_var: __roles_job_async_result_item + when: __roles_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_role_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/test.yml new file mode 100644 index 00000000..ed8f6732 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add roles to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../role +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/vars/roles.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/vars/roles.yml new file mode 100644 index 00000000..e3d619e7 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/role/tests/vars/roles.yml @@ -0,0 +1,10 @@ +--- +ah_roles: + - name: galaxy.stuff.mcstuffins + description: test + perms: + - add_user + - change_user + - delete_user + - view_user +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/README.md new file mode 100644 index 00000000..192ba636 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/README.md @@ -0,0 +1,115 @@ +# galaxy.galaxy.user + +## Description + +An Ansible Role to create users in Automation Hub. + +## Variables + +|Variable Name|Default Value|Required|Description|Example| +|:---:|:---:|:---:|:---:|:---:| +|`ah_host`|""|yes|URL to the Automation Hub or Galaxy Server. (alias: `ah_hostname`)|127.0.0.1| +|`ah_username`|""|yes|Admin User on the Automation Hub or Galaxy Server.|| +|`ah_password`|""|yes|Automation Hub Admin User's password on the Automation Hub Server. This should be stored in an Ansible Vault at vars/tower-secrets.yml or elsewhere and called from a parent playbook.|| +|`ah_validate_certs`|`true`|no|Whether or not to validate the Ansible Automation Hub Server's SSL certificate.|| +|`ah_request_timeout`|`10`|no|Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host.|| +|`ah_path_prefix`|""|no|API path used to access the api. Either galaxy, automation-hub, or custom|| +|`ah_configuration_async_dir`|`null`|no|Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`.|| +|`ah_users`|`see below`|yes|Data structure describing your execution environment images, described below.|| + +### Secure Logging Variables + +The following Variables compliment each other. +If Both variables are not set, secure logging defaults to false. +The role defaults to False as normally the add user task does not include sensitive information. +ah_configuration_user_secure_logging defaults to the value of ah_configuration_secure_logging if it is not explicitly called. This allows for secure logging to be toggled for the entire suite of automation hub configuration roles with a single variable, or for the user to selectively use it. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_user_secure_logging`|`False`|no|Whether or not to include the sensitive Namespace role tasks in the log. Set this value to `True` if you will be providing your sensitive values from elsewhere.| +|`ah_configuration_secure_logging`|`False`|no|This variable enables secure logging as well, but is shared across multiple roles, see above.| + +### Asynchronous Retry Variables + +The following Variables set asynchronous retries for the role. +If neither of the retries or delay or retries are set, they will default to their respective defaults. +This allows for all items to be created, then checked that the task finishes successfully. +This also speeds up the overall role. + +|Variable Name|Default Value|Required|Description| +|:---:|:---:|:---:|:---:| +|`ah_configuration_async_timeout`|1000|no|This variable sets the async timeout for the role globally.| +|`ah_configuration_user_async_timeout`|`ah_configuration_async_timeout`|no|This variable sets the async timeout for the role.| +|`ah_configuration_async_retries`|50|no|This variable sets the number of retries to attempt for the role globally.| +|`ah_configuration_user_async_retries`|`ah_configuration_async_retries`|no|This variable sets the number of retries to attempt for the role.| +|`ah_configuration_async_delay`|1|no|This sets the delay between retries for the role globally.| +|`ah_configuration_user_async_delay`|`ah_configuration_async_delay`|no|This sets the delay between retries for the role.| + +## Data Structure + +### User Variables + +|Variable Name|Default Value|Required|Type|Description| +|:---:|:---:|:---:|:---:|:---:| +|`username`|""|yes|str|Username. Must be lower case containing only alphanumeric characters and underscores.| +|`groups`|[]|no|list|List of the groups to update.| +|`append`|true|no|str|Whether to append or replace the group list provided.| +|`first_name`|""|no|str|User's first name.| +|`last_name`|""|no|str|User's last name.| +|`email`|""|no|str|User's email address.| +|`is_superuser`|false|no|bool|Whether the user is a superuser.| +|`password`|""|no|str|User's password as a clear string. The password must contain at least 9 characters with numbers or special characters.| +|`state`|`present`|no|str|Desired state of the user.| + + +### Standard Project Data Structure + +#### Yaml Example + +```yaml +--- +ah_users: + - username: user1 + groups: + - group1 + append: true + first_name: user + last_name: one + email: user1@example.com + is_superuser: false + password: p4ssword + state: present +``` + +## Playbook Examples + +### Standard Role Usage + +```yaml +--- +- name: Add user to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../user +``` + +## License + +[GPLv3+](https://github.com/ansible/galaxy_collection#licensing) + +## Author + +[Tom Page](https://github.com/Tompage1994/) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/defaults/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/defaults/main.yml new file mode 100644 index 00000000..1349c3ef --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/defaults/main.yml @@ -0,0 +1,29 @@ +--- + +# These are the default variables common to most ah_configuration roles +# You shouldn't need to define them again and again but they should be defined +# ah_hostname: "{{ inventory_hostname }}" +# ah_oauthtoken: "" +# ah_validate_certs: false + +# These are the default variables specific to the license role + +# a list of dictionaries describing the Automation Hub users +ah_users: [] +# possible fields: +# - username +# - groups +# - append +# - first_name +# - last_name +# - email +# - is_superuser +# - password +# - state + +ah_configuration_user_secure_logging: "{{ ah_configuration_secure_logging | default(false) }}" +ah_configuration_user_async_timeout: "{{ ah_configuration_async_timeout | default(1000) }}" +ah_configuration_user_async_retries: "{{ ah_configuration_async_retries | default(50) }}" +ah_configuration_user_async_delay: "{{ ah_configuration_async_delay | default(1) }}" +ah_configuration_async_dir: null +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/argument_specs.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/argument_specs.yml new file mode 100644 index 00000000..4c542ed9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/argument_specs.yml @@ -0,0 +1,72 @@ +--- +argument_specs: + main: + short_description: An Ansible Role to create users in Automation Hub. + options: + ah_users: + default: [] + required: false + description: Data structure describing your users to manage. + type: list + elements: dict + + # Async variables + ah_configuration_user_async_retries: + default: "{{ ah_configuration_async_retries | default(50) }}" + required: false + description: This variable sets the number of retries to attempt for the role. + ah_configuration_async_retries: + default: 50 + required: false + description: This variable sets number of retries across all roles as a default. + ah_configuration_user_async_delay: + default: "{{ ah_configuration_async_delay | default(1) }}" + required: false + description: This variable sets delay between retries for the role. + ah_configuration_async_delay: + default: 1 + required: false + description: This variable sets delay between retries across all roles as a default. + ah_configuration_async_dir: + default: null + required: false + description: Sets the directory to write the results file for async tasks. The default value is set to `null` which uses the Ansible Default of `/root/.ansible_async/`. + + # No_log variables + ah_configuration_user_secure_logging: + default: "{{ ah_configuration_secure_logging | default(false) }}" + required: false + type: bool + description: Whether or not to include the sensitive role tasks in the log. Set this value to `true` if you will be providing your sensitive values from elsewhere. + ah_configuration_secure_logging: + default: false + required: false + type: bool + description: This variable enables secure logging across all roles as a default. + + # Generic across all roles + ah_host: + required: false + description: URL to the Automation Hub Server. + type: str + ah_path_prefix: + required: false + description: The path for the Automation Hub API. Usually galaxy or automation-hub unless custom set in AH settings. + ah_validate_certs: + required: false + description: Whether or not to validate the Automation Hub Server's SSL certificate. + type: str + ah_request_timeout: + default: 10 + required: false + description: Specify the timeout Ansible should use in requests to the Galaxy or Automation Hub host. + type: float + ah_username: + required: false + description: User for authentication on Automation Hub + type: str + ah_password: + required: false + description: User's password For Automation Hub + type: str +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/main.yml new file mode 100644 index 00000000..03602f29 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/meta/main.yml @@ -0,0 +1,42 @@ +--- +galaxy_info: + role_name: "user" + author: "Tom Page" + description: "An Ansible Role to manage users in Automation Hub." + company: "Red Hat" + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + license: GPL-3.0-or-later + + min_ansible_version: 2.14.0 + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + platforms: + - name: "EL" + versions: + - "all" + + galaxy_tags: + - "automationhub" + - "galaxy" + - "configuration" + - "user" + - "users" + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tasks/main.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tasks/main.yml new file mode 100644 index 00000000..67788323 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tasks/main.yml @@ -0,0 +1,47 @@ +--- + +# Create AH Users +- name: Add Automation Hub User + ah_user: + username: "{{ __user.username | default(omit) }}" + # new_name: "{{ __user.new_name | default(omit) }}" <-- Needs adding once new_name option added to module + groups: "{{ __user.groups | default(omit) }}" + append: "{{ __user.append | default(omit) }}" + first_name: "{{ __user.first_name | default(omit) }}" + last_name: "{{ __user.last_name | default(omit) }}" + email: "{{ __user.email | default(omit) }}" + is_superuser: "{{ __user.is_superuser | default(omit) }}" + password: "{{ __user.password | default(omit) }}" + state: "{{ __user.state | default(ah_state | default('present')) }}" + ah_host: "{{ ah_host | default(ah_hostname) | default(omit) }}" + ah_username: "{{ ah_username | default(omit) }}" + ah_password: "{{ ah_password | default(omit) }}" + ah_path_prefix: "{{ ah_path_prefix | default(omit) }}" + validate_certs: "{{ ah_validate_certs | default(omit) }}" + request_timeout: "{{ ah_request_timeout | default(omit) }}" + loop: "{{ ah_users }}" + loop_control: + loop_var: "__user" + no_log: "{{ ah_configuration_user_secure_logging }}" + async: "{{ ah_configuration_user_async_timeout }}" + poll: 0 + register: __users_job_async + changed_when: not __users_job_async.changed + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' + +- name: "Create User | Wait for finish the user creation" + ansible.builtin.async_status: + jid: "{{ __users_job_async_result_item.ansible_job_id }}" + register: __users_job_async_result + until: __users_job_async_result.finished + retries: "{{ ah_configuration_user_async_retries }}" + delay: "{{ ah_configuration_user_async_delay }}" + loop: "{{ __users_job_async.results }}" + loop_control: + loop_var: __users_job_async_result_item + when: __users_job_async_result_item.ansible_job_id is defined + no_log: "{{ ah_configuration_user_secure_logging }}" + vars: + ansible_async_dir: '{{ ah_configuration_async_dir }}' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/test.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/test.yml new file mode 100644 index 00000000..fee0955c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/test.yml @@ -0,0 +1,20 @@ +--- +- name: Add users to Automation Hub + hosts: localhost + connection: local + gather_facts: false + vars: + ah_validate_certs: false + # Define following vars here, or in ah_configs/ah_auth.yml + # ah_host: ansible-ah-web-svc-test-project.example.com + # ah_token: changeme + pre_tasks: + - name: Include vars from ah_configs directory + ansible.builtin.include_vars: + dir: ./vars + extensions: ["yml"] + tags: + - always + roles: + - ../../user +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/vars/users.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/vars/users.yml new file mode 100644 index 00000000..37e3938e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/roles/user/tests/vars/users.yml @@ -0,0 +1,13 @@ +--- +ah_users: + - username: user1 + groups: + - group1 + append: true + first_name: user + last_name: one + email: user1@example.com + is_superuser: false + password: p4ssword + state: present +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/README.md b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/README.md new file mode 100644 index 00000000..c9f4e6a6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/README.md @@ -0,0 +1,153 @@ +# Private Automation Hub Configuration Example Playbook + +A single playbook and multiple task and vars files which can be used to define your Private Automation Hub configuration as code. Update the vars files to define your objects and run the playbook to deploy your changes to your Private Automation Hub cluster(s). + +Use of some tags may require that you include other tags; for example if adding a collection but you haven't already added the correct collection namespace. + +Available tags: + +- groups +- users +- namespaces +- publish +- ee_images +- ee_namespaces +- registries +- indices +- regsync +- repos +- reposync + +## Requirements + +This content utilizes the ah_configuration collection. You will need connectivity to a Private Automation Hub server which has synchronized these collections or to the internet so that the collections can be installed. + +You will also need Private Automation Hub credentials with sufficient permissions to create the objects you define as code. This will need to be a local account within the cluster and not an externally authenticated account. + +## Variables + +`pah_configure.yml`: + + target_state + + I suggest leaving `target_state` set to "present". + +`vars/ah_collection_namespaces.yml`: + + ah_namespaces + + Dictionary of collection namespaces to create. One example exists that will need to be filled in. You can also copy / paste the example for additional namespace types. + +`vars/ah_collection_publish.yml`: + + ah_collections + + Dictionary of collections to publish. One example exists that will need to be filled in. You can also copy / paste the example for additional collections. + +`vars/ah_ee_images.yml`: + + ah_ee_images + + Dictionary of execution environment images to create. One example exists that will need to be filled in. You can also copy / paste the example for additional execution environments. + +`vars/ah_ee_namespaces.yml`: + + ah_ee_namespaces + + Dictionary of EE namespaces to create. One example exists that will need to be filled in. You can also copy / paste the example for additional EE namespaces. + +`vars/ah_ee_registries.yml`: + + ah_ee_registries + + Dictionary of EE registries to create. One example exists that will need to be filled in. You can also copy / paste the example for additional EE registries. + +`vars/ah_ee_registry_indices.yml`: + + ah_ee_registries + + Dictionary of EE registries to index. One example exists that will need to be filled in. You can also copy / paste the example for additional EE registries to index. + +`vars/ah_ee_registry_sync.yml`: + + ah_ee_registries + + Dictionary of EE registries to synchronize. One example exists that will need to be filled in. You can also copy / paste the example for additional EE registries to sync. + +`vars/ah_ee_repositories.yml`: + + ah_ee_repositories + + Dictionary of EE Repositories to create. One example exists that will need to be filled in. You can also copy / paste the example for additional EE Repositories. + +`vars/ah_ee_repository_sync.yml`: + + ah_ee_repositories + + Dictionary of EE Repositories to sync. One example exists that will need to be filled in. You can also copy / paste the example for additional EE Repositories to sync. + +`vars/ah_groups.yml`: + + ah_groups + + Dictionary of Groups to create. One example exists that will need to be filled in. You can also copy / paste the example for additional Groups. + +`vars/ah_users.yml`: + + ah_users + + Dictionary of users to create. One example exists that will need to be filled in. You can also copy / paste the example for additional users. + +`vars/pah_vars.yml`: + + ah_host: + + Hostname of an Automation Hub cluster you wish to configure. + + ah_username: + + Username to access the Automation Hub defined as `ah_host`. + + ah_password: + + Password for the user defined as `ah_password`. + + ah_token: + + Rather than username and password you can provide a token to use instead. + + validate_certs: false + + Whether or not to validate the certificates when connecting to private automation hub. This is false by default as Private Automation Hub installs with a self-signed certificate unless otherwise provided. + + ah_path_prefix: + + This is an optional variable. Review the ah_configuration for information on it's use. Omit if not needed. + +## Dependencies + +You will need the `ah_configuration` collection. + +## Playbook Execution + +You can run this playbook from ansible cli or as a Job Template (future use case) in AAP's Controller. + +From the command line to define all objects: + + ansible-playbook pah_configure.yml + + or just to create new job templates: + + ansible-playbook pah_configure.yml --tags namespaces + + or with ansible-navigator: + + ansible-navigator run pah_configure.yml + +## License + +BSD + +## Author Information + +[Tony Reveal](https://github.com/tonyreveal) diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/collections/requirements.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/collections/requirements.yml new file mode 100644 index 00000000..375f2d9f --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/collections/requirements.yml @@ -0,0 +1,4 @@ +--- +collections: + - name: galaxy.galaxy +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/config.yml new file mode 100644 index 00000000..6e0a73a1 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/config.yml @@ -0,0 +1,6 @@ +--- +# See template for more information: +# https://github.com/ansible/ansible/blob/devel/test/lib/ansible_test/config/config.yml +modules: + python_requires: '>=3.5' +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/pah_configure.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/pah_configure.yml new file mode 100644 index 00000000..0357b83e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/pah_configure.yml @@ -0,0 +1,80 @@ +--- +- name: Playbook to configure Private Automation Hub + hosts: localhost + connection: local + gather_facts: false + collections: + - galaxy.galaxy + + vars: + target_state: "present" + + pre_tasks: + - name: Include Vars + ansible.builtin.include_vars: vars/pah_vars.yml + tags: + - always + + tasks: + - name: Include task to manage ansible_config + ansible.builtin.include_tasks: tasks/manage_ansible_config.yml + tags: + - ansible_config + + - name: Include task to manage private automation hub groups + ansible.builtin.include_tasks: tasks/manage_groups.yml + tags: + - groups + + - name: Include task to manage private automation hub users + ansible.builtin.include_tasks: tasks/manage_users.yml + tags: + - users + + # All tasks below here may need to be re-ordered so they + # execute in a particular order. + - name: Include task for managing collection namespaces + ansible.builtin.include_tasks: tasks/manage_collection_namespaces.yml + tags: + - namespaces + + - name: Include task for collection publishing + ansible.builtin.include_tasks: tasks/manage_collection_publish.yml + tags: + - publish + + - name: Include task for execution environment images + ansible.builtin.include_tasks: tasks/manage_ee_images.yml + tags: + - ee_images + + - name: Include task to manage execution environment namespaces + ansible.builtin.include_tasks: tasks/manage_ee_namespaces.yml + tags: + - ee_namespaces + + - name: Include task to manage execution environment registries + ansible.builtin.include_tasks: tasks/manage_ee_registries.yml + tags: + - registries + + - name: Include task to manage execution environment registry indices + ansible.builtin.include_tasks: tasks/manage_ee_registry_indices.yml + tags: + - indices + + - name: Include task to manage execution environment registry sync + ansible.builtin.include_tasks: tasks/manage_ee_registry_sync.yml + tags: + - regsync + + - name: Include task to manage execution environment repositories + ansible.builtin.include_tasks: tasks/manage_ee_repositories.yml + tags: + - repos + + - name: Include task to manage execution environment repository sync + ansible.builtin.include_tasks: tasks/manage_ee_repository_sync.yml + tags: + - reposync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ansible_config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ansible_config.yml new file mode 100644 index 00000000..1a6135c9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ansible_config.yml @@ -0,0 +1,16 @@ +--- +automation_hub_list: + - name: automation_hub + url: "{{ ah_hostname }}" + auth_url: "{{ ah_hostname }}api/galaxy/" # {{ah_hostname}}api/galaxy/ for AH {{ah_hostname}}api/automation-hub/ for Galaxy + +ansible_config_list: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{% if validate_certs %}false{% else %}true{% endif %}" + - key: server_list + value: "automation_hub" + +ah_configuration_working_dir: "test" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_auth.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_auth.yml new file mode 100644 index 00000000..8c07ad07 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_auth.yml @@ -0,0 +1,14 @@ +# User may add tower auth creds to this file and encrypt it using `ansible-vault` +--- +ah_hostname: "{{ lookup('ansible.builtin.env', 'AH_HOST') }}" +ah_username: "{{ lookup('ansible.builtin.env', 'AH_USERNAME') }}" +ah_passowrd: "{{ lookup('ansible.builtin.env', 'AH_PASSWORD') }}" +# ah_hostname: http://localhost:55001/ # http://192.168.122.47:55001/ http://localhost:55001/ https://192.168.122.200/ +# ah_username: "{% if galaxy_ng_version == 'stable-4.4' or galaxy_ng_version == 'stable-4.5' or galaxy_ng_version == 'stable-4.6' %}admin{% else %}iqe_admin{% endif %}" +# ah_password: "{% if galaxy_ng_version == 'stable-4.4' or galaxy_ng_version == 'stable-4.5' or galaxy_ng_version == 'stable-4.6' %}admin{% else %}redhat{% endif %}" +# ah_username: admin +# ah_password: admin +ah_validate_certs: false +ah_path_prefix: 'galaxy' # AH: galaxy Galaxy: automation-hub +ah_configuration_namespace_secure_logging: false +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_collections.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_collections.yml new file mode 100644 index 00000000..f9598c8e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_collections.yml @@ -0,0 +1,40 @@ +--- +ah_collections: + - namespace: galaxy + name: galaxy + path: "/home/runner/work/{{ git_repo_name }}/{{ git_repo_name }}/galaxy-galaxy-1.0.0.tar.gz" + wait: true + interaval: 5 + auto_approve: true + timeout: 180 + - namespace: infra + name: aap_utilities + path: /var/tmp/aap_utilities/infra-aap_utilities-2.3.0-devel.tar.gz + wait: true + interaval: 5 + auto_approve: true + timeout: 180 + +ah_collections_overwrite: + - namespace: galaxy + name: galaxy + path: "/home/runner/work/{{ git_repo_name }}/{{ git_repo_name }}/galaxy-galaxy-1.0.0.tar.gz" + wait: true + interaval: 5 + auto_approve: true + timeout: 180 + overwrite_existing: true + +ah_collections_delete: + - namespace: galaxy + name: galaxy + state: absent + +ah_git_collections: + - collection_name: collection_test + git_url: https://github.com/sean-m-sullivan/collection_test + +ansible_config_path: "{{ ah_configuration_working_dir }}/ansible.cfg" +ah_configuration_collection_async_retries: 100 +ah_configuration_collection_async_delay: 10 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ee_repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ee_repositories.yml new file mode 100644 index 00000000..90de4a1a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_ee_repositories.yml @@ -0,0 +1,49 @@ +--- +ah_configuration_ee_registry_sync_async_delay: 20 +ah_ee_registries: + - name: quay + url: https://quay.io/ + rate_limit: 100 + download_concurrency: 25 + tls_validation: false + - name: redhat + url: https://registry.redhat.io/ + username: "{{ redhat_catalog_username }}" + password: "{{ redhat_catalog_password }}" + rate_limit: 100000 + download_concurrency: 25 + index: true + sync: true + tls_validation: false + interval: 20 + timeout: 1100 +ah_ee_repositories: + # Adding a Remote repository + - name: config_as_code_ee + description: The infra config as code official EE + registry: quay + upstream_name: redhat_cop/config_as_code_ee + include_tags: + - latest + - test_include + exclude_tags: + - test_exclude + sync: true + wait: true + interval: 5 + timeout: 600 + # Adding a description and a README file to the repository + - name: local/http-test-container + # Testing with UTF-8 characters + registry: quay + upstream_name: "{{ fake_image }}" + included_tags: + - main + - 2.0.0 + description: To jest jakiś opis + readme: | + # Min avrättningsmiljö + + * bullet 1 + * bullet 2 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_group_roles.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_group_roles.yml new file mode 100644 index 00000000..f120c437 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_group_roles.yml @@ -0,0 +1,36 @@ +--- +ah_group_roles: + - state: present + groups: + - santa + - group1 + role_list: + - roles: + - container.containerdistribution_owner + targets: + execution_environments: + - redhat_cop/config_as_code_ee + - roles: + - galaxy.container_remote + targets: + container_registery_remotes: + - quay + - roles: + - galaxy.user_admin + - galaxy.group_admin + - roles: + - galaxy.ansible_repository_owner + targets: + collection_repositories: + - validated + - roles: + - galaxy.collection_remote_owner + targets: + collection_remotes: + - community + - roles: + - galaxy.collection_namespace_owner + targets: + collection_namespaces: + - autohubtest2 +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_namespaces.yml new file mode 100644 index 00000000..d21e620c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_namespaces.yml @@ -0,0 +1,17 @@ +--- +ah_namespaces: + - name: community_test + company: Community Test + email: user@example.com + avatar_url: https://github.com/ansible/awx-logos/blob/master/awx/ui/client/assets/logo-header.svg + description: string + resources: "# Community\nA Namespace test with changes" + links: + - name: "Nothing" + url: "https://github.com/ansible/awx" + groups: + - system:partner-engineers + - name: infra + - name: test_namespace + - name: galaxy +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_repository.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_repository.yml new file mode 100644 index 00000000..54c58564 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_repository.yml @@ -0,0 +1,47 @@ +--- +ah_configuration_repository_sync_async_delay: 5 +ah_configuration_repository_sync_async_retries: 150 +ah_repositories: + - name: community + url: https://beta-galaxy.ansible.com/ + requirements: + - name: infra.ee_utilities + - name: infra.controller_configuration + wait: true + interval: 25 + timeout: 1000000 + +# newer version +ah_configuration_collection_repository_async_delay: 5 +ah_configuration_collection_repository_async_retries: 150 +ah_configuration_collection_repository_sync_async_delay: 5 +ah_configuration_collection_repository_sync_async_retries: 150 +ah_collection_remotes: + - name: community-infra + url: https://beta-galaxy.ansible.com/ + requirements: + - name: infra.ee_utilities + - name: infra.controller_configuration + +ah_collection_repositories: + - name: community-infra-repo + description: "description of community-infra repository" + pulp_labels: + pipeline: "approved" + distribution: + state: present + remote: community-infra + - name: community-infra-repo-nodistro + description: "description of community-infra repository" + pulp_labels: + pipeline: "approved" + remote: community-infra + - name: community-infra-repo-noremote + description: "description of community-infra repository" + pulp_labels: + pipeline: "approved" + distribution: + state: present + - name: community-infra-repo-nothing + description: "description of community-infra repository" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_roles.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_roles.yml new file mode 100644 index 00000000..c4055da8 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_roles.yml @@ -0,0 +1,14 @@ +--- +ah_roles: + - name: galaxy.stuff.mcstuffins + description: test + perms: + - add_user + - change_user + - delete_user + - view_user + - add_ansiblerepository + - add_collectionremote + - name: galaxy.stuff.mcstuffins + state: absent +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_user.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_user.yml new file mode 100644 index 00000000..79b272fb --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/ah_configs/ah_user.yml @@ -0,0 +1,46 @@ +--- +ah_users: + # Ensure user operator1 exists (no group, no details) + - username: operator1 + # Ensure user admin1 exists (all details, two groups) + - username: admin1 + # Testing with UTF-8 characters + first_name: Czesława + last_name: Dąbrowski + email: cdabrowski@example.com + password: vs9mrD55NP + groups: + - operators + - administrators + # Testing group membership + - username: operator1 + groups: operators + state: present + +ah_users_update: + # Testing user update + - username: admin1 + first_name: Róża + is_superuser: true + # Ensure operator1 is member of group operators and managers + - username: operator1 + groups: + - managers + append: true + # Ensure operator1 is member of group administrators only + - username: operator1 + groups: + - administrators + append: false + # Ensure operator1 is member of no group + - username: operator1 + groups: [] + append: false + # Testing password change + - username: operator1 + password: test123456 + +ah_users_delete: + - username: operator1 + state: absent +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/files/collection_requirement_file.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/files/collection_requirement_file.yml new file mode 100644 index 00000000..08ced277 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/playbooks/files/collection_requirement_file.yml @@ -0,0 +1,6 @@ +--- +collections: + - name: infra.ee_utilities + - name: infra.controller_configuration + - name: ansible.windows +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/files/ansible.cfg.example b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/files/ansible.cfg.example new file mode 100644 index 00000000..9cddcd54 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/files/ansible.cfg.example @@ -0,0 +1,8 @@ +[galaxy] +ignore_certs=True +server_list=automation_hub + +[galaxy_server.automation_hub] +url=https://ah.local +auth_url=https://auth.com +token=changeme diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ansible_config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ansible_config.yml new file mode 100644 index 00000000..e8a875fe --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ansible_config.yml @@ -0,0 +1,31 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ansible_config.yml + tags: + - ansible_config + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ansible_config + tags: + - ansible_config + +- name: Assert correct config file created + ansible.builtin.copy: + src: ansible.cfg.example + dest: "{{ ah_configuration_working_dir }}/ansible.cfg" + owner: "{{ ansible_config_owner | default(omit) }}" + group: "{{ ansible_config_group | default(omit) }}" + mode: "{{ ansible_config_mode }}" + check_mode: true + register: ansible_config_output + tags: + - ansible_config + +- name: Check file hasn't changed + ansible.builtin.assert: + that: + - not (ansible_config_output.changed | bool) + tags: + - ansible_config +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_namespaces.yml new file mode 100644 index 00000000..60cbaab6 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_namespaces.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_collection_namespaces.yml + tags: + - namespaces + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.namespace + tags: + - namespaces +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_publish.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_publish.yml new file mode 100644 index 00000000..9b5d2d7b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_collection_publish.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_collection_publish.yml + tags: + - publish + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.publish + tags: + - publish +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_images.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_images.yml new file mode 100644 index 00000000..a62bfc79 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_images.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_images.yml + tags: + - ee_images + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_image + tags: + - ee_images +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_namespaces.yml new file mode 100644 index 00000000..94fb3d74 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_namespaces.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_namespaces.yml + tags: + - ee_namespaces + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_namespace + tags: + - ee_namespaces +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registries.yml new file mode 100644 index 00000000..ea84175e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registries.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_registries.yml + tags: + - registries + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_registry + tags: + - registries +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_indices.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_indices.yml new file mode 100644 index 00000000..fbdc6e8a --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_indices.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_registry_indices.yml + tags: + - indices + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_registry_index + tags: + - indices +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_sync.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_sync.yml new file mode 100644 index 00000000..d4ea79c9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_registry_sync.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_registry_sync.yml + tags: + - regsync + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_registry_sync + tags: + - regsync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repositories.yml new file mode 100644 index 00000000..a13ad063 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repositories.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_repositories.yml + tags: + - repos + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_repository + tags: + - repos +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repository_sync.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repository_sync.yml new file mode 100644 index 00000000..8fedac5c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_ee_repository_sync.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_ee_repository_sync.yml + tags: + - reposync + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.ee_repository_sync + tags: + - reposync +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_groups.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_groups.yml new file mode 100644 index 00000000..a52b4d7d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_groups.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_groups.yml + tags: + - groups + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.group + tags: + - groups +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_users.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_users.yml new file mode 100644 index 00000000..df0a9acc --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/tasks/manage_users.yml @@ -0,0 +1,12 @@ +--- +- name: Include vars + ansible.builtin.include_vars: ../vars/ah_users.yml + tags: + - users + +- name: Import ah_configuration role + ansible.builtin.import_role: + name: galaxy.galaxy.user + tags: + - users +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ansible_config.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ansible_config.yml new file mode 100644 index 00000000..9ee6611e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ansible_config.yml @@ -0,0 +1,20 @@ +--- +ansible_config_list: + - header: galaxy + keypairs: + - key: ignore_certs + value: "{{ not (ah_validate_certs | bool) }}" + - key: server_list + value: "{{ automation_hub_list | map(attribute='name') | join(',') }}" + +automation_hub_list: + - name: automation_hub + url: "{{ ah_host }}" + auth_url: https://auth.com + token: changeme + +ah_host: https://ah.local +ah_validate_certs: false +ah_configuration_working_dir: /var/tmp + +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_namespaces.yml new file mode 100644 index 00000000..169950e9 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_namespaces.yml @@ -0,0 +1,16 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/namespace +# for documentation and additional parameter information + +--- +ah_namespaces: + - name: + new_name: + description: + company: + email: + avatar_url: + resources: + links: + groups: + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_publish.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_publish.yml new file mode 100644 index 00000000..fac12606 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_collection_publish.yml @@ -0,0 +1,10 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/publish +# for documentation and additional parameter information + +--- +ah_collections: + - collection_name: + git_url: + version: + collection_local_path: +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_images.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_images.yml new file mode 100644 index 00000000..fcca6a32 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_images.yml @@ -0,0 +1,12 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_image +# for documentation and additional parameter information + +--- +ah_ee_images: + - name: + state: "{{ target_state }}" + append: false + tags: + - "latest" + - "v1.0.0" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_namespaces.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_namespaces.yml new file mode 100644 index 00000000..bde9c8f2 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_namespaces.yml @@ -0,0 +1,12 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_namespace +# for documentation and additional parameter information + +--- +ah_ee_namespaces: + - name: + append: + groups: + - + - + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registries.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registries.yml new file mode 100644 index 00000000..7ac8f94d --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registries.yml @@ -0,0 +1,18 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_registry +# for documentation and additional parameter information + +--- +ah_ee_registries: + - name: + new_name: + url: + username: + password: + tls_validation: + proxy_url: + proxy_username: + proxy_password: + download_concurrency: + rate_limit: + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_indices.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_indices.yml new file mode 100644 index 00000000..15fb776b --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_indices.yml @@ -0,0 +1,10 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_registry_index +# for documentation and additional parameter information + +--- +ah_ee_registries: + - name: + wait: true + interval: + timeout: +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_sync.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_sync.yml new file mode 100644 index 00000000..247e103e --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_registry_sync.yml @@ -0,0 +1,10 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_registry_sync +# for documentation and additional parameter information + +--- +ah_ee_registries: + - name: + wait: + interval: + timeout: +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repositories.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repositories.yml new file mode 100644 index 00000000..c7c880d5 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repositories.yml @@ -0,0 +1,11 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_repository +# for documentation and additional parameter information + +--- +ah_ee_repositories: + - name: + description: + readme: + readme_file: + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repository_sync.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repository_sync.yml new file mode 100644 index 00000000..17ce5a65 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_ee_repository_sync.yml @@ -0,0 +1,10 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/ee_repository_sync +# for documentation and additional parameter information + +--- +ah_ee_repositories: + - name: + wait: + interval: + timeout: +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_groups.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_groups.yml new file mode 100644 index 00000000..dab6bf17 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_groups.yml @@ -0,0 +1,9 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/group +# for documentation and additional parameter information + +--- +ah_groups: + - name: + perms: + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_users.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_users.yml new file mode 100644 index 00000000..eab52f53 --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/ah_users.yml @@ -0,0 +1,16 @@ +# Refer to https://github.com/redhat-cop/ah_configuration/tree/devel/roles/user +# for documentation and additional parameter information + +--- +ah_users: + - username: + groups: + - "" + append: true + first_name: + last_name: + email: + is_superuser: false + password: + state: "{{ target_state }}" +... diff --git a/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/pah_vars.yml b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/pah_vars.yml new file mode 100644 index 00000000..91fcbb6c --- /dev/null +++ b/.ansible/collections/ansible_collections/galaxy/galaxy/tests/vars/pah_vars.yml @@ -0,0 +1,8 @@ +--- +ah_host: +ah_username: +ah_password: +ah_token: +ah_validate_certs: false +ah_path_prefix: "" # Not required. API path to access the API. Either galaxy, automation-hub, or custom. +... diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 890e92e3..b774ac07 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: - id: end-of-file-fixer - id: trailing-whitespace - repo: 'https://github.com/ansible-community/ansible-lint.git' - rev: v24.12.2 + rev: v25.1.3 hooks: # see discussions here about what arguments are used, and behavior # https://github.com/ansible/ansible-lint/issues/649 @@ -19,11 +19,11 @@ repos: args: - "--profile=production" - repo: https://github.com/DavidAnson/markdownlint-cli2 - rev: v0.17.1 + rev: v0.17.2 hooks: - id: markdownlint-cli2 - repo: https://github.com/pycqa/flake8 - rev: 7.1.1 + rev: 7.1.2 hooks: - id: flake8 name: flake8