Katello should intercept requests to GET /consumers/:id/available_releases and return the system's available release versions as viewed by katello. RHSM will leverage this and bypass its default CDN lookup in order to report the same set as katello. More Info Here: https://mojo.redhat.com/docs/DOC-960839
Created from redmine issue http://projects.theforeman.org/issues/5968
This fix only works for subscription manager versions greater than: subscription-manager-1.12.1 Prior to the above version, all requests for a system's available releases would go directly to the CDN (and thus should see no hit on the Katello server and the rhsm.log should show the CDN). After this version, querying for available releases should hit the Katello server and only return releases that in the system's content view the same as happens in the UI. The sub-man command is: subscription-manager release --list
On the sat6 server side using the sat6-SNAP11-compose [root@dhcp201-151 ~]# rpm -qav | grep -i subscription-manager subscription-manager-1.12.4-1.el6.x86_64 2014-07-01 19:44:01,248 [DEBUG] subscription-manager @connection.py:446 - Making request: GET /katello/api/status 2014-07-01 19:44:01,294 [DEBUG] subscription-manager @connection.py:469 - Response: status=200 2014-07-01 19:44:01,295 [ERROR] subscription-manager @utils.py:240 - Error while checking server version: 'rulesVersion' 2014-07-01 19:44:01,296 [ERROR] subscription-manager @utils.py:242 - 'rulesVersion' Traceback (most recent call last): File "/usr/share/rhsm/subscription_manager/utils.py", line 224, in get_server_versions rules_version = status['rulesVersion'] KeyError: 'rulesVersion' ========================================================================== 2014-07-01 19:44:01,296 [INFO] subscription-manager @managercli.py:309 - Server Versions: {'rules-version': 'Unknown', 'candlepin': 'Unknown', 'server-type': 'Red Hat Subscription Management'} 2014-07-01 19:44:01,298 [INFO] subscription-manager @managercli.py:274 - self.identity: <Identity, name=dhcp201-151.englab.pnq.redhat.com, uuid=e5f38e1f-9041-4223-94d2-6789f98ffeb5, consumer=consumer: name="dhcp201-151.englab.pnq.redhat.com", uuid=e5f38e1f-9041-4223-94d2-6789f98ffeb5> 2014-07-01 19:44:01,299 [DEBUG] subscription-manager @connection.py:414 - Loaded CA certificates from /etc/rhsm/ca/: redhat-uep.pem, candlepin-local.pem, candlepin-stage.pem 2014-07-01 19:44:01,300 [DEBUG] subscription-manager @connection.py:446 - Making request: GET /katello/api/consumers/e5f38e1f-9041-4223-94d2-6789f98ffeb5 2014-07-01 19:44:01,528 [DEBUG] subscription-manager @connection.py:469 - Response: status=200 2014-07-01 19:44:01,531 [DEBUG] subscription-manager @connection.py:414 - Loaded CA certificates from /etc/rhsm/ca/: redhat-uep.pem, candlepin-local.pem, candlepin-stage.pem 2014-07-01 19:44:01,532 [DEBUG] subscription-manager @connection.py:446 - Making request: GET /katello/api/ 2014-07-01 19:44:01,761 [DEBUG] subscription-manager @connection.py:469 - Response: status=200 2014-07-01 19:44:01,764 [DEBUG] subscription-manager @connection.py:686 - Server supports the following resources: 2014-07-01 19:44:01,764 [DEBUG] subscription-manager @connection.py:687 - {'available_releases': '/api/available_releases', 'tasks': '/api/tasks/', 'distributors': '/api/distributors/', 'content_overrides': '/api/content_overrides', 'environments': '/api/environments/', 'content_views': '/api/content_views/', 'content_view_filters': '/api/content_view_filters/', 'puppet_modules': '/api/puppet_modules/', 'host_collections': '/api/host_collections/', 'guestids': '/api/guestids', 'consumers': '/api/consumers/', 'systems': '/api/systems/', 'gpg_keys': '/api/gpg_keys/', 'entitlements': '/api/entitlements/', 'status': '/api/status/', 'capsules': '/api/capsules/', 'users': '/api/users/', 'sync_plans': '/api/sync_plans/', 'subscriptions': '/api/subscriptions/', 'content_view_versions': '/api/content_view_versions/', 'packages': '/api/packages/', 'organizations': '/api/organizations/', 'roles': '/api/roles/', 'package_groups': '/api/package_groups/', 'repository_sets': '/api/repository_sets/', 'repositories': '/api/repositories/', 'products': '/api/products/', 'activation_keys': '/api/activation_keys/', 'errata': '/api/errata/'} ============================================================================ 2014-07-01 19:44:01,765 [DEBUG] subscription-manager @connection.py:446 - Making request: GET /katello/api/consumers/e5f38e1f-9041-4223-94d2-6789f98ffeb5/available_releases 2014-07-01 19:44:01,808 [DEBUG] subscription-manager @connection.py:469 - Response: status=404 2014-07-01 19:44:01,809 [ERROR] subscription-manager @connection.py:498 - Response: 404 2014-07-01 19:44:01,809 [ERROR] subscription-manager @connection.py:499 - JSON parsing error: No JSON object could be decoded 2014-07-01 19:44:01,809 [ERROR] subscription-manager @managercli.py:154 - exception caught in subscription-manager 2014-07-01 19:44:01,810 [ERROR] subscription-manager @managercli.py:155 - Server error attempting a GET to /katello/api/consumers/e5f38e1f-9041-4223-94d2-6789f98ffeb5/available_releases returned status 404 Traceback (most recent call last): File "/usr/sbin/subscription-manager", line 82, in <module> sys.exit(abs(main() or 0)) File "/usr/sbin/subscription-manager", line 73, in main return managercli.ManagerCLI().main() File "/usr/share/rhsm/subscription_manager/managercli.py", line 2412, in main return CLI.main(self) File "/usr/share/rhsm/subscription_manager/cli.py", line 160, in main return cmd.main() File "/usr/share/rhsm/subscription_manager/managercli.py", line 439, in main return_code = self._do_command() File "/usr/share/rhsm/subscription_manager/managercli.py", line 1317, in _do_command releases = self.release_backend.get_releases() File "/usr/share/rhsm/subscription_manager/release.py", line 48, in get_releases return provider.get_releases() File "/usr/share/rhsm/subscription_manager/release.py", line 67, in get_releases return self._conn().getAvailableReleases(self.identity.uuid) File "/usr/lib64/python2.6/site-packages/rhsm/connection.py", line 1067, in getAvailableReleases return self.conn.request_get(method) File "/usr/lib64/python2.6/site-packages/rhsm/connection.py", line 550, in request_get return self._request("GET", method) File "/usr/lib64/python2.6/site-packages/rhsm/connection.py", line 478, in _request self.validateResponse(result, request_type, handler) File "/usr/lib64/python2.6/site-packages/rhsm/connection.py", line 526, in validateResponse handler=handler) RemoteServerException: Server error attempting a GET to /katello/api/consumers/e5f38e1f-9041-4223-94d2-6789f98ffeb5/available_releases returned status 404 Me not sure, if something is missing. But do let me know if it is so. for now it looks like it's FAILEDQA.
Definitely an issue. Looking at the log, subscription-manager seems to be doing what it should be. The root resource exists for available_releases, and a call is being made to katello for the release versions. Subscription-manager would be requesting them from the CDN directly, otherwise. To me this appears to be an issue with the way katello is handling GET /katello/api/consumers/:consumer_uuid/available_releases I wonder if katello is proxying this request directly to candlepin, instead of handling itself (as it should be). Candlepin does not implement that end-point, so if it were proxied, the 404 would occur from candlepin.
I have confirmed that this is happening on the katello side. The issue is that the route for GET /katello/api/consumers/:consumer_uuid/available_releases is included in v2 but not in v1 routing file. Candlepin proxied routes are handled by V1 routes and therefore it is not being matched. Adding a match statement to config/routes/api/v1.rb will fix the issue. NOTE: This is not broken in github master -- only beta.
Please re-test this on a more recent snap.
Tested with a) Sat6-GA-Snap4 b) subscription-manager-1.12.4-1.el6.x86_64 c) python-rhsm-1.12.3-1.el6.x86_64 [root@xxxx ~]# subscription-manager release --list +-------------------------------------------+ Available Releases +-------------------------------------------+ 6.4 6.5
This was delivered with Satellite 6.0 which was released on 10 September 2014.