diff options
| author | Tadas Sutkaitis <tadasas@gmail.com> | 2023-07-20 23:44:37 +0200 |
|---|---|---|
| committer | Tadas <tadasas@gmail.com> | 2024-02-08 02:16:05 +0200 |
| commit | 3ee1a82d8761902a75e075ccbcd8e9e02a226051 (patch) | |
| tree | 135f2a4ac40e295f3e70c921c882276cc8c4e8f4 /kolla | |
| parent | 9ebd51f7991a76059e91be98ac579ff705954337 (diff) | |
| download | kolla-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.py | 8 | ||||
| -rw-r--r-- | kolla/image/tasks.py | 1 | ||||
| -rw-r--r-- | kolla/tests/test_build.py | 13 |
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) |
