Skip to content

Commit ea54409

Browse files
committed
kt: Introduce kt checkout/vm for rlc kernels
Similar to current implementation for the lts kernels, except for 2 changes: 1. source tree branch changes for rlc when a new version is released, hence we cannot lock a specific version in kernels.yaml file. Instead a pattern is used. And when kt checkout is used, the latest branch that matches the pattern is found and used. 2. if a new minor rocky version is released, qcow images are usually published later. Hence the url for a specific rocky linux won't work. As a temporary solution, the latest qcow image is used for a major version. Signed-off-by: Roxana Nicolescu <rnicolescu@ciq.com>
1 parent 163501a commit ea54409

5 files changed

Lines changed: 83 additions & 2 deletions

File tree

kt/data/kernels.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
common_repos:
22
dist-git-tree-fips: git@gitlab.com:ctrl-iq-public/fips/src/kernel.git
3+
dist-git-tree-rlc: git@gitlab.com:ctrl-iq-public/sig-cloud-next/next/src/kernel.git
34
kernel-src-tree: https://github.com/ctrliq/kernel-src-tree.git
45
kernel-src-tree-tools: https://github.com/ctrliq/kernel-src-tree-tools.git
56

67
kernels:
78
cbr-7.9:
9+
kernel_type: lts
810
src_tree_root: kernel-src-tree
911
src_tree_branch: ciqcbr7_9
1012
dist_git_root: dist-git-tree-cbr
@@ -13,6 +15,7 @@ kernels:
1315
automated: true
1416

1517
lts-8.6:
18+
kernel_type: lts
1619
src_tree_root: kernel-src-tree
1720
src_tree_branch: ciqlts8_6
1821
dist_git_root: dist-git-tree-lts
@@ -21,6 +24,7 @@ kernels:
2124
automated: true
2225

2326
lts-9.2:
27+
kernel_type: lts
2428
src_tree_root: kernel-src-tree
2529
src_tree_branch: ciqlts9_2
2630
dist_git_root: dist-git-tree-lts
@@ -29,6 +33,7 @@ kernels:
2933
automated: true
3034

3135
lts-9.6:
36+
kernel_type: lts
3237
src_tree_root: kernel-src-tree
3338
src_tree_branch: ciqlts9_6
3439
dist_git_root: dist-git-tree-lts
@@ -37,9 +42,34 @@ kernels:
3742
automated: true
3843

3944
fipslegacy-8.6:
45+
kernel_type: lts
4046
src_tree_root: kernel-src-tree
4147
src_tree_branch: fips-legacy-8-compliant/4.18.0-425.13.1
4248
dist_git_root: dist-git-tree-fips
4349
dist_git_branch: fips-compliant8
4450
mock_config: rocky-lts86-fips
4551
automated: false
52+
rlc-8:
53+
kernel_type: rlc
54+
src_tree_root: kernel-src-tree
55+
src_tree_branch: rlc-8/4.18.0-553.X.Y.el8_10
56+
dist_git_root: dist-git-tree-rlc
57+
dist_git_branch: next-r8
58+
mock_config: rocky-8-sigcloud
59+
automated: false
60+
rlc-9:
61+
kernel_type: rlc
62+
src_tree_root: kernel-src-tree
63+
src_tree_branch: rlc-9/5.14.0-611.X.Y.el9_7
64+
dist_git_root: dist-git-tree-rlc
65+
dist_git_branch: next-r9
66+
mock_config: rocky-9-sigcloud
67+
automated: false
68+
rlc-10:
69+
kernel_type: rlc
70+
src_tree_root: kernel-src-tree
71+
src_tree_branch: rlc-10/6.12.0-124.X.Y.el10_1
72+
dist_git_root: dist-git-tree-rlc
73+
dist_git_branch: next-r10
74+
mock_config: rocky-10-sigcloud
75+
automated: false

kt/ktlib/kernel_workspace.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import logging
2+
import re
23
from dataclasses import dataclass
34

45
from git import GitCommandError, Repo
56
from pathlib3x import Path
67

78
from kt.ktlib.config import Config
8-
from kt.ktlib.kernels import KernelInfo
9+
from kt.ktlib.kernels import KernelInfo, KernelType
910
from kt.ktlib.util import Constants
1011

1112

@@ -16,6 +17,7 @@ class RepoWorktree:
1617
remote: str
1718
remote_branch: str
1819
local_branch: str
20+
kernel_type: KernelType
1921

2022
@classmethod
2123
def load_from_filepath(cls, folder: Path):
@@ -32,12 +34,18 @@ def load_from_filepath(cls, folder: Path):
3234

3335
local_branch = repo.active_branch.name
3436

37+
if KernelType.RLC in str(folder.absolute()):
38+
kernel_type = KernelType.RLC
39+
else:
40+
kernel_type = KernelType.LTS
41+
3542
return cls(
3643
source_root=source_root,
3744
folder=folder,
3845
remote=remote,
3946
remote_branch=remote_branch,
4047
local_branch=local_branch,
48+
kernel_type=kernel_type,
4149
)
4250

4351
def setup(self):
@@ -72,6 +80,10 @@ def update(self):
7280
"""
7381
logging.info("update")
7482
repo = Repo(self.folder)
83+
if self.kernel_type == KernelType.RLC:
84+
if repo.active_branch.name != self.local_branch:
85+
print(f"New RLC version from {repo.active_branch.name} to {self.local_branch}")
86+
repo.git.checkout(self.local_branch)
7587

7688
repo.remotes.origin.pull(rebase=True)
7789

@@ -184,8 +196,15 @@ def load(cls, name: str, config: Config, kernel_info: KernelInfo, extra: str):
184196
remote=default_remote,
185197
remote_branch=kernel_info.dist_git_branch,
186198
local_branch=dist_local_branch,
199+
kernel_type=kernel_info.kernel_type,
187200
)
188201

202+
if kernel_info.kernel_type == KernelType.RLC:
203+
print(f"{kernel_info.src_tree_branch}")
204+
kernel_info.src_tree_branch = cls._get_newest_remote_branch(
205+
folder=kernel_info.src_tree_root.folder, pattern=kernel_info.src_tree_branch
206+
)
207+
189208
src_folder = folder / Path(Constants.SRC_TREE)
190209
src_local_branch = f"{{{user}}}_{kernel_info.src_tree_branch}"
191210
if extra:
@@ -197,6 +216,7 @@ def load(cls, name: str, config: Config, kernel_info: KernelInfo, extra: str):
197216
remote=default_remote,
198217
remote_branch=kernel_info.src_tree_branch,
199218
local_branch=src_local_branch,
219+
kernel_type=kernel_info.kernel_type,
200220
)
201221

202222
return cls(
@@ -205,6 +225,23 @@ def load(cls, name: str, config: Config, kernel_info: KernelInfo, extra: str):
205225
src_worktree=src_worktree,
206226
)
207227

228+
def _get_newest_remote_branch(folder, pattern, remote="origin"):
229+
regex = re.compile("^" + re.escape(pattern).replace("X", r"(\d+)").replace("Y", r"(\d+)") + "$")
230+
231+
repo = Repo(folder)
232+
best = None # (X, Y, ref_name)
233+
234+
for ref in repo.remote(remote).refs:
235+
short = ref.name.split("/", 1)[1] # strip "origin/"
236+
m = regex.match(short)
237+
if not m:
238+
continue
239+
x, y = int(m.group(1)), int(m.group(2))
240+
if best is None or (x, y) > (best[0], best[1]):
241+
best = (x, y, short)
242+
243+
return best[2] if best else None
244+
208245
def setup(self):
209246
# Make sure the folder is created
210247
self.folder.mkdir(parents=True, exist_ok=True)

kt/ktlib/kernels.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22
from dataclasses import dataclass
3+
from enum import StrEnum, auto
34

45
import yaml
56
from pathlib3x import Path
@@ -12,6 +13,11 @@
1213
KERNEL_INFO_YAML_PATH = Path(__file__).parent.parent.joinpath("data/kernels.yaml")
1314

1415

16+
class KernelType(StrEnum):
17+
LTS = auto()
18+
RLC = auto()
19+
20+
1521
@dataclass
1622
class KernelInfo:
1723
"""
@@ -28,6 +34,7 @@ class KernelInfo:
2834
"""
2935

3036
name: str
37+
kernel_type: KernelType
3138

3239
src_tree_root: RepoInfo
3340
src_tree_branch: str

kt/ktlib/util.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class Constants:
88
KERNELS = "kernels"
99

1010
BASE_URL = "https://dl.rockylinux.org/vault/rocky"
11+
BASE_URL_RLC = "https://download.rockylinux.org/pub/rocky"
1112
QCOW2_TRAIL = "GenericCloud.latest.x86_64.qcow2"
1213
DEFAULT_VM_BASE = "Rocky"
1314

kt/ktlib/vm.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from kt.ktlib.config import Config
1414
from kt.ktlib.kernel_workspace import KernelWorkspace
15+
from kt.ktlib.kernels import KernelType
1516
from kt.ktlib.local import LocalCommand
1617
from kt.ktlib.ssh import SshCommand
1718
from kt.ktlib.util import Constants
@@ -140,7 +141,12 @@ def setup_and_spinup(
140141
return vm_instance
141142

142143
def _get_vm_url(self):
143-
return f"{Constants.BASE_URL}/{self.vm_major_minor_version}/images/x86_64/{Constants.DEFAULT_VM_BASE}-{self.vm_major_version}-{Constants.QCOW2_TRAIL}"
144+
if KernelType.RLC in self.name:
145+
base_url = Constants.BASE_URL_RLC
146+
else:
147+
base_url = Constants.BASE_URL
148+
149+
return f"{base_url}/{self.vm_major_minor_version}/images/x86_64/{Constants.DEFAULT_VM_BASE}-{self.vm_major_version}-{Constants.QCOW2_TRAIL}"
144150

145151
def _download_source_image(self, override_base: bool = False):
146152
if self.qcow2_source_path.exists() and not override_base:

0 commit comments

Comments
 (0)