From fc1f31ad42d82c8946020cecb28dc44177563434 Mon Sep 17 00:00:00 2001 From: Griffin Sullivan <48397354+Griffin-Sullivan@users.noreply.github.com> Date: Wed, 21 Feb 2024 07:29:03 -0500 Subject: [PATCH 1/2] Integrate FAM pipeline into robottelo (#14028) (cherry picked from commit 7aca395efcc61aa74809491d02e1c7e1175d36f3) --- robottelo/constants/__init__.py | 119 +++++++++++++++++++++++++++++++- tests/foreman/sys/test_fam.py | 63 ++++++++++++++++- 2 files changed, 178 insertions(+), 4 deletions(-) diff --git a/robottelo/constants/__init__.py b/robottelo/constants/__init__.py index eb7eb6e6317..c241310618e 100644 --- a/robottelo/constants/__init__.py +++ b/robottelo/constants/__init__.py @@ -1884,9 +1884,122 @@ class Colored(Box): "user", ] -FAM_MODULE_PATH = ( - '/usr/share/ansible/collections/ansible_collections/redhat/satellite/plugins/modules' -) +FAM_TEST_PLAYBOOKS = [ + "activation_keys_role", + "activation_key", + "architecture", + "auth_source_ldap", + "auth_sources_ldap_role", + "bookmark", + "compute_attribute", + "compute_profile_ovirt", + "compute_profiles_role", + "compute_profile", + "compute_resources_role", + "compute_resource", + "config_group", + "content_credentials_role", + "content_credential", + "content_export_info", + "content_export_library", + "content_export_repository", + "content_export_version", + "content_rhel_role", + "content_upload_ostree", + "content_upload", + "content_view_filter_info", + "content_view_filter_rule_info", + "content_view_filter_rule", + "content_view_filter", + "content_view_info", + "content_view_publish_role", + "content_views_role", + "content_view_version_cleanup_role", + "content_view_version_info", + "content_view_version", + "content_view", + "convert2rhel", + "discovery_rule", + "domain_info", + "domains_role", + "domain", + "external_usergroup", + "filters", + "global_parameter", + "hardware_model", + "host_collection", + "host_errata_info", + "hostgroup_info", + "hostgroups_role", + "hostgroup", + "host_info", + "host_interface_attributes", + "host_power", + "host", + "http_proxy", + "image", + "installation_medium", + "inventory_plugin_ansible", + "inventory_plugin", + "job_invocation", + "job_template", + "katello_hostgroup", + "katello_smart_proxy", + "lifecycle_environments_role", + "lifecycle_environment", + "locations_role", + "location", + "luna_hostgroup", + "manifest_role", + "module_defaults", + "operatingsystems_role", + "operatingsystem", + "organization_info", + "organizations_role", + "organization", + "os_default_template", + "partition_table", + "product", + "provisioning_templates_role", + "provisioning_template", + "puppetclasses_import", + "puppet_environment", + "realm", + "redhat_manifest", + "repositories_role", + "repository_info", + "repository_ostree", + "repository_set_info", + "repository_set", + "repository_sync", + "repository", + "resource_info", + "role", + "scap_content", + "scap_tailoring_file", + "setting_info", + "settings_role", + "setting", + "smart_class_parameter_override_value", + "smart_class_parameter", + "smart_proxy", + "status_info", + "subnet_info", + "subnets_role", + "subnet", + "subscription_info", + "subscription_manifest", + "sync_plans_role", + "sync_plan", + "templates_import", + "usergroup", + "user", + "wait_for_task", +] + +FAM_ROOT_DIR = '/usr/share/ansible/collections/ansible_collections/redhat/satellite' + +FAM_MODULE_PATH = f'{FAM_ROOT_DIR}/plugins/modules' RH_SAT_ROLES = [ 'activation_keys', diff --git a/tests/foreman/sys/test_fam.py b/tests/foreman/sys/test_fam.py index ebc9d155769..1a0d6a92b81 100644 --- a/tests/foreman/sys/test_fam.py +++ b/tests/foreman/sys/test_fam.py @@ -11,9 +11,17 @@ :Team: Platform """ +from broker import Broker import pytest -from robottelo.constants import FAM_MODULE_PATH, FOREMAN_ANSIBLE_MODULES, RH_SAT_ROLES +from robottelo.config import settings +from robottelo.constants import ( + FAM_MODULE_PATH, + FAM_ROOT_DIR, + FAM_TEST_PLAYBOOKS, + FOREMAN_ANSIBLE_MODULES, + RH_SAT_ROLES, +) @pytest.fixture @@ -32,6 +40,42 @@ def sync_roles(target_sat): target_sat.cli.Ansible.roles_delete({'id': role_id}) +@pytest.fixture(scope='module') +def setup_fam(module_target_sat, module_sca_manifest): + # Execute AAP WF for FAM setup + Broker().execute(workflow='fam-test-setup', source_vm=module_target_sat.name) + + # Edit Makefile to not try to rebuild the collection when tests run + module_target_sat.execute(f"sed -i '/^live/ s/$(MANIFEST)//' {FAM_ROOT_DIR}/Makefile") + + # Upload manifest to test playbooks directory + module_target_sat.put(module_sca_manifest.path, module_sca_manifest.name) + module_target_sat.execute( + f'mv {module_sca_manifest.name} {FAM_ROOT_DIR}/tests/test_playbooks/data' + ) + + # Edit config file + config_file = f'{FAM_ROOT_DIR}/tests/test_playbooks/vars/server.yml' + module_target_sat.execute( + f'cp {FAM_ROOT_DIR}/tests/test_playbooks/vars/server.yml.example {config_file}' + ) + module_target_sat.execute( + f'sed -i "s/foreman.example.com/{module_target_sat.hostname}/g" {config_file}' + ) + module_target_sat.execute( + f'sed -i "s/rhsm_pool_id:.*/rhsm_pool_id: {settings.subscription.rhn_poolid}/g" {config_file}' + ) + module_target_sat.execute( + f'''sed -i 's/rhsm_username:.*/rhsm_username: "{settings.subscription.rhn_username}"/g' {config_file}''' + ) + module_target_sat.execute( + f'''sed -i 's|subscription_manifest_path:.*|subscription_manifest_path: "data/{module_sca_manifest.name}"|g' {config_file}''' + ) + module_target_sat.execute( + f'''sed -i 's/rhsm_password:.*/rhsm_password: "{settings.subscription.rhn_password}"/g' {config_file}''' + ) + + @pytest.mark.pit_server @pytest.mark.run_in_one_thread def test_positive_ansible_modules_installation(target_sat): @@ -71,3 +115,20 @@ def test_positive_import_run_roles(sync_roles, target_sat): target_sat.cli.Host.ansible_roles_assign({'ansible-roles': roles, 'name': target_sat.hostname}) play = target_sat.cli.Host.ansible_roles_play({'name': target_sat.hostname}) assert 'Ansible roles are being played' in play[0]['message'] + + +@pytest.mark.e2e +@pytest.mark.parametrize('ansible_module', FAM_TEST_PLAYBOOKS) +def test_positive_run_modules_and_roles(module_target_sat, setup_fam, ansible_module): + """Run all FAM modules and roles on the Satellite + + :id: b595756f-627c-44ea-b738-aa17ff5b1d39 + + :expectedresults: All modules and roles run successfully + """ + # Execute test_playbook + result = module_target_sat.execute( + f'export NO_COLOR=True && . ~/localenv/bin/activate && cd {FAM_ROOT_DIR} && make livetest_{ansible_module}' + ) + assert 'PASSED' in result.stdout + assert result.status == 0 From 276e08b7610868985288739207b4a6bc4de0f1f3 Mon Sep 17 00:00:00 2001 From: Griffin-Sullivan Date: Fri, 1 Mar 2024 09:38:39 -0500 Subject: [PATCH 2/2] Fix manifest file transer for fam --- tests/foreman/sys/test_fam.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/foreman/sys/test_fam.py b/tests/foreman/sys/test_fam.py index 1a0d6a92b81..f4500a2b599 100644 --- a/tests/foreman/sys/test_fam.py +++ b/tests/foreman/sys/test_fam.py @@ -49,7 +49,7 @@ def setup_fam(module_target_sat, module_sca_manifest): module_target_sat.execute(f"sed -i '/^live/ s/$(MANIFEST)//' {FAM_ROOT_DIR}/Makefile") # Upload manifest to test playbooks directory - module_target_sat.put(module_sca_manifest.path, module_sca_manifest.name) + module_target_sat.put(str(module_sca_manifest.path), str(module_sca_manifest.name)) module_target_sat.execute( f'mv {module_sca_manifest.name} {FAM_ROOT_DIR}/tests/test_playbooks/data' )