From fce0902443c1037faa603cf62c01b00acba36bc0 Mon Sep 17 00:00:00 2001 From: Jonathan Race Date: Mon, 10 Jan 2022 14:07:46 -0500 Subject: [PATCH] Adds Pick guest CPU architecture based on host arch in libvirt driver support Implement new image meta property that allows for the selection of the correct QEMU binary, cpu architecture, and machine type for a guest architecture that is different than the host architecture; An x86_64 guest running on an AArch64 host, and vice versa. Specifically the required OS traits have been added to ensure that the hw_architecture and hw_emulation_architecture fields recieve the correct allowed values. exapnded hw_architecture os_traits to match all specified in nova object fields. Depends-On: https://review.opendev.org/c/openstack/nova-specs/+/824044 Implements: blueprint pick-guest-arch-based-on-host-arch-in-libvirt-driver Closes-Bug: 1863728 Signed-off-by: Jonathan Race Change-Id: I891cd43b2b97b3774ff923e3487a153a5ba237ef --- os_traits/compute/arch.py | 25 ++++++++++++++++++ os_traits/hw/arch.py | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 os_traits/compute/arch.py create mode 100644 os_traits/hw/arch.py diff --git a/os_traits/compute/arch.py b/os_traits/compute/arch.py new file mode 100644 index 0000000..528abb9 --- /dev/null +++ b/os_traits/compute/arch.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +TRAITS = [ + # traits corresponding to the allowed values of "hw_emulaton_architecture" + # image metadata property + # https://github.com/openstack/nova/blob/1f74441/nova/objects/fields.py#L120-228 + 'AARCH64', + 'PPC64LE', + 'MIPSEL', + 'S390X', + 'RISCV64', + 'X86_64', +] diff --git a/os_traits/hw/arch.py b/os_traits/hw/arch.py new file mode 100644 index 0000000..78f0596 --- /dev/null +++ b/os_traits/hw/arch.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +TRAITS = [ + # traits corresponding to the allowed values of "hw_architecture" + # image metadata property + # https://github.com/openstack/nova/blob/1f74441/nova/objects/fields.py#L120-228 + 'ALPHA', + 'ARMV6', + 'ARMV7', + 'ARMV7B', + 'AARCH64', + 'CRIS', + 'I686', + 'IA64', + 'LM32', + 'M68K', + 'MICROBLAZE', + 'MICROBLAZEEL', + 'MIPS', + 'MIPSEL', + 'MIPS64', + 'MIPS64EL', + 'OPENRISC', + 'PARISC', + 'PARISC64', + 'PPC', + 'PPCLE', + 'PPC64', + 'PPC64LE', + 'PPCEMB', + 'S390', + 'S390X', + 'SH4', + 'SH4EB', + 'SPARC', + 'SPARC64', + 'UNICORE32', + 'X86_64', + 'XTENSA', + 'XTENSAEB', +]