62e8202e61
Update requirements to current global-requirements including Sphinx 1.5. Add pbr as requirement. Use update-requirements from requirements repo to sync content. Migrate pbr's obsolete warnerrors to Sphinx' warning-is-error. Fix any sphinx problems. Change-Id: Id7d5783c5d5c1077d03ddcb18d813699561579e3
153 lines
3.7 KiB
ReStructuredText
153 lines
3.7 KiB
ReStructuredText
::
|
|
Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
|
|
This work is licensed under a Creative Commons Attribution 3.0
|
|
Unported License.
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
|
|
|
|
==================================================
|
|
Refactor openstack_project::{server,base,template}
|
|
==================================================
|
|
|
|
Problem Description
|
|
===================
|
|
|
|
Right now there are three 'main' classes in puppet. They are
|
|
|
|
openstack_project::server
|
|
openstack_project::base
|
|
openstack_project::template
|
|
|
|
All three of these control resources that matter to most systems. Server
|
|
contains template, template contains base. Then usually an application
|
|
has a class that wraps server.
|
|
|
|
The problem with this is that if you want to make a change to a resource
|
|
that is controlled in base, parameters must be added to allow you pass in
|
|
changes to the application class, then to the server class, then to the
|
|
template class, finally picking it up again in the base class.
|
|
|
|
|
|
Storyboard Link
|
|
===============
|
|
|
|
https://storyboard.openstack.org/#!/story/2000172
|
|
|
|
|
|
Proposed Change
|
|
===============
|
|
|
|
I propose we flatten server, base, and template to a single class called
|
|
server. All the parameters can be flattened as well, and if statements added
|
|
to allow someone or something who really wanted 'template' to get just those
|
|
resoruces. (nodepool prepare node jumps directly into template, its the only
|
|
place I've found so far that base or template are called directly)
|
|
|
|
Additionally I propose we pull the openstack_project::server invocation
|
|
out of the application classes and put it in the node definition. Example:
|
|
|
|
.. code-block:: puppet
|
|
|
|
node 'review.openstack.org' {
|
|
class { 'openstack_project::server':
|
|
iptables_tcp_public_ports => [80, 443, 29418],
|
|
sysadmins => hiera('sysadmins', 'default'),
|
|
}
|
|
class {'openstack_project::review':
|
|
# ... other params ..
|
|
}
|
|
}
|
|
|
|
|
|
When every node in the environment takes the same openstack_project::server
|
|
class, that means that the differences between two nodes can be thought of
|
|
as the array of parameters passed into those servers. It makes servers more
|
|
like each other and easier to reason about. It also frees the application
|
|
class to do what it does best, which is set up the application. o_p::server
|
|
handles all the base configuration and o_p::application handles the application.
|
|
|
|
Alternatives
|
|
------------
|
|
|
|
We could remain the same. We could flatten server, base, and template without
|
|
pulling the openstack_project::server invocation out of the application class.
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Server class would be expanded to include the parameters and resources
|
|
of base class and template class. New parameters would be added so that
|
|
there is a way to get just the resources of template and base.
|
|
|
|
Application classes would be modified to not need server class, site.pp
|
|
would be modified.
|
|
|
|
|
|
Assignee(s)
|
|
-----------
|
|
|
|
Primary assignee:
|
|
nibalizer
|
|
|
|
Gerrit Topic
|
|
------------
|
|
|
|
Use Gerrit topic "downstream-puppet" for all patches related to this spec.
|
|
|
|
.. code-block:: bash
|
|
|
|
git-review -t downstream-puppet
|
|
|
|
Work Items
|
|
----------
|
|
|
|
* base.pp flatten
|
|
* template.pp flatten
|
|
* refactor of places where those classes are used
|
|
* refactor of server.pp
|
|
* application specific refactors + site.pp changes
|
|
|
|
|
|
Repositories
|
|
------------
|
|
|
|
No new git repos
|
|
|
|
Servers
|
|
-------
|
|
|
|
Puppet change only
|
|
|
|
DNS Entries
|
|
-----------
|
|
|
|
Puppet change only
|
|
|
|
Documentation
|
|
-------------
|
|
|
|
Largely should be transparent to anyone who isn't mucking around in
|
|
infra internals
|
|
|
|
Security
|
|
--------
|
|
|
|
No security implications
|
|
|
|
Testing
|
|
-------
|
|
|
|
apply-test will provide acceptance testing
|
|
|
|
Dependencies
|
|
============
|
|
|
|
No known dependencies
|
|
|
|
|
|
|
|
|
|
|