DRAFT HLD for Tripleo repos and repo-setup role =============================================== ###### tags: `Design` Tripleo-repos hackmd: https://hackmd.io/v2jCX9RwSeuP8EEFDHRa8g ## Option 1 for repo-setup role ``` tree: repo-setup/ tasks/pre.yaml tasks/main.yaml tasks/post.yaml ``` main.yaml: ```yaml - tripleo_repos: repo: ... config: ... - tripleo_repos: repo: ... config: ... ``` ## Option 2 for repo-setup role ``` tree: repo-setup/ tasks/main.yaml tasks/victoria.yaml tasks/wallaby.yaml ``` main.yaml: ```yaml - some_pre_tasks: ... - include: "{{ release }}.yaml - some_post_tasks: ... ``` ## Functionality ### Defaults ```yaml release: master docker_registry_namespace: "tripleo{{ release }}" distro: centos distro_number_version: 8 distro_version: 8-stream promote_source: current-tripleo rdo_url: "{{ proxy_rdo | default(https://trunk.rdoproject.org) }}" centos_url: "{{ proxy_centos | default(http://mirror.centos.org/centos) }}" dlrn_baseurl: "{{ rdo_url }}/{{ distro_number_version }}-{{ release }}" centos_baseurl: "{{ centos_url }}/{{ distro_version }}" gating_repo_name: gating-repo ``` ### create repo from template #### CLI: `tripleo-repos add-repo --name=... --filename=... --baseurl=... --includepgks=... --enabled=1 --gppcheck=1 --priority=1 ...` #### YAML config file: ```yaml add_repos: - name: ... filename: ... baseurl: ... includepgks: ... enabled: ... ``` #### Ansible module: ```yaml - tripleo_repos: add_repo: - name: ... filename: ... baseurl: ... includepgks: ... enabled: ... - name: ... filename: ... baseurl: ... includepgks: ... enabled: ... ``` ### Use environment variables, for example for proxies #### CLI: `tripleo-repos --env-file /etc/ci/mirrors.sh action ....` #### YAML config file: ```yaml env_file: - /etc/ci/mirrors.sh - /tmp/env_vars ``` #### Ansible module: ```yaml - tripleo_repos: env: - /etc/ci/mirrors.sh - /tmp/env_vars add_repo: - baseurl: ... includepgks: ... enabled: ... - baseurl: ... includepgks: ... enabled: ... ``` ### Proxy set * Set CI proxies for new repos * Set CI proxies for current files, like CentOS base repos etc * Set custom proxies for CentOS repos * Downstream mirrors should be exactly as upstream ones * CentOS proxies are set as mirrorlist by default, not as baseurl. * either we change files * or we create new ones (as it's done now) * then need to have the whole list of repos for CentOS #### CLI: `tripleo-repos --ci-proxy-from /etc/ci/mirrors.sh ... ` ### Set DLRN repo, add priority, add includepgks, calculate DLRN hash, apply available proxies. what repo-setup does: 1. downloads repo file from URL 2. change priority of that repo is configured 3. change name if configured 4. change includepkgs and other params if configured possible ways to install repo: 1. Create it from scratch 2. Download a file and tweak it 3. Install with yum/dnf (like epel-release package, etc), incl. custom commands #### CLI: `tripleo-repos --dlrn-repo current-tripleo --dlrn-resolve-hash --ci-proxy-from /etc/ci/mirrors.sh --repo-priority 1` #### YAML config: ```yaml add_repos: - name: delorean.repo dlrn_repo: current-tripleo dlrn_resolve_hash: true ci_proxy_from: /etc/ci/mirrors.sh repo_priority: 1 - name: delorean-current.repo dlrn_repo: delorean-current dlrn_resolve_hash: true ci_proxy_from: /etc/ci/mirrors.sh repo_priority: 10 repo_name: delorean-current ``` #### Asible module: ```yaml - tripleo_repos: add_repo: - dlrn_repo: current-tripleo dlrn_resolve_hash: true ci_proxy_from: /etc/ci/mirrors.sh - dlrn_repo: current dlrn_resolve_hash: true ci_proxy_from: /etc/ci/mirrors.sh repo_priority: 10 repo_name: delorean-current ``` Possible config: master.yaml: ```yaml add_repos: - name: delorean.repo dlrn_repo: current-tripleo dlrn_resolve_hash: true #ci_proxy_from: /etc/ci/mirrors.sh repo_priority: 1 - name: delorean-current.repo dlrn_repo: delorean-current dlrn_resolve_hash: true #ci_proxy_from: /etc/ci/mirrors.sh repo_priority: 10 repo_name: delorean-current includepgks: - ... - ... # other repos ..... centos8: - highavailability - powertools ceph: - octopus modules: - container-tools: rhel8 - virt: rhel ci_proxy_from: /etc/ci/mirrors.sh # centos_proxy: # rdo_proxy: ``` ## Personas * Customer: https://code.engineering.redhat.com/gerrit/#/c/233961/ * Downstream: * rhos-release use case * http://git.app.eng.bos.redhat.com/git/rhos-release.git/tree/rhos-release has no option to set modules (AFAIK) * <lon> when you run rhos-release -r 8.4, it installs the repos then performs the ACTION lines * `--no-action` disable post-installation actions will skip the actions and we could use tripleo-repos functionality to set those. * `rhos-release ceph-5 -r 8.4` would set down all the repos except DLRN and related deps (ansible not included) - see http://git.app.eng.bos.redhat.com/git/rhos-release.git/tree/repos/rhos-release-rhel-8.4.repo * In conjuction with rhos-release, we would need tripleo-repos (with data) to install * DLRN repos * DLRN deps * ansible * modules * For the case of using the trunk repos (http://git.app.eng.bos.redhat.com/git/rhos-release.git/tree/repos/rhos-release-17-trunk.repo) everything needed for rhos install should be provided there * idea option: we build a similar rhos-release file reading everthing from tripleo-repos data. * Upstream: https://review.opendev.org/q/topic:%22newrepos%22+(status:open%20OR%20status:merged)