Rework package management to allow composition of dependencies
@smortex is already working on this.
Since Jan 10, 2025.
Assessment
This issue has not been assessed yet.
Description
This issue has the purpose of tracking progress for improving the way the puppet-python module manage packages.
Issues we want to solve
In these example, we assume a control-repo with a profile::python class that wraps the puppet-python module with site-specific config:
class profile::python {
class { 'python':
ensure => present,
# ...
}
}
System packages with dependencies on python-foo
The syslog-ng-mod-python package depend on python-venv. When this package is added to the catalog, puppet will install syslog-ng-mod-python, which will install python-venv as a dependency. On next run, python-venv is removed (because the python class default to ensure this package is absent) and syslog-ng-mod-python which depend on it is also removed.
To workaround this issue, we can skip management of the python-venv in the python module with:
class profile::python {
class { 'python':
# ...
manage_venv_package => false, # python-venv is a dependency of syslog-ng-mod-python
}
}
If another node need to have the venv package installed, we have a few solutions:
- Add a parameter to the
profile::pythonand use Hiera to set it to a custom value on the nodes that must have different behavior; - Duplicate and adjust the
profile::pythonclass (e.g.profile::python_with_venv) and include one or the other of these two conflicting profiles, leading to some duplication; - Manage the
python-venvpackage in the profile that need it, duplicating what the puppet-python module is supposed to manage.
None of these solutions is great.
Puppet modules needing a specific component
The puppet-puppetboard module rely on the puppet-python module. When installing from a venv, it include this code in the catalog:
class { 'python':
version => $python_version,
dev => 'present',
venv => 'present',
}
This clash with the above profile::python. To cope with this, the module provide a manage_virtualenv parameter to skips this fragment and allow the user to handle this themself, with the same solutions and same drawbacks as seen in the previous example.
How puppetlabs-apache handle a similar issue
Apache has a lot of different modules, but each one is managed in a different class allowing to do some composition of the dependencies from another puppet module, e.g.:
class taiga::vhost {
include apache
include apache::mod::passenger
# ...
}
For the end-user include taiga::vhost will do the right thing, and if they want to customize the apache::mod::passenger parameters, they can do this in their code:
class profile::taiga {
class { 'apache::mod::passenger':
# ... this would be in a passenger specific profile
}
class { 'taiga::vhost':
# ...
}
}
Roadmap
After this long context, I propose to rework the module package management to match what is done by puppetlabs-apache, make it easier to manage dependencies in consumer modules and avoid conflicts.
This is a three step process:
- Allow to opt-out of management of
python-dev(enhancement) #669 [Released in v7.1.0]; - Move components installation code in dedicated classes (enhancement) #670;
- Change defaults for packages which are ensured absent by default: switch them to installed but do not manage them by default (backwards-incompatible).
- Dominant language
- Ruby
- Stars
- 196
- Forks
- 372
- Avg merge
- 1d 18m
- Merged PRs (30d)
- 4
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from voxpupuli/puppet-python
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 45/100
voxpupuli/puppet-python#743 · 1 comment ·
-
enhancement
Difficulty 3/5 1-2 days Newbie friendliness 35/100
voxpupuli/puppet-python#721 · 1 reaction ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 35/100
voxpupuli/puppet-python#712 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
voxpupuli/puppet-python#711 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 52/100
voxpupuli/puppet-python#673 · 1 comment ·
All issues in voxpupuli/puppet-python
Similar issues
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
バグ
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
voxpupuli/puppet-epel#186 · 1 comment ·
-
external_created_at is no longer used for the message timestamp since the new message UI (v4.4.0) OpenBug Frontend
Difficulty 2/5 1-3 hours Newbie friendliness 78/100