- Switched from systemd path monitoring to a custom wrapper script `mxos-trigger-dist-repo.sh` spawned by the Koji signing spooler. - Wrapper script runs Koji `dist-repo` synchronously and triggers the `mxos-repo-sync.sh` script to perform an atomic rsync of packages to the Caddy server. - Excluded reposerver from distro-sync to work around VM disk space constraints. - Configured Koji tag `mxos0` to cancel older pending/running `distRepo` tasks when a new one is triggered. - Verified successful repository generation, synchronization, and DNF resolution. Co-developed-by: Gemini AI <renich+gemini@woralelandia.com> Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
273 lines
11 KiB
YAML
273 lines
11 KiB
YAML
---
|
|
- name: Add kojira user
|
|
ansible.builtin.command: "sudo -u {{ koji_admin_user }} koji --config={{ koji_hub_admin_user_koji_dir }}/config add-user kojira"
|
|
register: koji_bootstrap_add_user_result
|
|
changed_when: "'User added' in koji_bootstrap_add_user_result.stdout"
|
|
failed_when: "koji_bootstrap_add_user_result.rc != 0 and 'already exists' not in koji_bootstrap_add_user_result.stderr"
|
|
|
|
- name: Grant repo permission to kojira user
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
grant-permission repo kojira
|
|
register: koji_bootstrap_grant_permission_result
|
|
changed_when: "'Permission granted' in koji_bootstrap_grant_permission_result.stdout"
|
|
failed_when: "koji_bootstrap_grant_permission_result.rc != 0 and 'already has permission' not in koji_bootstrap_grant_permission_result.stderr"
|
|
|
|
- name: Create main build tag
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-tag --arches x86_64 {{ koji_build_tag }}
|
|
register: koji_bootstrap_add_tag_result
|
|
changed_when: "'Tag created' in koji_bootstrap_add_tag_result.stdout"
|
|
failed_when: "koji_bootstrap_add_tag_result.rc != 0 and 'already exists' not in koji_bootstrap_add_tag_result.stderr"
|
|
|
|
- name: Create x86_64 build tag
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-tag --parent {{ koji_build_tag }} --arches x86_64 {{ koji_build_tag }}-build
|
|
register: koji_bootstrap_add_arch_tag_result
|
|
changed_when: "'Tag created' in koji_bootstrap_add_arch_tag_result.stdout"
|
|
failed_when: "koji_bootstrap_add_arch_tag_result.rc != 0 and 'already exists' not in koji_bootstrap_add_arch_tag_result.stderr"
|
|
|
|
- name: Enable automatic build NVR bumping
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
edit-tag --extra autorelease=1 {{ koji_build_tag }}-build
|
|
register: koji_bootstrap_edit_tag_result
|
|
changed_when: "'Tag updated' in koji_bootstrap_edit_tag_result.stdout"
|
|
failed_when: "koji_bootstrap_edit_tag_result.rc != 0 and 'tag not found' not in koji_bootstrap_edit_tag_result.stderr"
|
|
|
|
- name: Create build target
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-target {{ koji_build_tag }} {{ koji_build_tag }}-build
|
|
register: koji_bootstrap_add_target_result
|
|
changed_when: "'Target created' in koji_bootstrap_add_target_result.stdout"
|
|
failed_when: "koji_bootstrap_add_target_result.rc != 0 and 'already exists' not in koji_bootstrap_add_target_result.stderr"
|
|
|
|
- name: Configure external repositories
|
|
block:
|
|
- name: Ensure external repositories exist globally
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-external-repo {{ item.name }} {{ item.url }}
|
|
loop:
|
|
- { name: "centos-stream-10-baseos", url: "{{ centos_stream_10_baseos_url }}" }
|
|
- { name: "centos-stream-10-appstream", url: "{{ centos_stream_10_appstream_url }}" }
|
|
- { name: "centos-stream-10-epel", url: "https://mirror.facebook.net/fedora/epel/10/Everything/x86_64/" }
|
|
- { name: "centos-stream-10-crb", url: "https://mirror.stream.centos.org/10-stream/CRB/x86_64/os/" }
|
|
register: koji_add_ext_repo_global
|
|
changed_when: "'External repository created' in koji_add_ext_repo_global.stdout"
|
|
failed_when: "koji_add_ext_repo_global.rc != 0 and 'already exists' not in koji_add_ext_repo_global.stderr"
|
|
|
|
- name: Ensure external repositories are associated with tag
|
|
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 {{ item.name }}
|
|
loop:
|
|
- { name: "centos-stream-10-baseos" }
|
|
- { name: "centos-stream-10-appstream" }
|
|
- { name: "centos-stream-10-epel" }
|
|
- { name: "centos-stream-10-crb" }
|
|
register: koji_add_ext_repo_tag
|
|
changed_when: "'Added external repo' in koji_add_ext_repo_tag.stdout"
|
|
failed_when: "koji_add_ext_repo_tag.rc != 0 and 'already associated' not in koji_add_ext_repo_tag.stderr"
|
|
|
|
- name: Ensure external repository URLs are updated
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
edit-external-repo --url={{ item.url }} {{ item.name }}
|
|
loop:
|
|
- { name: "centos-stream-10-baseos", url: "{{ centos_stream_10_baseos_url }}" }
|
|
- { name: "centos-stream-10-appstream", url: "{{ centos_stream_10_appstream_url }}" }
|
|
- { name: "centos-stream-10-epel", url: "https://mirror.facebook.net/fedora/epel/10/Everything/x86_64/" }
|
|
- { name: "centos-stream-10-crb", url: "https://mirror.stream.centos.org/10-stream/CRB/x86_64/os/" }
|
|
changed_when: false
|
|
|
|
- name: Ensure external repository merge modes and priorities are set to bare
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
edit-external-repo -t {{ koji_build_tag }}-build -m bare -p {{ item.priority }} {{ item.name }}
|
|
loop:
|
|
- { name: "centos-stream-10-baseos", priority: 25 }
|
|
- { name: "centos-stream-10-appstream", priority: 30 }
|
|
- { name: "centos-stream-10-epel", priority: 15 }
|
|
- { name: "centos-stream-10-crb", priority: 20 }
|
|
changed_when: false
|
|
|
|
- name: Download repomd.xml from CentOS Stream 10 build repo
|
|
ansible.builtin.get_url:
|
|
url: https://kojihub.stream.centos.org/kojifiles/repos/c10s-build/latest/x86_64/repodata/repomd.xml
|
|
dest: /tmp/c10s-repomd.xml
|
|
|
|
- name: Install zstd for decompression of comps
|
|
ansible.builtin.dnf:
|
|
name: zstd
|
|
state: present
|
|
|
|
- name: Extract comps.xml path
|
|
ansible.builtin.shell: grep 'comps.xml' /tmp/c10s-repomd.xml | head -n 1 | sed -e 's/.*href="//' -e 's/".*//'
|
|
register: comps_path
|
|
changed_when: false
|
|
|
|
- name: Download comps.xml
|
|
ansible.builtin.get_url:
|
|
url: "https://kojihub.stream.centos.org/kojifiles/repos/c10s-build/latest/x86_64/{{ comps_path.stdout }}"
|
|
dest: /tmp/c10s-comps-raw
|
|
|
|
- name: Decompress comps.xml if needed
|
|
ansible.builtin.shell: |
|
|
set -e
|
|
file_type=$(file -b --mime-type /tmp/c10s-comps-raw)
|
|
if [[ "$file_type" == "application/zstd" ]]; then
|
|
unzstd -f -o /tmp/c10s-comps.xml /tmp/c10s-comps-raw
|
|
elif [[ "$file_type" == "application/gzip" || "$file_type" == "application/x-gzip" ]]; then
|
|
gunzip -c /tmp/c10s-comps-raw > /tmp/c10s-comps.xml
|
|
else
|
|
cp -f /tmp/c10s-comps-raw /tmp/c10s-comps.xml
|
|
fi
|
|
changed_when: true
|
|
|
|
- name: Import comps groups
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
import-comps /tmp/c10s-comps.xml {{ koji_build_tag }}-build
|
|
register: koji_bootstrap_import_comps_result
|
|
changed_when: "'Groups imported' in koji_bootstrap_import_comps_result.stdout"
|
|
|
|
- name: Create build group on tag
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-group {{ koji_build_tag }}-build build
|
|
register: koji_add_group_build_result
|
|
changed_when: "'Group added' in koji_add_group_build_result.stdout"
|
|
failed_when: "koji_add_group_build_result.rc != 0 and 'already exists' not in koji_add_group_build_result.stderr"
|
|
|
|
- name: Create srpm-build group on tag
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-group {{ koji_build_tag }}-build srpm-build
|
|
register: koji_add_group_srpm_result
|
|
changed_when: "'Group added' in koji_add_group_srpm_result.stdout"
|
|
failed_when: "koji_add_group_srpm_result.rc != 0 and 'already exists' not in koji_add_group_srpm_result.stderr"
|
|
|
|
- name: Populate build group packages
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-group-pkg {{ koji_build_tag }}-build build {{ item }}
|
|
loop:
|
|
- bash
|
|
- bzip2
|
|
- coreutils
|
|
- cpio
|
|
- diffutils
|
|
- findutils
|
|
- gawk
|
|
- gcc
|
|
- gcc-c++
|
|
- grep
|
|
- gzip
|
|
- info
|
|
- make
|
|
- patch
|
|
- redhat-rpm-config
|
|
- rpm-build
|
|
- sed
|
|
- tar
|
|
- unzip
|
|
- util-linux
|
|
- which
|
|
- shadow-utils
|
|
register: koji_add_group_pkg_build_result
|
|
changed_when: "'Added package' in koji_add_group_pkg_build_result.stdout"
|
|
failed_when: "koji_add_group_pkg_build_result.rc != 0 and 'already in group' not in koji_add_group_pkg_build_result.stderr"
|
|
|
|
- name: Populate srpm-build group packages
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-group-pkg {{ koji_build_tag }}-build srpm-build {{ item }}
|
|
loop:
|
|
- bash
|
|
- gnupg2
|
|
- make
|
|
- redhat-rpm-config
|
|
- rpm-build
|
|
- shadow-utils
|
|
- tar
|
|
- unzip
|
|
- wget
|
|
- curl
|
|
register: koji_add_group_pkg_srpm_result
|
|
changed_when: "'Added package' in koji_add_group_pkg_srpm_result.stdout"
|
|
failed_when: "koji_add_group_pkg_srpm_result.rc != 0 and 'already in group' not in koji_add_group_pkg_srpm_result.stderr"
|
|
|
|
- name: Add Koji builder hosts
|
|
ansible.builtin.include_tasks: add_host.yaml
|
|
loop: "{{ groups['kojibuilders'] }}"
|
|
|
|
- name: Restart httpd on kojihub to apply Koji changes
|
|
ansible.builtin.service:
|
|
name: httpd
|
|
state: restarted
|
|
delegate_to: "{{ groups['kojihub'][0] }}"
|
|
run_once: true
|
|
|
|
- name: Add Koji builder hosts to createrepo channel
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-host-to-channel {{ item }} createrepo
|
|
loop: "{{ groups['kojibuilders'] }}"
|
|
register: koji_bootstrap_add_host_to_channel_result
|
|
changed_when: "'Host added to channel' in koji_bootstrap_add_host_to_channel_result.stdout"
|
|
failed_when: "koji_bootstrap_add_host_to_channel_result.rc != 0 and 'is already subscribed' not in koji_bootstrap_add_host_to_channel_result.stderr"
|
|
|
|
- name: Set Koji builder host capacity
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
edit-host --capacity={{ kojid_max_jobs }} {{ item }}
|
|
loop: "{{ groups['kojibuilders'] }}"
|
|
changed_when: true
|
|
|
|
- name: Regenerate repo
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
regen-repo {{ koji_build_tag }}
|
|
changed_when: false
|
|
|
|
- name: Create builder user
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-user builder
|
|
register: koji_bootstrap_add_builder_user_result
|
|
changed_when: "'User added' in koji_bootstrap_add_builder_user_result.stdout"
|
|
failed_when: "koji_bootstrap_add_builder_user_result.rc != 0 and 'already exists' not in koji_bootstrap_add_builder_user_result.stderr"
|
|
|
|
- name: Add default packages to main tag
|
|
ansible.builtin.command: >
|
|
sudo -u {{ koji_admin_user }} koji
|
|
--config={{ koji_hub_admin_user_koji_dir }}/config
|
|
add-pkg --owner {{ koji_admin_user }} {{ koji_build_tag }} {{ item }}
|
|
loop:
|
|
- bash
|
|
register: koji_add_pkg_result
|
|
changed_when: "'Adding 0 packages' not in koji_add_pkg_result.stdout"
|
|
failed_when: koji_add_pkg_result.rc != 0
|
|
|