Howdy,
Roughly a year and a half ago, the Katello team with the help of the
Foreman team embarked on migrating Katello to both the Foreman community
and architecture. On the heels of what will be the second release of
Katello, what follows is a review of the items that were previously
identified as overlap between the two projects prior to 'enginification'
(or turning Katello into a plugin) and where they stand currently.
Apologies for the length - there are many topics to cover. Note, the
percentage next to each topic represents my personal estimate of the
percent done towards full integration. Items are sorted by percentage from
high to low.
Plugin definition and integration points (100%)
Pre-enginifcation:
- Katello and Foreman were maintaining support for plugins using their
own defined interfaces.
Katello 2.1/Foreman 1.7:
- Katello is now a plugin to Foreman.
Authentication (100%)
Pre-enginifcation:
- Katello and Foreman maintained their own authentication systems and
were linked up using Signo to provide single sign-on.
Katello 2.1/Foreman 1.7:
- Katello relies entirely on Foreman's authentication system.
User Interface Menu (100%)
Pre-enginifcation:
- Katello maintained a separate UI with separate angular-based menu
structure. - Foreman maintained a separate UI with separate ERB based menu
structure.
Katello 2.1/Foreman 1.7:
- Katello adds it's menu items to the Foreman infrastructure which are
displayed as a single unified navigation structure.
Command Line Interface (100%)
Pre-enginifcation:
- Katello maintained a python-based CLI tool that included some Foreman
commands. - Foreman started a CLI project called hammer that provided a bridge to
the python CLI Katello had.
Katello 2.1/Foreman 1.7:
- Katello now provides a hammer plugin for CLI commands and no longer
maintains the python CLI.
Identity Management (95%)
Pre-enginifcation:
- Katello and Foreman had their own user and role models and
authorization systems.
Katello 2.1/Foreman 1.7:
- Katello uses Foreman's users and adds the following:
- help_tips
- user notices
- search favorites
- search history
- preferences
- Katello uses Foreman's roles and authorization system entirely.
Continuous Integration (95%)
Pre-enginifcation:
- Katello largely relied on Travis to handle testing of pull requests
and merges to master. - Foreman maintained a Jenkins server handling testing of pull requests,
merges to master, plugins, and their deployment pipeline.
Katello 2.1/Foreman 1.7:
- Katello now uses the Foreman Jenkins to handle testing pull requests,
merges to master, plugins, and the deployment pipeline. - Foreman runs Katello unit tests on every PR to Foreman.
- Foreman and Katello both use and collaborate on a prprocessor for
setting labels, checking PRs and automating Redmine interactions for PRs.
Needs Work:
- Running Foreman's unit tests in the context of Katello (see -
https://github.com/Katello/katello/pull/4534)
RESTful API (80%)
Pre-enginifcation:
- Katello and Foreman maintained separate V1 APIs and specifications.
- Katello and Foreman maintained separate developing V2 APIs and
specifications.
Katello 2.1/Foreman 1.7:
- Katello and Foreman worked on a joint V2 specification and implemented
with some mis-communication along the way. - V2 API for each roughly follows the same input and output formats with
some differences found within specific APIs. - Katello and Foreman API namespace are rooted separately - /katello and
/api
Packaging (70%)
Pre-enginifcation:
- Katello maintained it's own set of yum repos hosted at fedorapeople.org
and carried it's own packages within individual git repositories. - Foreman maintained it's own packaging repository for it's components
and their own set of repos at yum.theforeman.org. - Katello did not test packaging.
- Foreman maintained a testing and deployment pipeline for their
packages before releasing them.
Katello 2.1/Foreman 1.7:
- Katello and Foreman have converged on the same SCL and duplicate
packages pre-dominantly removed from Katello where Foreman provides. - Both maintain separate yum repositories.
- Katello now employs a test pipeline for packages before releases them.
- Katello continues to maintain spec files and packaging within
individual repositories, while Foreman utilizes foreman-packaging for
itself, dependencies and plugins. - Neither Katello or Foreman bats tests are run against each others
changes.
Organizations (60%)
Pre-enginifcation:
- Katello and Foreman had separate organization models with duplicated
attributes - Katello required all entities to belong to a single organization and
for users to be in the context of an organization. Foreman allowed entities
(except hosts) to belong to multiple organizations and allowed an 'Any
Context' mode.
Katello 2.1/Foreman 1.7:
- Katello and Foreman use the same Organization model with Katello
adding:- relationships to Katello entities
- default_info
- description
- label
- default capsule
- Library lifecycle environment
- Default content view
- Katello still requires all entities to belong to a single organization
and for users to be in the context of an organization. Foreman allow
entities (except hosts) to belong to multiple organizations and allowed an
'Any Context' mode.
Release and Project Management (60%)
Pre-enginifcation:
- Katello used Trello for project management.
- Katello wrapped Foreman releases within it's releases.
- Foreman used their own instance of Redmine for project management.
- Katello and Foreman both used 3 week sprints but with separate
planning, retrospectives and planning. - Katello releases were feature-based with some consideration of time
since last release. - Foreman releases were quarterly.
Katello 2.1/Foreman 1.7:
- Katello migrated to and now makes full use of the Foreman Redmine for
project management. - Katello and Foreman now have a single joint sprint demo.
- Katello releases are still partially feature-based and partially based
on Foreman's schedule given Katello deploys Foreman during installation and
thus requires a full Foreman release. - Katello is planning to use 2.2 to sync up with Foreman timing wise for
releases. - Katello and Foreman still maintain separate planning and
retrospectives.
Installer Tooling (40%)
Pre-enginifcation:
- Katello maintained katello-configure and capsule-installer, a puppet
based installer with tightly coupled puppet modules for installing Katello
with Foreman. - Foreman created kafo and maintained an installer based off of kafo
using Puppet modules and compiling them together at build time.
Katello 2.1/Foreman 1.7:
- Katello maintains a Kafo based katello-installer which produces
katello-installer, katello-devel-installer, and the capsule-installer which
installs Katello with Foreman. - Foreman maintains foreman-installer which produces foreman-installer
and handles installing Foreman and a subset of plugins. - The two installers are modeled similarly but are separate from one
another. - Katello cannot be added to an existing Foreman.
Search Unification (30%)
Pre-enginifcation:
- Katello made use of Elasticsearch for indexing and searching through
the API and UI in part due to data types coming from Pulp and the need for
flexibility. - Foreman uses scoped search and active record for searching.
Katello 2.1/Foreman 1.7:
- Katello continues to use elasticsearch but has converted some entities
over to AR and scoped search. - Katello has added scoped search autocomplete to those pages.
- Katello has not integrated the use of search history and bookmarks.
System Management (25%)
Pre-enginifcation:
- Katello used a system model, API, and UI page for managing hosts.
Foreman used a host model, API and UI for managing hosts. - Katello systems and hosts had a loose connection between them even
when they represented the same box.
Katello 2.1/Foreman 1.7:
- Katello uses 'Content Host' via the system model and API with it's own
UI. Foreman uses their same host model, API and UI. - Content hosts are created for hosts when the two are in the same
organization and the hostname's match up and connected to one another at
the model level. - Host information shows up on a Provisioning tab of the content host
page and subscription information shows up on the host page.
User Interface Building Blocks (10%)
Pre-enginifcation:
- Katello maintained a partial AngularJS and partial HAML based UI that
relied on Bootstrap - Foreman maintained an ERB based UI that relied on Bootstrap
Katello 2.1/Foreman 1.7:
- Katello continues to have an AngularJS based UI that talks to the APIs
and a few legacy HAML pages that continue to use UI controllers. The
styling is provided by Patternfly with Bootstrap underneath and Font
Awesome. - Foreman continues to maintain their ERB based UI that relies on
Bootstrap.
Notifications (0%)
Pre-enginifcation:
- Katello maintained system wide and user notifications with their own
UI page. Foreman maintained system wide notifications. Both used some form
of floating UI notifications but were separate implementations.
Katello 2.1/Foreman 1.7:
- Katello still produces some backend notifications and adds a
notifications UI page. Form, and action notifications have moved inline
within the UI and are not persisted in the database. - Foreman still maintains their previous notification system.
Auditing (0%)
Pre-enginifcation:
- Katello provided notifications for system actions but no real form of
user action auditing. - Foreman made use of the auditing gem to record and display active
record level user actions.
Katello 2.1/Foreman 1.7:
- Katello still does not make significant use of the auditing gem and
there is no auditing mechanism for non active record actions. - Foreman continues to use auditing gem for active record actions only.
Application Settings (0%)
Pre-enginifcation:
- Katello maintained katello.yml configuration and Katello.config within
code for accessing configuration values for the system. Users also had
preferences for some items stored on them. - Foreman used settings.yml and SETTINGS object within code for system
wide configuration that required server restarts. Foreman also maintained
Settings model for configuring settings from the UI by an administrator
that are system wide.
Katello 2.1/Foreman 1.7:
- Same as pre-enginification.
User Interface Dashboard (0%)
Pre-enginifcation:
- Katello maintained it's own dashboard UI, and dashboarding system.
- Foreman maintained it's own dashboard UI, and dashboarding system.
Katello 2.1/Foreman 1.7:
- Same as pre-enginification.
Error Coding (0%)
Pre-enginification:
- Foreman utilized a system of giving error codes to exceptions
throughout the application code. - Katello had no such system.
Katello 2.1/Foreman 1.7:
- Same as pre-enginification
Archived here:
http://projects.theforeman.org/projects/katello/wiki/ForemanIntegration
Eric