From 4d8eda42bca4236f66e8e626b9acc52c22670473 Mon Sep 17 00:00:00 2001 From: Jeremy Lenz Date: Thu, 6 Nov 2025 10:43:31 -0500 Subject: [PATCH 1/2] Remove remaining subscription attachment references Since SCA (Simple Content Access) is now the default mode for all organizations, subscription attachment to activation keys and hosts is no longer needed or possible. This completes the cleanup started in PR #19931. Changes: - Remove activationkey_add_subscription_to_repo() helper (unused) - Remove ActivationKey.add_subscription(), remove_subscription(), subscriptions() - Remove Host.subscription_attach() and subscription_remove() - Remove stubbed test_positive_candlepin_events_processed_by_STOMP - Remove is_sca_mode_enabled() references from helpers and tests - Remove conditional subscription attachment code from setup helpers - Clean up subscription attachment checks from test_sca_end_to_end 12 files changed, 5 insertions(+), 228 deletions(-) --- robottelo/cli/activationkey.py | 18 -------- robottelo/cli/host.py | 39 ----------------- robottelo/host_helpers/cli_factory.py | 48 --------------------- robottelo/host_helpers/repository_mixins.py | 47 ++------------------ robottelo/hosts.py | 18 +------- tests/foreman/api/test_subscription.py | 15 ------- tests/foreman/cli/test_rhcloud_iop.py | 2 - tests/foreman/cli/test_subscription.py | 26 ----------- tests/new_upgrades/test_errata.py | 5 --- tests/new_upgrades/test_repository.py | 5 --- tests/upgrades/test_errata.py | 5 --- tests/upgrades/test_repository.py | 5 --- 12 files changed, 5 insertions(+), 228 deletions(-) diff --git a/robottelo/cli/activationkey.py b/robottelo/cli/activationkey.py index 8a58b2f7bb2..521c1d46674 100644 --- a/robottelo/cli/activationkey.py +++ b/robottelo/cli/activationkey.py @@ -40,12 +40,6 @@ def add_host_collection(cls, options=None): cls.command_sub = 'add-host-collection' return cls.execute(cls._construct_command(options)) - @classmethod - def add_subscription(cls, options=None): - """Add subscription""" - cls.command_sub = 'add-subscription' - return cls.execute(cls._construct_command(options)) - @classmethod def content_override(cls, options=None): """Override product content defaults""" @@ -81,15 +75,3 @@ def remove_repository(cls, options=None): """Disassociate a resource""" cls.command_sub = 'remove-repository' return cls.execute(cls._construct_command(options)) - - @classmethod - def remove_subscription(cls, options=None): - """Remove subscription""" - cls.command_sub = 'remove-subscription' - return cls.execute(cls._construct_command(options)) - - @classmethod - def subscriptions(cls, options=None, output_format=None): - """List associated subscriptions""" - cls.command_sub = 'subscriptions' - return cls.execute(cls._construct_command(options), output_format=output_format) diff --git a/robottelo/cli/host.py b/robottelo/cli/host.py index e82f89af49c..ac5ddb506b4 100644 --- a/robottelo/cli/host.py +++ b/robottelo/cli/host.py @@ -407,45 +407,6 @@ def subscription_unregister(cls, options=None): cls.command_sub = 'subscription unregister' return cls.execute(cls._construct_command(options)) - @classmethod - def subscription_attach(cls, options=None): - """Attach a subscription to host - - Usage:: - - hammer host subscription attach [OPTIONS] - - Options:: - - --host HOST_NAME Name to search by - --host-id HOST_ID Host ID - --quantity Quantity Quantity of this subscriptions to - add. Defaults to 1 - --subscription-id SUBSCRIPTION_ID ID of subscription - """ - cls.command_sub = 'subscription attach' - return cls.execute(cls._construct_command(options)) - - @classmethod - def subscription_remove(cls, options=None): - """Remove a subscription from host - - Usage:: - - hammer host subscription remove [OPTIONS] - - Options:: - - --host HOST_NAME Name to search by - --host-id HOST_ID - --quantity Quantity Remove the first instance of a - subscription with matching id - and quantity - --subscription-id SUBSCRIPTION_ID ID of subscription - """ - cls.command_sub = 'subscription remove' - return cls.execute(cls._construct_command(options)) - @classmethod def sc_params(cls, options=None): """List all smart class parameters diff --git a/robottelo/host_helpers/cli_factory.py b/robottelo/host_helpers/cli_factory.py index 637de8cb926..9d12deb6936 100644 --- a/robottelo/host_helpers/cli_factory.py +++ b/robottelo/host_helpers/cli_factory.py @@ -546,34 +546,6 @@ def make_template(self, options=None): return create_object(self._satellite.cli.Template, args, options) - def activationkey_add_subscription_to_repo(self, options=None): - """Helper function that adds subscription to an activation key""" - # List the subscriptions in given org - subscriptions = self._satellite.cli.Subscription.list( - {'organization-id': options['organization-id']}, per_page=False - ) - # Add subscription to activation-key - if options['subscription'] not in (sub['name'] for sub in subscriptions): - raise CLIFactoryError( - 'Subscription {} not found in the given org'.format(options['subscription']) - ) - for subscription in subscriptions: - if subscription['name'] == options['subscription']: - if subscription['quantity'] != 'Unlimited' and int(subscription['quantity']) == 0: - raise CLIFactoryError('All the subscriptions are already consumed') - try: - self._satellite.cli.ActivationKey.add_subscription( - { - 'id': options['activationkey-id'], - 'subscription-id': subscription['id'], - 'quantity': 1, - } - ) - except CLIReturnCodeError as err: - raise CLIFactoryError( - f'Failed to add subscription to activation key\n{err.msg}' - ) from err - def override_repos_for_activation_key(self, ak_id, repos, value=True): """Hammer override satellite repo(s) to value for Activation Key. @@ -722,15 +694,6 @@ def setup_org_for_a_custom_repo(self, options=None): f'Failed to associate activation-key with CV\n{err.msg}' ) from err - # Add custom_product subscription to activation-key, if SCA mode is disabled - if self._satellite.is_sca_mode_enabled(org_id) is False: - self.activationkey_add_subscription_to_repo( - { - 'activationkey-id': activationkey_id, - 'organization-id': org_id, - 'subscription': custom_product['name'], - } - ) # Override custom product to true ( turned off by default in 6.14 ) custom_repo = self._satellite.cli.Repository.info({'id': custom_repo['id']}) self._satellite.cli.ActivationKey.content_override( @@ -874,17 +837,6 @@ def _setup_org_for_a_rh_repo(self, options=None, force=False): f'Failed to associate activation-key with CV\n{err.msg}' ) from err - # Add default subscription to activation-key, if SCA mode is disabled - if self._satellite.is_sca_mode_enabled(org_id) is False: - self.activationkey_add_subscription_to_repo( - { - 'organization-id': org_id, - 'activationkey-id': activationkey_id, - 'subscription': options.get( - 'subscription', constants.DEFAULT_SUBSCRIPTION_NAME - ), - } - ) # Override RHST product to true ( turned off by default in 6.14 ) rhel_repo = self._satellite.cli.Repository.info({'id': rhel_repo['id']}) self._satellite.cli.ActivationKey.content_override( diff --git a/robottelo/host_helpers/repository_mixins.py b/robottelo/host_helpers/repository_mixins.py index 5d99fe0b6aa..180ae9fbfa8 100644 --- a/robottelo/host_helpers/repository_mixins.py +++ b/robottelo/host_helpers/repository_mixins.py @@ -716,34 +716,6 @@ def setup_activation_key( 'value': int(override), } ) - if self.satellite.is_sca_mode_enabled(org_id): - return activation_key - # Add subscriptions to activation-key - # Get organization subscriptions - subscriptions = self.satellite.cli.Subscription.list( - {'organization-id': org_id}, per_page=False - ) - added_subscription_names = [] - for subscription in subscriptions: - if ( - subscription['name'] in subscription_names - and subscription['name'] not in added_subscription_names - ): - self.satellite.cli.ActivationKey.add_subscription( - { - 'id': activation_key['id'], - 'subscription-id': subscription['id'], - 'quantity': 1, - } - ) - added_subscription_names.append(subscription['name']) - if len(added_subscription_names) == len(subscription_names): - break - missing_subscription_names = set(subscription_names).difference( - set(added_subscription_names) - ) - if missing_subscription_names: - raise ValueError(f'Missing subscriptions: {missing_subscription_names}') return activation_key def organization_has_manifest(self, organization_id): @@ -781,22 +753,9 @@ def setup_content( rh_subscriptions = [constants.DEFAULT_SUBSCRIPTION_NAME] custom_product, repos_info = self.setup(org_id=org_id, download_policy=download_policy) content_view, lce = self.setup_content_view(org_id, lce_id) - custom_product_name = custom_product['name'] if custom_product else None - subscription_names = list(rh_subscriptions) - if custom_product_name: - subscription_names.append(custom_product_name) - if not self.satellite.is_sca_mode_enabled(org_id): - activation_key = self.setup_activation_key( - org_id, - content_view['id'], - lce_id, - subscription_names=subscription_names, - override=override, - ) - else: - activation_key = self.setup_activation_key( - org_id, content_view['id'], lce_id, override=override - ) + activation_key = self.setup_activation_key( + org_id, content_view['id'], lce_id, override=override + ) setup_content_data = dict( activation_key=activation_key, content_view=content_view, diff --git a/robottelo/hosts.py b/robottelo/hosts.py index 33bed747cf2..bceacabe35a 100644 --- a/robottelo/hosts.py +++ b/robottelo/hosts.py @@ -2481,22 +2481,8 @@ def register_host_custom_repo(self, module_org, rhel_contenthost, repo_urls): rhsm_id = rhel_contenthost.execute('subscription-manager identity') assert module_org.name in rhsm_id.stdout, 'Host is not registered to expected organization' rhel_contenthost._satellite = self - - # Attach product subscriptions to contenthost, only if SCA mode is disabled - if self.is_sca_mode_enabled(module_org.id) is False: - subs = self.api.Subscription(organization=module_org, name=prod.name).search() - assert len(subs), f'Subscription for sat client product: {prod.name} was not found.' - subscription = subs[0] - - rhel_contenthost.nailgun_host.bulk_add_subscriptions( - data={ - "organization_id": module_org.id, - "included": {"ids": [rhel_contenthost.nailgun_host.id]}, - "subscriptions": [{"id": subscription.id, "quantity": 1}], - } - ) - # refresh repository metadata on the host - rhel_contenthost.execute('subscription-manager repos --list') + # refresh repository metadata on the host + rhel_contenthost.execute('subscription-manager repos --list') # Override the repos to enabled rhel_contenthost.execute(r'subscription-manager repos --enable \*') diff --git a/tests/foreman/api/test_subscription.py b/tests/foreman/api/test_subscription.py index efcc363e864..f6dc299bb5b 100644 --- a/tests/foreman/api/test_subscription.py +++ b/tests/foreman/api/test_subscription.py @@ -23,11 +23,9 @@ from nailgun.config import ServerConfig from nailgun.entity_mixins import TaskFailedError import pytest -from requests.exceptions import HTTPError from robottelo.config import settings from robottelo.constants import ( - DEFAULT_SUBSCRIPTION_NAME, FAKE_0_CUSTOM_PACKAGE_NAME, PRDS, REPOS, @@ -226,19 +224,6 @@ def test_sca_end_to_end( ) assert result.status == 0, f'Failed to register host: {result.stderr}' assert rhel_contenthost.subscribed - # Verify that you cannot attach a subscription to an activation key in SCA Mode - subscription = target_sat.api.Subscription(organization=module_sca_manifest_org).search( - query={'search': f'name="{DEFAULT_SUBSCRIPTION_NAME}"'} - )[0] - with pytest.raises(HTTPError) as ak_context: - module_ak.add_subscriptions(data={'quantity': 1, 'subscription_id': subscription.id}) - assert 'Simple Content Access' in ak_context.value.response.text - # Verify that you cannot attach a subscription to an Host in SCA Mode - with pytest.raises(HTTPError) as host_context: - target_sat.api.HostSubscription(host=rhel_contenthost.nailgun_host.id).add_subscriptions( - data={'subscriptions': [{'id': subscription.id, 'quantity': 1}]} - ) - assert 'Simple Content Access' in host_context.value.response.text # Create a content view with repos and check to see that the client has access content_view = target_sat.api.ContentView(organization=module_sca_manifest_org).create() content_view.repository = [rh_repo, custom_repo] diff --git a/tests/foreman/cli/test_rhcloud_iop.py b/tests/foreman/cli/test_rhcloud_iop.py index 662bc48f5db..09b0d6f919f 100644 --- a/tests/foreman/cli/test_rhcloud_iop.py +++ b/tests/foreman/cli/test_rhcloud_iop.py @@ -149,7 +149,6 @@ def test_positive_install_iop_custom_certs( service_level='Self-Support', purpose_usage='test-usage', purpose_role='test-role', - auto_attach=False, ).create() host.configure_rex(satellite=satellite, org=org, register=False) @@ -198,7 +197,6 @@ def test_disable_enable_iop(satellite_iop, module_sca_manifest, rhel_contenthost service_level='Self-Support', purpose_usage='test-usage', purpose_role='test-role', - auto_attach=False, ).create() host.configure_rex(satellite=satellite, org=org, register=False) diff --git a/tests/foreman/cli/test_subscription.py b/tests/foreman/cli/test_subscription.py index ba155cae68b..b103d9e46a4 100644 --- a/tests/foreman/cli/test_subscription.py +++ b/tests/foreman/cli/test_subscription.py @@ -201,32 +201,6 @@ def test_positive_subscription_status_disabled_golden_ticket(): """ -@pytest.mark.stubbed -def test_positive_candlepin_events_processed_by_STOMP(): - """Verify that Candlepin events are being read and processed by - attaching subscriptions, validating host subscriptions status, - and viewing processed and failed Candlepin events - - :id: d54a7652-f87d-4277-a0ec-a153e27b4487 - - :steps: - - 1. Register Content Host without subscriptions attached - 2. Verify subscriptions status is invalid - 3. Import a Manifest - 4. Attach subs to content host - 5. Verify subscription status is green, "valid", with - "hammer subscription list --host-id x" - 6. Check for processed and failed Candlepin events - - :expectedresults: Candlepin events are being read and processed - correctly without any failures - :BZ: 1826515 - - :CaseImportance: High - """ - - def test_negative_check_katello_reimport(request, target_sat, function_org): """Verify katello:reimport trace should not fail with an TypeError diff --git a/tests/new_upgrades/test_errata.py b/tests/new_upgrades/test_errata.py index f642d348d94..10db61c4b93 100644 --- a/tests/new_upgrades/test_errata.py +++ b/tests/new_upgrades/test_errata.py @@ -164,11 +164,6 @@ def generate_errata_for_client_setup( environment=environment, ).create() test_data.activation_key = ak.name - if not target_sat.is_sca_mode_enabled(org.id): - subscription = target_sat.api.Subscription(organization=org).search( - query={'search': f'name={product.name}'} - )[0] - ak.add_subscriptions(data={'subscription_id': subscription.id}) # Override/enable all AK repos (disabled by default since 6.15) c_labels = [ i['label'] for i in ak.product_content(data={'content_access_mode_all': '1'})['results'] diff --git a/tests/new_upgrades/test_repository.py b/tests/new_upgrades/test_repository.py index 38c5d2ec637..73fc2b2207d 100644 --- a/tests/new_upgrades/test_repository.py +++ b/tests/new_upgrades/test_repository.py @@ -79,11 +79,6 @@ def custom_repo_check_setup(sat_upgrade_chost, content_upgrade_shared_satellite, ak = target_sat.api.ActivationKey( content_view=content_view, organization=org.id, environment=lce, name=test_name ).create() - if not target_sat.is_sca_mode_enabled(org.id): - subscription = target_sat.api.Subscription(organization=org).search( - query={'search': f'name={product.name}'} - )[0] - ak.add_subscriptions(data={'subscription_id': subscription.id}) sat_upgrade_chost.api_register( target_sat, organization=org, activation_keys=[ak.name], location=None ) diff --git a/tests/upgrades/test_errata.py b/tests/upgrades/test_errata.py index f151dc0c504..5c96ba557a6 100644 --- a/tests/upgrades/test_errata.py +++ b/tests/upgrades/test_errata.py @@ -150,11 +150,6 @@ def test_pre_scenario_generate_errata_for_client( ak = target_sat.api.ActivationKey( content_view=content_view, organization=function_org, environment=environment ).create() - if not target_sat.is_sca_mode_enabled(function_org.id): - subscription = target_sat.api.Subscription(organization=function_org).search( - query={'search': f'name={product.name}'} - )[0] - ak.add_subscriptions(data={'subscription_id': subscription.id}) # Override/enable all AK repos (disabled by default since 6.15) c_labels = [ i['label'] for i in ak.product_content(data={'content_access_mode_all': '1'})['results'] diff --git a/tests/upgrades/test_repository.py b/tests/upgrades/test_repository.py index d1d92daf749..a8139ba8be5 100644 --- a/tests/upgrades/test_repository.py +++ b/tests/upgrades/test_repository.py @@ -145,11 +145,6 @@ def test_pre_scenario_custom_repo_check(self, target_sat, sat_upgrade_chost, sav ak = target_sat.api.ActivationKey( content_view=content_view, organization=org.id, environment=lce ).create() - if not target_sat.is_sca_mode_enabled(org.id): - subscription = target_sat.api.Subscription(organization=org).search( - query={'search': f'name={product.name}'} - )[0] - ak.add_subscriptions(data={'subscription_id': subscription.id}) # Override/enable all AK repos (disabled by default since 6.15) c_labels = [ i['label'] for i in ak.product_content(data={'content_access_mode_all': '1'})['results'] From cb3f77967c884434d894757cdf917918c979d6c8 Mon Sep 17 00:00:00 2001 From: Jeremy Lenz Date: Mon, 10 Nov 2025 11:57:40 -0500 Subject: [PATCH 2/2] Remove remaining subscription attachment usage in tests and helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses PR review feedback by removing all remaining references to subscription attachment methods that were removed in the initial PR. This includes removing calls to ActivationKey.subscriptions() and Host.subscription_attach() in tests, removing subscription attachment API endpoints from the API test file, and cleaning up the unused rh_subscriptions parameter from helper methods since subscription attachment is no longer supported in SCA mode. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- robottelo/host_helpers/cli_factory.py | 5 ----- robottelo/host_helpers/repository_mixins.py | 7 ------- robottelo/hosts.py | 15 +-------------- tests/foreman/cli/test_activationkey.py | 12 ------------ tests/foreman/cli/test_host.py | 11 ----------- tests/foreman/endtoend/test_api_endtoend.py | 6 ------ 6 files changed, 1 insertion(+), 55 deletions(-) diff --git a/robottelo/host_helpers/cli_factory.py b/robottelo/host_helpers/cli_factory.py index 9d12deb6936..a477724f044 100644 --- a/robottelo/host_helpers/cli_factory.py +++ b/robottelo/host_helpers/cli_factory.py @@ -1010,7 +1010,6 @@ def setup_cdn_and_custom_repos_content( lce_id=None, repos=None, download_policy='on_demand', - rh_subscriptions=None, default_cv=False, ): """Setup cdn and custom repositories, content view and activations key @@ -1021,14 +1020,10 @@ def setup_cdn_and_custom_repos_content( :param bool default_cv: whether to use the Default Organization CV :param str download_policy: update the repositories with this download policy - :param list rh_subscriptions: a list of RH subscription to attach to - activation key :return: a dict containing the activation key, content view and repos info """ if repos is None: repos = [] - if rh_subscriptions is None: - rh_subscriptions = [] custom_product, repos_info = self.setup_cdn_and_custom_repositories( org_id=org_id, repos=repos, download_policy=download_policy diff --git a/robottelo/host_helpers/repository_mixins.py b/robottelo/host_helpers/repository_mixins.py index 180ae9fbfa8..dfee89e8aa1 100644 --- a/robottelo/host_helpers/repository_mixins.py +++ b/robottelo/host_helpers/repository_mixins.py @@ -732,7 +732,6 @@ def setup_content( org_id, lce_id, download_policy='on_demand', - rh_subscriptions=None, override=None, ): """ @@ -741,16 +740,10 @@ def setup_content( :param org_id: The organization id :param lce_id: The lifecycle environment id :param download_policy: The repositories download policy - :param rh_subscriptions: The RH subscriptions to be added to activation key :param override: Content override (True = enable, False = disable, None = no action) """ if self._repos_info: raise RepositoryAlreadyCreated('Repositories already created can not setup content') - if rh_subscriptions is None: - rh_subscriptions = [] - if self.need_subscription and not rh_subscriptions: - # add the default subscription if no subscription provided - rh_subscriptions = [constants.DEFAULT_SUBSCRIPTION_NAME] custom_product, repos_info = self.setup(org_id=org_id, download_policy=download_policy) content_view, lce = self.setup_content_view(org_id, lce_id) activation_key = self.setup_activation_key( diff --git a/robottelo/hosts.py b/robottelo/hosts.py index bceacabe35a..3d3137d302f 100644 --- a/robottelo/hosts.py +++ b/robottelo/hosts.py @@ -1344,7 +1344,6 @@ def virt_who_hypervisor_config( org['id'], lce['id'], repos, - rh_subscriptions=[constants.DEFAULT_SUBSCRIPTION_NAME], ) activation_key = content_setup_data['activation_key'] content_view = content_setup_data['content_view'] @@ -1447,20 +1446,8 @@ def virt_who_hypervisor_config( if len(org_hosts) == 0: raise CLIFactoryError(f'Failed to find hypervisor host:\n{result.stderr}') virt_who_hypervisor_host = org_hosts[0] - subscription_id = None - if hypervisor_hostname and subscription_name: - subscriptions = satellite.cli.Subscription.list( - {'organization-id': org_id}, per_page=False - ) - for subscription in subscriptions: - if subscription['name'] == subscription_name: - subscription_id = subscription['id'] - Host.subscription_attach( - {'host': virt_who_hypervisor_hostname, 'subscription-id': subscription_id} - ) - break return { - 'subscription_id': subscription_id, + 'subscription_id': None, 'subscription_name': subscription_name, 'activation_key_id': activation_key['id'], 'organization_id': org['id'], diff --git a/tests/foreman/cli/test_activationkey.py b/tests/foreman/cli/test_activationkey.py index 44dcb7b222b..2ac8703a8d3 100644 --- a/tests/foreman/cli/test_activationkey.py +++ b/tests/foreman/cli/test_activationkey.py @@ -1672,15 +1672,3 @@ def test_syspurpose_end_to_end( assert host['subscription-information']['system-purpose']['purpose-role'] == "test-role2" assert host['subscription-information']['system-purpose']['purpose-usage'] == "test-usage2" assert host['subscription-information']['system-purpose']['service-level'] == "Self-Support2" - - rhel_contenthost.unregister() - with pytest.raises(CLIReturnCodeError): - # raise error that the host was not registered by - # subscription-manager register - target_sat.cli.ActivationKey.subscriptions( - { - 'organization-id': module_org.id, - 'id': activation_key.id, - 'host-id': host['id'], - } - ) diff --git a/tests/foreman/cli/test_host.py b/tests/foreman/cli/test_host.py index ffef65fa489..b46c1f4f700 100644 --- a/tests/foreman/cli/test_host.py +++ b/tests/foreman/cli/test_host.py @@ -1847,17 +1847,6 @@ def test_positive_register( assert len(hosts) > 0 host = target_sat.cli.Host.info({'id': hosts[0]['id']}) assert host['name'] == rhel_contenthost.hostname - # note: when not registered the following command lead to exception, - # see unregister - host_subscriptions = target_sat.cli.ActivationKey.subscriptions( - { - 'organization-id': module_org.id, - 'id': module_ak_with_cv.id, - 'host-id': host['id'], - }, - output_format='json', - ) - assert len(host_subscriptions) == 0 # -------------------------- MULTI-CV SCENARIOS ------------------------- diff --git a/tests/foreman/endtoend/test_api_endtoend.py b/tests/foreman/endtoend/test_api_endtoend.py index 42818aaec18..03a90ab4b77 100644 --- a/tests/foreman/endtoend/test_api_endtoend.py +++ b/tests/foreman/endtoend/test_api_endtoend.py @@ -37,13 +37,11 @@ '/katello/api/activation_keys/:id', '/katello/api/activation_keys/:id', '/katello/api/activation_keys/:id', - '/katello/api/activation_keys/:id/add_subscriptions', '/katello/api/activation_keys/:id/content_override', '/katello/api/activation_keys/:id/copy', '/katello/api/activation_keys/:id/host_collections/available', '/katello/api/activation_keys/:id/product_content', '/katello/api/activation_keys/:id/releases', - '/katello/api/activation_keys/:id/remove_subscriptions', ), 'advisor_engine': ( '/api/advisor_engine/host_details', @@ -424,8 +422,6 @@ 'host_subscriptions': ( '/api/hosts/:host_id/subscriptions', '/api/hosts/:host_id/subscriptions', - '/api/hosts/:host_id/subscriptions/add_subscriptions', - '/api/hosts/:host_id/subscriptions/remove_subscriptions', '/api/hosts/:host_id/subscriptions/available_release_versions', '/api/hosts/:host_id/subscriptions/enabled_repositories', '/api/hosts/:host_id/subscriptions/content_override', @@ -489,8 +485,6 @@ '/api/hosts/bulk/assign_location', '/api/hosts/bulk/add_host_collections', '/api/hosts/bulk/remove_host_collections', - '/api/hosts/bulk/add_subscriptions', - '/api/hosts/bulk/remove_subscriptions', '/api/hosts/bulk/applicable_errata', '/api/hosts/bulk/installable_errata', '/api/hosts/bulk/available_incremental_updates',