aboutsummaryrefslogtreecommitdiff
path: root/kolla
diff options
context:
space:
mode:
authorTadas Sutkaitis <tadasas@gmail.com>2023-07-20 23:44:37 +0200
committerTadas <tadasas@gmail.com>2024-02-08 02:16:05 +0200
commit3ee1a82d8761902a75e075ccbcd8e9e02a226051 (patch)
tree135f2a4ac40e295f3e70c921c882276cc8c4e8f4 /kolla
parent9ebd51f7991a76059e91be98ac579ff705954337 (diff)
downloadkolla-3ee1a82d8761902a75e075ccbcd8e9e02a226051.tar.gz
kolla-3ee1a82d8761902a75e075ccbcd8e9e02a226051.zip
add: cross-compile support
The main goal is to be able to build ARM images on standard x86 hardware. Add simple functions supported by python-py and podman-py to enable creation of container images on emulated architectures. Change-Id: I1526b460f6e271c2ec63ab3a3b1dc348d742e96d
Diffstat (limited to 'kolla')
-rw-r--r--kolla/common/config.py8
-rw-r--r--kolla/image/tasks.py1
-rw-r--r--kolla/tests/test_build.py13
3 files changed, 17 insertions, 5 deletions
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 03616fe87..af5dab963 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -138,6 +138,10 @@ _PROFILE_OPTS = [
hostarch = os.uname()[4]
+# NOTE: Apple Silicon reports as arm64 which is aarch64
+if hostarch == "arm64":
+ hostarch = "aarch64"
+
_CLI_OPTS = [
cfg.StrOpt('base', short='b', default='rocky',
choices=BASE_OS_DISTRO,
@@ -174,6 +178,10 @@ _CLI_OPTS = [
help='The network mode for Docker build. Example: host'),
cfg.BoolOpt('cache', default=True,
help='Use the container engine cache when building'),
+ cfg.StrOpt('platform', default=None,
+ help=('The platform to use for a cross-compile build. Should '
+ 'be set in conjunction with "--base-arch" argument. '
+ 'Example: "--platform linux/arm64 --base-arch aarch64"')),
cfg.MultiOpt('profile', types.String(), short='p',
help=('Build a pre-defined set of images, see [profiles]'
' section in config. The default profiles are:'
diff --git a/kolla/image/tasks.py b/kolla/image/tasks.py
index c6cde6bbe..5babce560 100644
--- a/kolla/image/tasks.py
+++ b/kolla/image/tasks.py
@@ -400,6 +400,7 @@ class BuildTask(EngineTask):
network_mode=self.conf.network_mode,
pull=pull,
forcerm=self.forcerm,
+ platform=self.conf.platform,
buildargs=buildargs,
**kwargs)[1]:
if self.conf.engine == engine.Engine.PODMAN.value:
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py
index 1aa0b3a9d..d4611d5ae 100644
--- a/kolla/tests/test_build.py
+++ b/kolla/tests/test_build.py
@@ -168,7 +168,7 @@ class TasksTest(base.TestCase):
mock_client().images.build.assert_called_once_with(
path=self.image.path, tag=self.image.canonical_name,
network_mode='host', nocache=False, rm=True, pull=True,
- forcerm=True, buildargs=None, **self.build_kwargs)
+ forcerm=True, platform=None, buildargs=None, **self.build_kwargs)
self.assertTrue(builder.success)
@@ -185,7 +185,7 @@ class TasksTest(base.TestCase):
mock_client().images.build.assert_called_once_with(
path=self.image.path, tag=self.image.canonical_name,
network_mode='bridge', nocache=False, rm=True, pull=True,
- forcerm=True, buildargs=None, **self.build_kwargs)
+ forcerm=True, platform=None, buildargs=None, **self.build_kwargs)
self.assertTrue(builder.success)
@@ -205,7 +205,8 @@ class TasksTest(base.TestCase):
mock_client().images.build.assert_called_once_with(
path=self.image.path, tag=self.image.canonical_name,
network_mode='host', nocache=False, rm=True, pull=True,
- forcerm=True, buildargs=build_args, **self.build_kwargs)
+ forcerm=True, platform=None, buildargs=build_args,
+ **self.build_kwargs)
self.assertTrue(builder.success)
@@ -224,7 +225,8 @@ class TasksTest(base.TestCase):
mock_client().images.build.assert_called_once_with(
path=self.image.path, tag=self.image.canonical_name,
network_mode='host', nocache=False, rm=True, pull=True,
- forcerm=True, buildargs=build_args, **self.build_kwargs)
+ forcerm=True, platform=None, buildargs=build_args,
+ **self.build_kwargs)
self.assertTrue(builder.success)
@@ -245,7 +247,8 @@ class TasksTest(base.TestCase):
mock_client().images.build.assert_called_once_with(
path=self.image.path, tag=self.image.canonical_name,
network_mode='host', nocache=False, rm=True, pull=True,
- forcerm=True, buildargs=build_args, **self.build_kwargs)
+ forcerm=True, platform=None, buildargs=build_args,
+ **self.build_kwargs)
self.assertTrue(builder.success)