Red Hat's Content Delivery Network (CDN) is a great tool to help ensure systems have the latest supported packages available to install. Simply register your system, attach it to a subscription pool id, and start installing packages. This is great, this is easy.

There is a nice interface on the Red Hat Customer Portal ( http://access.redhat.com ) that allows you to manage your CDN account. It allows you to see when your subscriptions are expiring, information about the individual systems that are registered, among other things. However, what I would like to do is easily look at a subscription and see which systems are using it or when they last checked in. If they have not checked in for a while, we can probably reuse their entitlement.

If you are like me, it can be a challenge to keep track of the systems that have registered and are using subscriptions. I have 20+ people registering systems to this account, we can easily spin up dozens of systems a day during testing. We redeploy these systems multiple times during a day, a lot of times these systems have random names. If they do not get unregistered before they are reinstalled then they consume subscriptions within CDN. Eventually we run out of the needed subscriptions.

Currently, you can login to the Customer Portal and check what subscriptions a system is using simply by selecting system. One drawback, however, is that you cannot select a subscription and see which systems are registered to it or when they last checked in.

Luckily, the Red Hat CDN has an API that can be taken advantaged of to solve some of these problems. The Red Hat CDN is based off the Candlepin project, see Overview of Red Hat Subscription Management. We can use the Candlepin API reference to see what we can do.

I played around with the API and found out it gave me some great information. I could tell when systems registered and to which subscriptions and pools. I could tell when they last checked in as well. Everything I wanted to know was now easily available to me.

Everything I want to know is available though the /owner path. More specifically, the /owner/{owner_key}/pools, /owner/{owner_key}/consumers, and /owner/{owner_key}/entitlements paths. The OWNER_KEY is the same as the "org ID" that is returned when issuing the "subscription-manager identity" command.

Using the hostname and prefix settings from the /etc/rhsm/rhsm.conf I can now build the URLs I needed to query.

  • https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/pools
    • The usage of the pools.
  • https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/consumers
    • Information on the check-in dates of the systems.
  • https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/entitlements
    • Information about the systems and which entitlements they are consuming.

The output returned is in the JSON format and is difficult to read. Running it through a parser like jq makes the output much easier to read.

Here are the commands I used to view the information I needed:

  • curl -X GET -u CDN_USERNAME:CDN_PASSWORD -k 'https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/pools'
  • curl -X GET -u CDN_USERNAME:CDN_PASSWORD -k 'https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/consumers'
  • curl -X GET -u CDN_USERNAME:CDN_PASSWORD -k 'https://subscription.rhn.redhat.com/subscription/owners/OWNER_ID/entitlements'

Now that I have the data, I need to go through the information to see how my subscriptions are being used. I really hate this part. But luckily I am a firm believer in scripting such tasks. After all, I am sure I will need to do this many times in the future.

Scripting away!

Last updated: September 5, 2023