Skip to content

Commit 57784b7

Browse files
committed
wip: get pulp sync working
1 parent 5c39a06 commit 57784b7

File tree

5 files changed

+81
-41
lines changed

5 files changed

+81
-41
lines changed

ansible/adhoc/sync-pulp.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@
66
vars:
77
pulp_site_target_arch: "x86_64"
88
pulp_site_target_distribution: "rocky"
9-
pulp_site_target_distribution_version: "9.5"
10-
pulp_site_target_distribution_version_major: "9"
9+
pulp_site_target_distribution_version: "9.5" # TODO: how can we automatically make this the latest??

ansible/roles/pulp_site/defaults/main.yml

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,25 @@ pulp_site_validate_certs: false
88
pulp_site_install_dir: '/home/rocky/pulp'
99
pulp_site_selinux_suffix: "{{ ':Z' if ansible_selinux.status == 'enabled' else '' }}"
1010
pulp_site_target_facts: "{{ hostvars[groups['pulp'][0]]['ansible_facts'] }}"
11-
pulp_site_target_distribution_version: "{{ pulp_site_target_facts['distribution_version'] }}"
12-
pulp_site_target_distribution_version_major: "{{ pulp_site_target_facts['distribution_major_version'] }}"
13-
14-
pulp_site_rpm_info:
15-
- name: "baseos-{{ pulp_site_target_distribution_version }}-{{ appliances_pulp_repos.baseos[pulp_site_target_distribution_version].timestamp }}"
16-
subpath: "{{ appliances_pulp_repos.baseos[pulp_site_target_distribution_version] | appliances_repo_to_subpath }}"
17-
- name: "appstream-{{ pulp_site_target_distribution_version }}-{{ appliances_pulp_repos.appstream[pulp_site_target_distribution_version].timestamp }}"
18-
subpath: "{{ appliances_pulp_repos.appstream[pulp_site_target_distribution_version] | appliances_repo_to_subpath }}"
19-
- name: "crb-{{ pulp_site_target_distribution_version }}-{{ appliances_pulp_repos.crb[pulp_site_target_distribution_version].timestamp }}"
20-
subpath: "{{ appliances_pulp_repos.crb[pulp_site_target_distribution_version] | appliances_repo_to_subpath }}"
21-
- name: "extras-{{ pulp_site_target_distribution_version }}-{{ appliances_pulp_repos.extras[pulp_site_target_distribution_version].timestamp }}"
22-
subpath: "{{ appliances_pulp_repos.extras[pulp_site_target_distribution_version] | appliances_repo_to_subpath }}"
23-
- name: "epel-{{ pulp_site_target_distribution_version_major }}-{{ appliances_pulp_repos.epel[pulp_site_target_distribution_version_major].timestamp }}"
24-
subpath: "{{ appliances_pulp_repos.epel[pulp_site_target_distribution_version_major] | appliances_repo_to_subpath }}"
25-
- name: "ohpc-{{ pulp_site_target_distribution_version_major }}-{{ appliances_pulp_repos.openhpc_base[pulp_site_target_distribution_version_major].timestamp }}"
26-
subpath: "{{ appliances_pulp_repos.openhpc_base[pulp_site_target_distribution_version_major] | appliances_repo_to_subpath }}"
27-
- name: "ohpc-updates-{{ pulp_site_target_distribution_version_major }}-{{ appliances_pulp_repos.openhpc_updates[pulp_site_target_distribution_version_major].timestamp }}"
28-
subpath: "{{ appliances_pulp_repos.openhpc_updates[pulp_site_target_distribution_version_major] | appliances_repo_to_subpath }}"
29-
- name: "ceph-{{ pulp_site_target_distribution_version_major }}-{{ appliances_pulp_repos.ceph[pulp_site_target_distribution_version_major].timestamp }}"
30-
subpath: "{{ appliances_pulp_repos.ceph[pulp_site_target_distribution_version_major] | appliances_repo_to_subpath }}"
31-
- name: "grafana-{{ pulp_site_target_distribution_version_major }}-{{ appliances_pulp_repos.grafana[pulp_site_target_distribution_version_major].timestamp }}"
32-
subpath: "{{ appliances_pulp_repos.grafana[pulp_site_target_distribution_version_major] | appliances_repo_to_subpath }}"
11+
pulp_site_target_distribution_version: "{{ pulp_site_target_facts['distribution_version'] }}" # TODO: how to set automatically?
3312

3413
pulp_site_rpm_repo_defaults:
3514
remote_username: "{{ pulp_site_upstream_username }}"
3615
remote_password: "{{ pulp_site_upstream_password }}"
3716
policy: on_demand
3817
state: present
3918

40-
_pulp_site_rpm_info_all: "{{ pulp_site_rpm_info | map('combine', pulp_site_rpm_repo_defaults) }}"
19+
pulp_site_rpm_info: |
20+
{{
21+
dnf_repos_default |
22+
combine(dnf_repos_default_epel, dnf_repos_extra) |
23+
select_repos(pulp_site_target_distribution_version)
24+
}}
25+
pulp_site_rpm_repos: |
26+
{{
27+
pulp_site_rpm_info |
28+
to_rpm_repos(pulp_site_upstream_content_url, pulp_site_rpm_repo_defaults)
29+
}}
4130
42-
pulp_site_rpm_repos: "{{ _pulp_site_rpm_info_all | to_rpm_repos(pulp_site_upstream_content_url) }}"
4331
pulp_site_rpm_publications: "{{ _pulp_site_rpm_info_all | to_rpm_pubs }}"
4432
pulp_site_rpm_distributions: "{{ _pulp_site_rpm_info_all | to_rpm_distros }}"

ansible/roles/pulp_site/filter_plugins/pulp-list-filters.py

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,51 @@ def filters(self):
33
return {
44
'to_rpm_repos': self.to_rpm_repos,
55
'to_rpm_pubs': self.to_rpm_pubs,
6-
'to_rpm_distros': self.to_rpm_distros
6+
'to_rpm_distros': self.to_rpm_distros,
7+
'select_repos': self.select_repos,
78
}
8-
9-
def to_rpm_repos(self, list, pulp_url):
10-
repo_list = map(lambda x: {
11-
'name': x['name'],
12-
'url': pulp_url+'/'+x['subpath'],
13-
'remote_username': x['remote_username'],
14-
'remote_password': x['remote_password'],
15-
'policy': x['policy'],
16-
'state': x['state'] }, list)
17-
return repo_list
189

10+
def select_repos(self, dnf_repos, target_distro_ver):
11+
""" Filter dnf_repos to only those for a relevant distribution version (M.m or M). Returns a list of dicts.
12+
TODO: note this adds distro_ver as a key
13+
"""
14+
15+
target_distro_ver_major = target_distro_ver.split('.')[0]
16+
17+
rpm_repos = []
18+
for repokey in dnf_repos:
19+
# select either the matching major.minor or major version:
20+
if target_distro_ver in dnf_repos[repokey]:
21+
selected_ver = target_distro_ver
22+
elif target_distro_ver_major in dnf_repos[repokey]:
23+
selected_ver = target_distro_ver_major
24+
else:
25+
raise ValueError(f'No key matching {target_distro_ver_major} or {target_distro_ver} found in f{repokey}')
26+
repo_data = dnf_repos[repokey][selected_ver]
27+
repo_data['distro_ver'] = selected_ver
28+
rpm_repos.append(repo_data)
29+
return rpm_repos
30+
31+
def to_rpm_repos(self, rpm_info, content_url, repo_defaults):
32+
""" TODO """
33+
rpm_repos = []
34+
for repo_data in rpm_info:
35+
rpm_data = repo_defaults.copy() # NB: this changes behaviour vs before, so now defaults can correctly be overriden
36+
rpm_data['name'] = f"{repo_data['pulp_repo_name']}-{repo_data['distro_ver']}-{repo_data['pulp_timestamp']}"
37+
rpm_data['url'] = '/'.join([content_url, repo_data['pulp_path'], repo_data['pulp_timestamp']])
38+
rpm_repos.append(rpm_data)
39+
return rpm_repos
40+
1941
def to_rpm_pubs(self, list):
2042
pub_list = map(lambda x: {
21-
'repository': x['name'],
43+
'repository': x['pulp_repo_name'],
2244
'state': x['state'] }, list)
2345
return pub_list
2446

2547
def to_rpm_distros(self, list):
2648
distro_list = map(lambda x: {
2749
'name': x['name'],
28-
'repository': x['name'],
29-
'base_path': x['subpath'],
50+
'repository': x['pulp_repo_name'],
51+
'base_path': x['pulp_path'],
3052
'state': x['state'] }, list)
31-
return distro_list
53+
return distro_list

docs/experimental/pulp.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ In order to ensure reproducible builds, the appliance can build images using rep
77
### Deploying a Pulp server
88
A playbook is provided to install and configure a Pulp server on a given host. Admin credentials for this server are automatically generated through the `ansible/adhoc/generate-passwords.yml` playbook. To use this, create an inventory file defining a group `pulp_server` containing a single host. The hostvar `ansible_host` should be defined, giving the IP address Ansible should use for ssh.
99

10+
**TODO: should be RL9 (or RL8?)**
11+
**TODO: add size required**
1012
**TODO: example inventory file**
1113

1214
Once complete, it will print a message giving a value to set for `appliances_pulp_url`, assuming the `ansible_host` address is also the address the cluster
@@ -17,6 +19,8 @@ should use to reach the Pulp server.
1719
Note access to this server's content isn't authenticated so this assumes the `pulp_server` host is not externall reachable.
1820

1921
**TODO: You can actually do this using additional_nodes now, how would we make the pulp store persistant?**
22+
**TODO: don't advise that, we want single server for all environments**
23+
**TODO: Add a systemd unit to run pulp!**
2024

2125
### Using an existing Pulp server
2226
An existing Pulp server can be used to host Ark repos by overriding `pulp_site_password` and `appliances_pulp_url` in the target environment. Note that this assumes the same configuration as the appliance deployed Pulp i.e no content authentication.

environments/common/inventory/group_vars/all/timestamps.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,116 +6,143 @@ dnf_repos_default:
66
pulp_path: rocky/8.10/AppStream/x86_64/os
77
pulp_timestamp: 20250614T013846
88
# pulp_content_url: # optional, dnf_repos_pulp_content_url
9+
pulp_repo_name: appstream # pulp repository name
910
'9.4':
1011
repo_file: rocky
1112
pulp_path: rocky/9.4/AppStream/x86_64/os
1213
pulp_timestamp: 20241112T003151
14+
pulp_repo_name: appstream
1315
'9.5':
1416
repo_file: rocky
1517
pulp_path: rocky/9.5/AppStream/x86_64/os
1618
pulp_timestamp: 20250514T014704
19+
pulp_repo_name: appstream
1720
'9.6':
1821
repo_file: rocky
1922
pulp_path: rocky/9.6/AppStream/x86_64/os
2023
pulp_timestamp: 20250726T040613
24+
pulp_repo_name: appstream
2125
baseos:
2226
'8.10':
2327
repo_file: Rocky-BaseOS
2428
pulp_path: rocky/8.10/BaseOS/x86_64/os
2529
pulp_timestamp: 20250614T013846
30+
pulp_repo_name: baseos
2631
'9.4':
2732
repo_file: rocky
2833
pulp_path: rocky/9.4/BaseOS/x86_64/os
2934
pulp_timestamp: 20241115T011711
35+
pulp_repo_name: baseos
3036
'9.5':
3137
repo_file: rocky
3238
pulp_path: rocky/9.5/BaseOS/x86_64/os
3339
pulp_timestamp: 20250513T031844
40+
pulp_repo_name: baseos
3441
'9.6':
3542
repo_file: rocky
3643
pulp_path: rocky/9.6/BaseOS/x86_64/os
3744
pulp_timestamp: 20250726T052250
45+
pulp_repo_name: baseos
3846
Ceph:
3947
'8':
4048
repo_file: ceph
4149
pulp_path: centos/8-stream/storage/x86_64/ceph-quincy
4250
pulp_timestamp: 20231104T015751
51+
pulp_repo_name: baseos
4352
'9':
4453
repo_file: ceph
4554
pulp_path: centos/9-stream/storage/x86_64/ceph-reef
4655
pulp_timestamp: 20250617T023108
56+
pulp_repo_name: baseos
4757
crb:
4858
'8.10':
4959
repo_name: powertools
5060
repo_file: Rocky-PowerTools
5161
pulp_path: rocky/8.10/PowerTools/x86_64/os
5262
pulp_timestamp: 20250614T013846
63+
pulp_repo_name: crb
5364
'9.4':
5465
repo_file: rocky
5566
pulp_path: rocky/9.4/CRB/x86_64/os
5667
pulp_timestamp: 20241115T003133
68+
pulp_repo_name: crb
5769
'9.5':
5870
repo_file: rocky
5971
pulp_path: rocky/9.5/CRB/x86_64/os
6072
pulp_timestamp: 20250514T014704
73+
pulp_repo_name: crb
6174
'9.6':
6275
repo_file: rocky
6376
pulp_path: rocky/9.6/CRB/x86_64/os
6477
pulp_timestamp: 20250726T040613
78+
pulp_repo_name: crb
6579
extras:
6680
'8.10':
6781
repo_file: Rocky-Extras
6882
pulp_path: rocky/8.10/extras/x86_64/os
6983
pulp_timestamp: 20250510T032327
84+
pulp_repo_name: extras
7085
'9.4':
7186
repo_file: rocky-extras
7287
pulp_path: rocky/9.4/extras/x86_64/os
7388
pulp_timestamp: 20241118T002802
89+
pulp_repo_name: extras
7490
'9.5':
7591
repo_file: rocky-extras
7692
pulp_path: rocky/9.5/extras/x86_64/os
7793
pulp_timestamp: 20250506T032818
94+
pulp_repo_name: extras
7895
'9.6':
7996
repo_file: rocky-extras
8097
pulp_path: rocky/9.6/extras/x86_64/os
8198
pulp_timestamp: 20250726T040613
99+
pulp_repo_name: extras
82100
grafana:
83101
'8':
84102
repo_file: grafana
85103
pulp_path: grafana/oss/rpm
86104
timestamp: 20250615T005738
105+
pulp_repo_name: grafana
87106
'9':
88107
repo_file: grafana
89108
pulp_path: grafana/oss/rpm
90109
pulp_timestamp: 20250730T011314
110+
pulp_repo_name: grafana
91111
# TODO: figure out how to break out openhpc repos out separately to allow for no-ohpc case
92112
openhpc_base:
93113
'8':
94114
repo_file: OpenHPC
95115
pulp_path: OpenHPC/2/EL_8
96116
pulp_timestamp: 20241218T154614
117+
pulp_repo_name: ohpc
97118
'9':
98119
repo_file: OpenHPC
99120
pulp_path: OpenHPC/3/EL_9
100121
pulp_timestamp: 20241218T154614
122+
pulp_repo_name: ohpc
101123
openhpc_updates:
102124
'8':
103125
repo_file: OpenHPC
104126
pulp_path: OpenHPC/2/updates/EL_8
105127
pulp_timestamp: 20250512T003315
128+
pulp_repo_name: ohpc-updates
106129
'9':
107130
repo_file: OpenHPC
108131
pulp_path: OpenHPC/3/updates/EL_9
109132
pulp_timestamp: 20250510T003301
133+
pulp_repo_name: ohpc-updates
110134

111135
dnf_repos_default_epel: # as for dnf_repos_default
112136
epel:
113137
'8':
114138
repo_file: epel
115139
pulp_path: epel/8/Everything/x86_64
116140
pulp_timestamp: 20250615T234151
141+
pulp_repo_name: epel
117142
'9':
118143
repo_file: epel
119144
pulp_path: epel/9/Everything/x86_64
120145
pulp_timestamp: 20250729T235750
146+
pulp_repo_name: epel
121147

148+
dnf_repos_extra: {}

0 commit comments

Comments
 (0)