# Tripleo Repos Yum Module
## Goal
Enable a set of repos and modules
## Reference: model after get_hash
https://review.opendev.org/c/openstack/tripleo-repos/+/789535
## Data input
https://github.com/mwhahaha/rhos-bootstrap/blob/main/versions/centos.yaml#L37-L40
## Execution
Execute dnf/yum command to update the yum module setting.
## Cli Design
### Enabling a specific module
`yum-module enable-module container-tools --module-version 3.0`
It will be overriding
*/etc/dnf/modules.d/container-tools.module*
```
[container-tools]
name=container-tools
stream=3.0 <this part gots overriden>
profiles=
state=enabled
```
### Enabling a specific repo
`yum-module enable-repo appstream --enable`
It will go into /etc/yum.repos.d/ look for CentOS-Stream-AppStream.repo repo
and
```
[appstream]
name=CentOS-Stream - AppStream
baseurl=https://mirror.mtl01.inap.opendev.org/centos/$stream/AppStream/$basearch/os/
gpgcheck=1
enabled=0 <this part will be change to one>
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
```
Similar operations needs to be happen for all repos like:
```
yum-module enable-repo appstream --change-base_url <foobar.xyz>
```
## Unit Tests:
+++++
## Use Cases:
* need rlandy's input for dep pipeline -
The dependency pipeline is used to test $next. For example with container-tools, that is usually rhel* version or the next stable version.
There are also virt modules ( using advanced virt atm).
See rhos-release as an example http://git.app.eng.bos.redhat.com/git/rhos-release.git/tree/repos/rhos-release-rhel-8.4.repo
* Main point is to make sure we single source here and don't enable/disable different versions
* majority use case.. just to run command and update module
## Where this will be available
* src - tripleo-repos
* public PyPI
## How a consumer would execute
* python setup
* pip install
* command line cli
* an associated ansible module
## Design
* ConfigParser to edit ini files
* https://docs.python.org/3/library/configparser.html
* Argparse for command-line options
* https://docs.python.org/3/library/argparse.html
* CLI proposal:
1. Update yum repo:
```
sudo tripleo-yum-config repo appstream --enable --set-opts baseurl=http://newurl exclude="some-package*"
sudo tripleo-yum-config repo test-debug --enable --config-file-path /etc/yum.repos.d/test.repo
```
2. Update yum module:
```
sudo tripleo-yum-config module nginx --enable --set-opts stream=mainline
```
3. Update yum global configuration:
```
sudo tripleo-yum-config global --set-opts keepcache=0 cachedir="/var/cache/dnf"
```
* Ansible module
## Questions
* Module name:
* yum-module? yum-config?
* (dviroel) Is a configuration file required?
* So far, only *yum repo/module file path* would be configurable
* We can consider a *--config-file-path* argument in cli instead
## Alternatives
1. Ansible module alternative:
```
- name: Enable appstream repo
ini_file:
dest: /etc/yum.repos.d/appstream.repo
section: appstream
option: enabled
value: 1
```