Project

General

Profile

Host Unification

Goals

Main Goal

  • Unify "Content Hosts" and Hosts so that they are one object based on a 'Host'. The content and subscription portions simply become attributes/concerns/aspects of a Host object.

Secondary Goals

  • Create a supported API for katello content and subscription aspects of a host
  • Plan and implement a generic way for Host objects to be split up and be plugable. The host would have different aspects such as Puppet, Provisioning, & Content, any of which are optional.
  • Migrate Content Hosts to scoped search
  • Split apart content and subscription information & logic

Non-Goals

  • Unified host UI

Design

Ideal Design
We have presented two designs, one design based somewhat on this discussion:

https://groups.google.com/forum/#!searchin/foreman-dev/shim/foreman-dev/9ByQmAtKokQ/W2V924xqtYUJ

Design review: https://www.youtube.com/watch?v=gCuvQFcdnqI

Reference design and implementation for puppet aspect here: https://github.com/theforeman/foreman/pull/2555
The feature would be break down to multiple PR's:
Core framework: https://github.com/theforeman/foreman/pull/2665

The goal is to open a pull request with this design implemented for the Puppet related portion and if feedback is positive to proceed with the Content and Subscription portions.

Fallback design:

If this does not go favourably, we present this alternative design which is very similar but simpler in nature:

Host Group attributes today (Content view, Lifecycle Environment) would remain on the Host Group Object

Api/Cli changes

At a minimum, no api/cli changes would be needed and all functionality could remain with the proposed designs using existing controllers and cli commands. However given that the current katello systems controller is 'deprecated', we greatly need to plan for a supported api. Based on the discussions here: https://groups.google.com/forum/#!topic/foreman-dev/4Y4qxyknMwI

From a user perspective all aspects would appear as a single resource and would all be contained within that resource. include[] could be passed on index and show to include the various aspects:

   GET /api/v2/hosts?search="content_attr=foo"&include[]=content
   GET /api/v2/hosts/:id?include[]=content
   GET /api/v2/hosts/:id?include[]=subscriptions
   PUT /api/v2/hosts/:id/packages/install
  PUT /api/v2/hosts/3/  {'content_view_id': 5}

Hammer commands:

  hammer host details --id=3
  hammer host update --content-view=myView
  hammer host errata apply --host-id=3 --errata-ids=RHSA-2014:3

User Stories (P1):

(1 man sprint = 20 points)

  • As a user, I should be able to create a host without a puppet environment (2)
    OR
  • As a developer, I want to split out all puppet concerns to their own 'aspect' (10)
  • As a user, i expect host create/update/delete to be dynflowed (wrapping the AR action), via foreman_tasks or in core to allow plugins to hook into CUD to interact with backend services (4)
  • As a developer, i want to migrate the existing content host model to the new unified models for content and subscriptions (10)
  • As a developer, I want to migrate all the existing content host dynflow actions to use the new unified model (4)
  • As a user, i want an upgrade provided to move existing content-hosts to the new unified models (4)
  • As a developer, I want to pull system packages into the database (3)
  • As a user, I should be able to search hosts by content attributes (2)
  • As a user, I should be able to search hosts by subscription attributes (2)
  • As a user, I expect subscription facts to live alongside puppet facts. (4)
  • As a user, I should be able to add & remove hosts to host collections instead of content-hosts (5)
  • As a user, bulk actions should be based off hosts instead of content hosts (4)
  • As a user, I should be able to register a host with subscription-manager via username and password with the new data model, and a Host should be created (4)
  • As a user, I should be able to register a host with subscription-manager via activation key with the new data model, and a Host should be created (4)
  • As a user, I should be able to register with subscription-manager to an existing host that has never registered with sub-man before (3)
  • As a user, I should be able to register with subscription-manager to an existing host that has previously registered with subscription-manager, and have the old registration be removed, generating a new UUID (3)
  • As a user, virt-who should continue to work with the new unified model, including hypervisor registration. An hypervisor registered through virt-who would have content capabilities. (5)
  • As a user, i expect package profile uploading to continue to work under the unified model (2)
  • As a user, i expect client actions (errata install, package install, etc..) to continue to work under the unified model (3)
  • As a user, i expect the subscription and content aspects of hosts to be identified by their host id, not a uuid (3)
  • As a user, i expect to be able to find the uuid of a host with subscriptions within the UI/hammer (1)
  • As a user, i expect to be able to search hosts by applicable errata (.5)
  • As a user, i expect to be able to search hosts by installed package (.5)
  • As a user, i expect to be able to search hosts by subscription facts (.5)
  • As a user, i expect existing apis (and thus hammer commands and the UI) to continue to work under the new model, if new apis are not added (8)
  • As a user, I expect to see an error when attempting to migrate hosts to another environment if they are registered with subscription-manager (2)
  • As a user, I expect the ability to unsubscribe a host registered with subscription-manager, yet leave the host record intact (2)
  • As a user, I expect any subscription action performed on a host that is not registered to candlepin to throw a warning suggesting that it be registered (2)
  • As a user, I expect any content action performed on a host that is not registered in pulp to throw a warning suggesting how it be registered (2)
  • As a user, I expect content actions to be hidden and not function for a host without any content aspect (3)

User Stories (P2)

  • As a developer, I want an api to inject new apipie params into the params of host & hostgroup Create/Update (5)
  • As a developer, I want an api to define different rabl 'views' of a host/hostgroup for index and show. This may also need to include an 'includes' section for improving performance. (5)
  • As a user, I want to be able to specify what views to render for my host (3)
  • As a user, i expect an api for interacting with content and subscription aspects of hosts (6)
  • As a developer, the content hosts UI needs to utilize new v2 apis for interacting with the subscription and content aspects of a host (8)
  • As a user, I want the ability to force unsubscribe hosts registered with subscription manager when attempting to migrate them across organizations (3)
  • As a hammer developer, I want to be able to inject attributes to display on an info command (4)
  • As a hammer developer, I want to be able to inject parameters into the GET request of a particular info command (8)
  • As a user, I want to see content and subscription related items when running 'hammer host info' (1)
  • As a user, i expect the following hammer commands to be migrated:
    • hammer content-host errata apply (.5)
    • hammer content-host errata info (.5)
    • hammer content-host errata list (.5)
    • hammer content-host package install (.5)
    • hammer content-host package remove (.5)
    • hammer content-host package upgrade e (.5)
    • hammer content-host package upgrade-all (.5)
    • hammer content-host package-group install (.5)
    • hammer content-host package-group remove (.5)
    • hammer content-host update (for updating content view, lifecycle environment) (.5)
    • hammer content-host update (for updating service-level, release-version) (.5)
    • hammer host puppet-classes (.5)
    • hammer host puppetrun (.5)
h2 User Stories (P3)
  • As a developer, I want to pull in subscriptions and related hosts into the database (7)
  • As a user, I expect to search for hosts by their subscriptions (.5)