Summary of Katello/Content Enginification Work

All,

Over the course of the last development sprint for Foreman and Katello, two
parallel tracks were investigated to learn the complexities of bringing
content and entitlement management to Foreman. One approach started from
scratch, using Katello entities and concepts as a foundation for creating
basic content management workflows alongside Foreman. The other approach
looked in to taking Katello as is and turning it into an engine that could
be mounted alongside and integrated into Foreman concepts. What follows is
a summary of those efforts up to this point, our recommendation going
forward and a request for thoughts and feedback from the Foreman and
Katello communities.

Foreman Content

The engine introduces several new entities (and UI to manipulate them) and
extends a few of the core entities with additional functionality.

Current state:

  • Create a custom product (providers were dropped early on)
  • Add repositories to a custom product (distributions, yum, or iso) for a
    given architecture
  • Sync repositories
  • Create a Content View definition
  • publish a Content View

Work in progress:

  • Aggregated Content Views
  • Associate a host or a host group with a Content View

Katello as an Engine
https://github.com/Katello/katello/tree/enginify

The current state of the branch brings to life the following workflow:

  • Login with a Foreman user

  • Create a Foreman organization that is augmented with Katello
    organization fields such as a label

  • Create a custom provider

  • Create a custom product attached to the provider

  • Create a custom repository attached to the product

  • Attach a Foreman architecture to the repository

  • Sync the remote repository locally

  • Create a content view definition

  • Add a product and repository to the definition

  • Publish a content view from the definition

  • Associate a Foreman operating system with the content view at publish
    time

  • Generate a Foreman installation media for all repositories with
    distributions in them tied to the content views operating system at publish
    time

  • Create a promotion changeset, add the published content view to it and
    apply it to promote the view to an environent (e.g. Dev)

  • View the completed changeset in Changeset History

  • View contents of published and promoted content view in Content Search

  • Create a Foreman host

  • Attach a content environment and view to a host

  • Scope the available installation media based upon what content
    environment/view is associated with the host (i.e. make available simple
    install media and any created with the content view if one is selected)

  • Provision a host that uses that install media from the content view
    and the local repository

Major actions and things of note taken to achieve this:

  • Use of Foreman organization augmented by Katello concepts

  • Use of Foreman user augmented with Katello user fields

  • Complete re-use of Katello UI concepts on Katello pages

  • Complete re-use of Katello's current integration with Pulp and
    Candlepin for Content and Subscription Management

  • Scoping of all Katello entities from a code and database level

  • Removal of Katello migrations in favor of a single migration that
    represents the current state of the Katello database

  • Continued usage of delayed jobs in the background

  • Connections to Foreman objects through shared database pattern

  • 'Turning off' of Katello authorization (RBAC and authorization was not
    tackled)

Our recommendation, given the time invested in the Katello project to date,
and the effort required to date to bring the above workflow to life is to
go the route of enginifying Katello while taking lessons and feedback
learned from foreman_content into consideration. After conversion, effort
can then be undertaken to split apart the pieces of Katello into more
focused pieces that target the major areas of content and entitlement
management.

Thanks.