feat: automate CentOS Stream 10 repository mirroring setup

Add configurations to playbooks and templates for local repository mirroring.
This exports and mounts the CentOS Stream 10 local mirror directory (/srv/nfs/cs10),
deploys the Apache configuration serving it from the Hub, and parameters the Koji
external repository bootstrap tasks to synchronize target URLs with local mirrors.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
This commit is contained in:
Rénich Bon Ćirić 2026-06-16 13:48:55 -06:00
commit be9438afdf
Signed by: renich
GPG key ID: AB2A9F49384FE324
7 changed files with 72 additions and 2 deletions

View file

@ -55,21 +55,35 @@
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-baseos
https://mirror.stream.centos.org/10-stream/BaseOS/x86_64/os/
{{ centos_stream_10_baseos_url }}
register: koji_bootstrap_add_baseos_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_baseos_repo_result.stdout"
failed_when: "koji_bootstrap_add_baseos_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_baseos_repo_result.stderr"
- name: Update CentOS Stream 10 BaseOS external repository URL
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo --url={{ centos_stream_10_baseos_url }} centos-stream-10-baseos
changed_when: false
- name: Add CentOS Stream 10 AppStream external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-appstream
https://mirror.stream.centos.org/10-stream/AppStream/x86_64/os/
{{ centos_stream_10_appstream_url }}
register: koji_bootstrap_add_appstream_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_appstream_repo_result.stdout"
failed_when: "koji_bootstrap_add_appstream_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_appstream_repo_result.stderr"
- name: Update CentOS Stream 10 AppStream external repository URL
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo --url={{ centos_stream_10_appstream_url }} centos-stream-10-appstream
changed_when: false
- name: Add CentOS Stream 10 EPEL external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji

View file

@ -197,6 +197,15 @@
- { src: "99-local-policies.conf.j2", dest: "{{ koji_hub_config_dir }}/99-local-policies.conf" }
notify: Restart httpd
- name: Deploy Apache configuration for CentOS 10 mirror
ansible.builtin.template:
src: centos10.conf.j2
dest: /etc/httpd/conf.d/centos10.conf
owner: root
group: root
mode: "0644"
notify: Restart httpd
- name: Set SELinux booleans for Apache
ansible.posix.seboolean:
name: "{{ item }}"

View file

@ -0,0 +1,7 @@
Alias /centos10 "{{ koji_mirror_dir }}"
<Directory "{{ koji_mirror_dir }}">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

View file

@ -30,6 +30,24 @@
opts: "rw,sync"
state: mounted
- name: Create mirror mount point directory
ansible.builtin.file:
path: "{{ koji_mirror_dir }}"
state: directory
owner: "{{ koji_admin_user }}"
group: "{{ koji_admin_user }}"
mode: "0755"
when: inventory_hostname in groups['kojihub']
- name: Mount the Koji Mirror NFS share
ansible.posix.mount:
path: "{{ koji_mirror_dir }}"
src: "{{ koji_nfs_host }}:{{ koji_mirror_dir }}"
fstype: nfs
opts: "rw,sync"
state: mounted
when: inventory_hostname in groups['kojihub']
- name: Set SELinux context for Koji NFS mount
ansible.builtin.command: semanage fcontext -a -t nfs_t "{{ koji_top_dir }}(/.*)?"
changed_when: false

View file

@ -13,6 +13,20 @@
group: nobody
mode: "0755"
- name: Ensure Koji Admin user exists
ansible.builtin.user:
name: "{{ koji_admin_user }}"
state: present
create_home: true
- name: Create the Koji mirror directory to be exported
ansible.builtin.file:
path: "{{ koji_mirror_dir }}"
state: directory
owner: "{{ koji_admin_user }}"
group: "{{ koji_admin_user }}"
mode: "0755"
- name: Add Koji nodes to /etc/hosts on NFS server
ansible.builtin.lineinfile:
path: /etc/hosts

View file

@ -1,3 +1,6 @@
{% for host in groups['koji_nodes'] %}
{{ koji_top_dir }} {{ host }}(rw,sync,no_root_squash)
{% endfor %}
{% for host in groups['kojihub'] %}
{{ koji_mirror_dir }} {{ host }}(rw,sync,no_root_squash)
{% endfor %}

View file

@ -15,6 +15,7 @@ sigul_server: http://localhost:8080/sigul
# Paths & Directories
koji_top_dir: /mnt/koji
koji_mirror_dir: /srv/nfs/cs10
koji_pki_dir: "{{ playbook_dir }}/certs"
kojid_work_dir: /var/lib/kojid
koji_remote_pki_dir: /etc/pki/koji
@ -107,3 +108,7 @@ koji_cleanup_service_path: /etc/systemd/system/koji-cleanup.service
koji_cleanup_timer_path: /etc/systemd/system/koji-cleanup.timer
koji_callbacks_script_path: /usr/local/bin/koji_callbacks.py
koji_callbacks_config_path: /etc/koji-hub/hub.conf.d/callbacks.conf
# External Repository URLs
centos_stream_10_baseos_url: "https://{{ koji_hub_fqdn }}/centos10/baseos/"
centos_stream_10_appstream_url: "https://{{ koji_hub_fqdn }}/centos10/appstream/"