Automatiseren van RHEL-Registratie en Abonnement

Automatiseer de registratie en abonnementsbeheer van Red Hat Enterprise Linux (RHEL) in C2 Platform ontwikkelomgevingen met Vagrant voor naadloze toegang tot Red Hat-bronnen.

Projecten: c2platform/rws/ansible-gis


Automatiseer de registratie en afmelding van RHEL-machines met Vagrant in combinatie met de vagrant-registration plugin, wat de ontwikkelingsworkflows vereenvoudigt.


Probleem

Toegang tot Red Hat-diensten en software repositories is essentieel voor ontwikkelaars die werken in Red Hat Enterprise Linux (RHEL)-omgevingen. Het automatiseren van systeemregistratie en abonnementsbeheer is cruciaal om ononderbroken toegang tot deze bronnen te waarborgen.

Context

In RHEL 9-omgevingen is een efficiënt mechanisme nodig om systemen te registreren bij Red Hat Subscription Management (RHSM) en abonnementen te beheren. Dit stelt ontwikkelaars in staat om softwarepakketten te installeren, updates te ontvangen en Red Hat-diensten naadloos te gebruiken. Door gebruik te maken van het Red Hat Developer-abonnement kunnen ontwikkelaars RHEL 9-systeemregistraties kosteneffectief beheren in ontwikkelomgevingen. Dit omvat het registreren van het systeem bij RHSM en het koppelen van een ontwikkelaarsabonnement om toegang tot essentiële Red Hat-software repositories en -diensten vrij te geven.

Het onderstaande voorbeeld illustreert het registreren van een RHEL 9-systeem en het beheren van abonnementen met terminalcommando’s:

subscription-manager register --username <gebruikersnaam>
subscription-manager attach

In de context van de ontwikkelingsworkflows van het C2 Platform (zie Ontwikkelomgeving ), worden omgevingen continu opnieuw aangemaakt. Bij het werken aan uitdagende automatiseringsopdrachten die geavanceerde Ansible-engineering vereisen, kan dit meer dan 15 keer per dag gebeuren. Zelfs bij eenvoudigere projecten is het opnieuw aanmaken van omgevingen een standaardworkflow. Als best practice moet je, voordat je wijzigingen commit en pusht, deze testen vanaf een schone basislijn—door terug te keren naar een snapshot of een nieuwe VM aan te maken—in plaats van een gewijzigde VM te gebruiken waarmee je hebt gewerkt.

Dit kan tot op zekere hoogte worden verzacht door snapshots te gebruiken, wat eenvoudig is met Vagrant (zie Vagrant ), een kernonderdeel van de ontwikkelingsaanpak van het C2 Platform.

Zonder het automatiseren van abonnementsbeheer verstoren deze frequente recreaties de ontwikkelingsworkflow, wat de productiviteit en efficiëntie vermindert. Daarom is het in bijna alle gevallen essentieel om een Red Hat developer-account te verkrijgen om deze mogelijkheid te ontgrendelen bij het gebruik van RHEL-gebaseerde systemen.

Oplossing

Om een volledig geautomatiseerd proces te bereiken dat naadloos integreert met Vagrant-gebaseerde ontwikkelingsworkflows, gebruik je de Vagrant-plugin vagrant-registration  . Gecombineerd met een aangepast Vagrantfile stelt dit Ansible-engineers in staat om te werken zonder handmatig abonnementsbeheer te hoeven afhandelen.

Voorbeelden en implementatie

Met het Rijkswaterstaat (RWS)-project als voorbeeld, bevat de implementatie in het project c2platform/rws/ansible-gis een aangepast Vagrantfile:

  1. Het Vagrantfile bevat een codefragment voor de registratieafhandeling dat gebruikmaakt van je Red Hat Developer  accountgegevens met de variabelen RHEL_DEV_ACCOUNT en RHEL_DEV_SECRET.

     Vagrantfile

    29      if bx['registration'] || false
    30        if ENV['RHEL_DEV_ACCOUNT'].nil? || ENV['RHEL_DEV_SECRET'].nil?
    31          abort 'ERROR: Please set both RHEL_DEV_ACCOUNT and RHEL_DEV_SECRET ' \
    32          'environment variables. Refer to ' \
    33          'https://c2platform.org/docs/guidelines/dev/rhel for more info.'
    34        end
    35        cfg.registration.skip = false
    36        cfg.registration.unregister_on_halt = false
    37        cfg.registration.username = ENV['RHEL_DEV_ACCOUNT']
    38        cfg.registration.password = ENV['RHEL_DEV_SECRET']
    39      end
    
  2. Het Vagrantfile.yml bevat een rhel9 boxdefinitie met een registration vlag. Dit geeft aan dat systemen op basis van deze box automatisch worden geregistreerd bij creatie en afgemeld bij verwijdering.

     Vagrantfile.yml

    344  rhel8:
    345    name: generic/rhel8
    346    version: 4.3.12
    347    registration: true
    348  rhel9:
    349    name: generic/rhel9
    350    version: 4.3.12
    351    registration: true
    

De documentatie van het C2 Platform bevat een handleiding voor Vagrant-plugins, inclusief de vagrant-registration plugin. Zie Een Ontwikkelomgeving Opzetten op Ubuntu 22 en specifiek het gedeelte over Installeer Vagrant en Vagrant Plugins .

De setup is volledig geautomatiseerd. Als je deze inloggegevens niet configureert, zal Vagrant je vragen om te bevestigen of je wilt registreren (y/n). Als je ja kiest, vraagt het om je inloggegevens. Je kunt ook kiezen om niet te registreren, in welk geval je de mogelijkheid mist om toegang te krijgen tot RHEL-bronnen. Als je geen Red Hat developer-account hebt of de omgevingsvariabelen RHEL_DEV_ACCOUNT en RHEL_DEV_SECRET niet configureert, biedt dit prompting-proces nog steeds een handiger manier om te registreren dan commando’s handmatig uit te voeren in de VM.

Deze setup garandeert dat systemen die worden opgestart met de rhel9-configuratie automatisch registratie en afmelding afhandelen, wat de ontwikkeling stroomlijnt en ervoor zorgt dat aan Red Hat’s abonnementsbeheer wordt voldaan.

Registratie en Afmelding in Actie:

De volgende terminaluitvoer demonstreert het automatische registratie- en afmeldproces bij het beheren van een Vagrant-box:

  1. Bij het uitvoeren van vagrant up, registreert het systeem zich bij Red Hat, gefaciliteerd door de vagrant-registration plugin.
  2. Het uitvoeren van vagrant destroy activeert de afmelding van het systeem, waardoor een schone status behouden blijft en geen onnodige abonnementen actief blijven.

Laat zien

Let op de onderstaande regels met “Registering box with vagrant-registration…” en “Unregistering box with vagrant-registration…”

[:ansible-gis]└2 master(+15/-1,+1/-1) ± vagrant up gsd-ansible-repo --no-provision
Bringing machine 'gsd-ansible-repo' up with 'virtualbox' provider...
==> gsd-ansible-repo: Importing base box 'generic/rhel9'...
==> gsd-ansible-repo: Matching MAC address for NAT networking...
==> gsd-ansible-repo: Checking if box 'generic/rhel9' version '4.3.12' is up to date...
==> gsd-ansible-repo: Setting the name of the VM: ansible-gis_gsd-ansible-repo_1708418067798_69697
==> gsd-ansible-repo: Fixed port collision for 22 => 2222. Now on port 2206.
==> gsd-ansible-repo: Clearing any previously set network interfaces...
==> gsd-ansible-repo: Preparing network interfaces based on configuration...
    gsd-ansible-repo: Adapter 1: nat
    gsd-ansible-repo: Adapter 2: hostonly
==> gsd-ansible-repo: Forwarding ports...
    gsd-ansible-repo: 22 (guest) => 2206 (host) (adapter 1)
==> gsd-ansible-repo: Running 'pre-boot' VM customizations...
==> gsd-ansible-repo: Booting VM...
==> gsd-ansible-repo: Waiting for machine to boot. This may take a few minutes...
    gsd-ansible-repo: SSH address: 127.0.0.1:2206
    gsd-ansible-repo: SSH username: vagrant
    gsd-ansible-repo: SSH auth method: private key
==> gsd-ansible-repo: Machine booted and ready!
==> gsd-ansible-repo: Registering box with vagrant-registration...
==> gsd-ansible-repo: Checking for guest additions in VM...
==> gsd-ansible-repo: Setting hostname...
==> gsd-ansible-repo: Configuring and enabling network interfaces...
==> gsd-ansible-repo: Mounting shared folders...
    gsd-ansible-repo: /vagrant => /home/ostraaten/git/gitlab/c2/ansible-gis
    gsd-ansible-repo: /arcgis-software-repo => /software/projects/rws
    gsd-ansible-repo: /ansible-dev-collections => /home/ostraaten/git/gitlab/c2/ansible-dev-collections
==> gsd-ansible-repo: Machine not provisioned because `--no-provision` is specified.
θ66° [:ansible-gis]└2 master(+15/-1,+1/-1) ±
[:ansible-gis]└2 master(+15/-1,+1/-1) ± vagrant destroy gsd-ansible-repo
==> gsd-ansible-repo: Unregistering box with vagrant-registration...
    gsd-ansible-repo: Are you sure you want to destroy the 'gsd-ansible-repo' VM? [y/N] y
==> gsd-ansible-repo: Forcing shutdown of VM...
==> gsd-ansible-repo: Destroying VM and associated drives...
[:ansible-gis]└2 master(+15/-1,+1/-1) ±

De volgende twee handleidingen maken gebruik van Red Hat-boxen met automatische registratie: