[katello-devel] Katello Backend Service Relationships and Architecture

Petr Chalupa pchalupa at redhat.com
Wed Dec 12 14:49:17 UTC 2012


I am not sure if I understand it correctly, so I've decided to send my 
version to make sure that we are on the same track.

## Legend

- black edges are representing knowledge dependency as before
- red represents modules and direction in which they are included 
(Interpretation id: what knowledge ActiveRecord model gains when a 
module is included)
- green represents services
- 1) in reality there is one step skipped, instantiation of an object 
from foreman_api gem and creating a singleton, see [1]

## Where I see differences

- Candlepin doesn't have a Rubygem with Ruby bindings, they are placed 
in /lib
- In Foreman there is one additional layer "Remote resource 
representation". Objects of the layer are replacing lazy_accessors and 
they are introducing missing separation between data from Katello and 
remote service.
- There are no controllers with full CRUD to manipulate with non-Katello 
data in Pulp or Candlepin. There are in Foreman and they are using added 
representation of remote resources.

## Implementation notes

- All classes in "Remote resource representation" are children of 
Resources::ForemanModel which is representation of any Foreman remote 
resource. Resources::ForemanModel is inheriting from 
Resources::AbstractModel which is representation of any remote resource. 
(AbstractModel  could also by used for Candlepin and Pulp)

More documentation is on wiki [2]

If you have any additional questions about the Foreman please send me an 
email and I'll prepare answers for deep dive tomorrow.

Petr

[1] 
https://github.com/Katello/katello/blob/pulpv2/src/lib/resources/foreman.rb
[2] https://fedorahosted.org/katello/wiki/ForemanIntegrationAPI

## Other resources

There were at least 3 long threads about this topic I think. I didn't 
have luck finding them but if you want I can try harder.


On 06.12.12 19:04, Bryan Kearney wrote:
> On 12/05/2012 09:20 PM, Eric D Helms wrote:
>> They say a picture is worth a thousands words, and after, for lack of a
>> better word, being bugged by the differences in backend service
>> integration I decided to try and spell out the current lay of the land.
>>   I have attempted to do this in two ways.  The first being a diagram
>> showing how our models, glue and controllers are laid out in relation to
>> backend services with arrows indicating the directional awareness that
>> one entity has with another.  For example, an arrow pointing from
>> glue/candlepin to resources/candlepin since glue/candlepin has direct
>> knowledge of the resources but not vice versa.  Second, I have attempted
>> to quell out into bullet points how each backend service is currently
>> (and by this I mean as of PulpV2 branch) integrated.
>>
>> Disclaimer:  This is my understanding of things and there are places
>> where I could have gotten something wrong or mis-represented that actual
>> implementation
>>
>> Reference Diagram:
>> https://docs.google.com/drawings/d/1lK-BozdUbTBJPnvSv40uCtzy4_Y1qUZCIJesq_pqsHY/edit
>>
>>
>> Note: This is taking into consideration the changes made in the PulpV2
>> branch and current Candlepin and Foreman work in master
>>
>>
>> *PulpV2*
>>
>> - All Pulp functionality is contained within app/models/glue/pulp
>> - All glue layers are modules that are included into the Katello model
>> if use_pulp = true
>> - Katello Models are treated as the main entity, with Pulp glue layer
>> adding functionality if included
>> - Even non-persisted objects have a top-level representation in Katello
>> (e.g. errata, package, distribution)
>> - Nothing is proxied
>> - Basic functionality is orchestrated (CRUD)
>> - Use of callbacks and hooks to trigger top-level events that can be
>> listened to by glue layer
>> - There is no notion of pulp outside the glue layer
>>
>>
>> *Candlepin*
>>
>> - Contains a single Candlepin only model without corresponding inclusion
>> in a Katello entity (OwnerInfo)
>> - Contains some proxied functionality mainly for subscription manager
>> - Not all Candlepin functionality is contained in glue layer
>> - Basic functionality is orchestrated (CRUD)
>>
>>
>> *Foreman*
>>
>> - Foreman is front and center at all layers
>> - Controllers for API and UI are under foreman/ and namespaced
>> - Models are under foreman/ and are classed as Foreman::
>> - Katello models that have corresponding Foreman model also get a
>> separate model file besides their glue layer counterpart (i.e.
>> models/foreman/user)
>> - Other models have lightweight representations and are entirely pass
>> through objects down to Foreman but are not top-level Katello entities
>> - Glue layer is fenced off and only included if use_foreman set to true
>>
>>
>> *ElasticSearch*
>>
>> - All ES functionality is contained within app/models/glue/elasticsearch
>> - All glue layers are modules that included into the corresponding
>> Katello model
>> - Adds functionality but does not directly impart itself into the models
>> - Use of callbacks and hooks to trigger top-level events that can be
>> listened to by glue layer
>>
>>
>> I am hoping this will spark some discussion, as I worry that the
>> differences in integration points for each backend service will only
>> make our lives as developers more difficult down the road.
>>
>> -Eric
>>
>>
>> _______________________________________________
>> katello-devel mailing list
>> katello-devel at redhat.com
>> https://www.redhat.com/mailman/listinfo/katello-devel
>>
>
> I agree with the Deep Dive. Dmitri had expressed similar concerns. Who
> from € wants to set this up?
>
> -- bk
>
> _______________________________________________
> katello-devel mailing list
> katello-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/katello-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graph.dot
Type: application/msword
Size: 1908 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/katello-devel/attachments/20121212/dfa44df4/attachment.dot>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graph.pdf
Type: application/pdf
Size: 20402 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/katello-devel/attachments/20121212/dfa44df4/attachment.pdf>


More information about the katello-devel mailing list