Skip to content

Commit 6e4e6f7

Browse files
committed
Create _service file from ContainerCreate
This allows to generate them properly for cases where the replacements are not identical per build_flavor (like for kubevirt)
1 parent 12ce189 commit 6e4e6f7

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

src/bci_build/containercrate.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
"""Crate to handle multibuild containers in the generator."""
22

3+
import xml.etree.ElementTree as ET
4+
from xml.dom import minidom
5+
6+
from bci_build.service import Service
7+
38

49
class ContainerCrate:
510
"""ContainerCrate combines container build flavors into a single OBS multibuild
@@ -48,3 +53,26 @@ def multibuild(self, container) -> str:
4853
for pkg in self.all_build_flavors(container)
4954
)
5055
return f"<multibuild>\n{flavors}\n</multibuild>"
56+
57+
def service(self, container) -> str:
58+
"""Return the _service file string to write for this ContainerCrate."""
59+
from bci_build.package import ALL_CONTAINER_IMAGE_NAMES
60+
61+
root = ET.Element("services")
62+
root.append(
63+
Service(name=f"{container.build_recipe_type}_label_helper").as_xml_element()
64+
)
65+
root.append(Service(name="kiwi_metainfo_helper").as_xml_element())
66+
all_bcis = list(ALL_CONTAINER_IMAGE_NAMES.values())
67+
all_bcis.sort(key=lambda bci: bci.uid)
68+
for c in filter(
69+
lambda bci: bci.crate == self and bci.os_version == container.os_version,
70+
all_bcis,
71+
):
72+
for r in c.replacements_via_service:
73+
rtree = r.to_service(f"Dockerfile.{c.build_flavor}").as_xml_element()
74+
root.append(rtree)
75+
76+
return minidom.parseString(ET.tostring(root, encoding="unicode")).toprettyxml(
77+
indent=" "
78+
)

src/bci_build/package/__init__.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,13 @@ async def write_file_to_dest(fname: str, contents: str | bytes) -> None:
11061106
tasks.append(write_file_to_dest(mname, self.crate.multibuild(self)))
11071107
files.append(mname)
11081108

1109-
tasks.append(
1110-
write_file_to_dest("_service", SERVICE_TEMPLATE.render(image=self))
1111-
)
1109+
sname = "_service"
1110+
tasks.append(write_file_to_dest(sname, self.crate.service(self)))
1111+
files.append(sname)
1112+
else:
1113+
sname = "_service"
1114+
tasks.append(write_file_to_dest(sname, SERVICE_TEMPLATE.render(image=self)))
1115+
files.append(sname)
11121116

11131117
changes_file_name = self.package_name + ".changes"
11141118
if not (Path(dest) / changes_file_name).exists():

0 commit comments

Comments
 (0)