Repository Management in Extras¶
Include the URL of your launchpad blueprint:
https://blueprints.launchpad.net/puppet-openstack/+spec/extras-repository-refactor
Problem description¶
Currently it is necessary to maintain a separate module to handle base repositories and any other repos that are needed for operation. This patch seeks to allow arbitrary definitions of repositories via hash parameters and create_resources integrated with and alongside the rdo and uca options already available.
This patch will also define a sensible directory structure to use, so that common code between similar systems can be shared.
Proposed change¶
Create classes that manage arbitrary repositories but also RDO and UCA. Share code for similar systems where possible. Define directory structure for repo management
Alternatives¶
Port the current repo management code across
This results in an implicit requirement to use either data-bindings or another class with collectors to override resources in the case where the user wants to provide their own baseurl for epel, or provide a proxy, since the parameters for those resources are not exposed to the class.
If every parameter for each resource is exposed, we end up with a bloated interface for the classes.
A suggestion was made to use stahnma’s epel class, but this is an even greater exaggeration of this problem since that class has so many parameters. Instead, we should offer to not manage epel, and allow the user to include the epel module if they wish, while continuing to offer a convenience parameter with the current defaults.
Data model impact¶
None
Module API impact¶
New classes for debian:
openstack_extras::repo::debian::ubuntu openstack_extras::repo::debian::debian openstack_extras::repo::debian::params
- Parameters for debian osfamily:
release : The openstack release name
manage_[uca|whz] : whether to add the default uca/wheezy repo
source_hash : a hash of apt::source resources
source_defaults : a hash of apt::source parameters for defaults
package_require : whether to use a collector for all packages to require apt-get update
New classes for redhat:
openstack_extras::repo::redhat::redhat openstack_extras::repo::redhat::params
- Parameters for redhat osfamily:
release : The openstack release name
manage_rdo : whether to add the default rdo repo
repo_hash : a hash of yumrepo resources
repo_defaults : a hash of yumrepo parameters for defaults
gpgkey_hash : a hash of file resources to create gpg keys
gpgkey_defaults : a hash of file parameters for defaults
purge_unmanaged : whether to purge unmanaged yum repos from yum.repos.d
package_require : whether to use a collector for all packages to require all yum repos
Directory structure should follow:
openstack_extras::repo::${downcase(::osfamily)}::${downcase(::operatingsystem)}
currently redhat, centos, fedora all handled using RDO, but leave the option to diverge later
New functions:
We need some functions that will perform validation on the hashes passed to file and yumrepo to catch typos as early as possible.
End user impact¶
None
Performance Impact¶
None
Deployer impact¶
Allows deployers to manage all repos on their system without having to make their own class.
Deployers will need to understand how to pass resource hashes around in order to take advantage of this. Hiera example will be provided. All users of the current repo mgmt system should migrate to the new format at their leisure - the old classes will not be changed.
Developer impact¶
None
Implementation¶
Assignee(s)¶
michchap
Work Items¶
debian/ubuntu support redhat/centos/fedora support
Dependencies¶
Adds apt dependency to openstack_extras
Testing¶
rspec for unit tests will be integrated into aptira’s product during testing for integration tests
Documentation Impact¶
Complete change of repo management API
References¶
None