[p/openstack.nova] force creation of pty on aarch64 15/55815/7
authorCharalampos Kominos <Charalampos.Kominos@enea.com>
Mon, 16 Apr 2018 12:18:45 +0000 (14:18 +0200)
committerCharalampos Kominos <charalampos.kominos@enea.com>
Fri, 20 Apr 2018 09:55:21 +0000 (09:55 +0000)
Allow nova to create a pty device for aarch64VM

JIRA: ARMBAND-352

Change-Id: I7d481957342a0dfb5be38a01b3d755862321cfa7
Signed-off-by: Charalampos Kominos <charalampos.kominos@enea.com>
patches/opnfv-fuel/0002-salt-formulas-Add-enable-armband-formula.patch

index 0f15f44..a219e4b 100644 (file)
@@ -15,6 +15,7 @@ Subject: [PATCH] salt-formulas: Add & enable armband formula
 - prereq: fix missing link for vgabios binary blob;
 - nova patch: Add video type virtio for AArch64 (backport from [1]);
 - nova patch: libvirt driver: AArch64: ACPI depends on AAVMF;
+- nova patch: force creation of pty device;
 - nova conf: cpu_model=cortex-a57 (only for virtual deploys);
 - nova conf: virt_type=qemu (only for virtual deploys);
 - nova compute conf: virt_type=qemu (only for virtual deploys);
@@ -26,16 +27,16 @@ Signed-off-by: Guillermo Herrero <Guillermo.Herrero@enea.com>
 Signed-off-by: Charalampos Kominos <Charalampos.Kominos@enea.com>
 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
 ---
- mcp/config/states/openstack_ha                     |  1 +
- mcp/config/states/openstack_noha                   |  2 +
- mcp/config/states/virtual_control_plane            |  1 +
- .../armband/files/nova-libvirt-aarch64-rollup.diff | 76 ++++++++++++++++++++++
- mcp/salt-formulas/armband/init.sls                 |  7 ++
- mcp/salt-formulas/armband/nova_config.sls          | 35 ++++++++++
- mcp/salt-formulas/armband/nova_libvirt.sls         |  7 ++
- mcp/salt-formulas/armband/qemu_efi.sls             |  2 +
- mcp/salt-formulas/armband/vgabios.sls              |  7 ++
- 9 files changed, 138 insertions(+)
+ mcp/config/states/openstack_ha                     |   1 +
+ mcp/config/states/openstack_noha                   |   2 +
+ mcp/config/states/virtual_control_plane            |   1 +
+ .../armband/files/nova-libvirt-aarch64-rollup.diff | 165 +++++++++++++++++++++
+ mcp/salt-formulas/armband/init.sls                 |   7 +
+ mcp/salt-formulas/armband/nova_config.sls          |  35 +++++
+ mcp/salt-formulas/armband/nova_libvirt.sls         |   7 +
+ mcp/salt-formulas/armband/qemu_efi.sls             |   2 +
+ mcp/salt-formulas/armband/vgabios.sls              |   7 +
+ 9 files changed, 226 insertions(+)
  create mode 100644 mcp/salt-formulas/armband/files/nova-libvirt-aarch64-rollup.diff
  create mode 100644 mcp/salt-formulas/armband/init.sls
  create mode 100644 mcp/salt-formulas/armband/nova_config.sls
@@ -82,10 +83,10 @@ index c391cfe6..02a813c9 100755
  salt -C 'kvm* or cmp*' state.apply salt
 diff --git a/mcp/salt-formulas/armband/files/nova-libvirt-aarch64-rollup.diff b/mcp/salt-formulas/armband/files/nova-libvirt-aarch64-rollup.diff
 new file mode 100644
-index 00000000..36ddf72b
+index 00000000..a480a20c
 --- /dev/null
 +++ b/mcp/salt-formulas/armband/files/nova-libvirt-aarch64-rollup.diff
-@@ -0,0 +1,76 @@
+@@ -0,0 +1,165 @@
 +From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
 +Date: Thu, 24 Aug 2017 10:57:28 +0200
 +Subject: [PATCH] libvirt: AArch64: ACPI depends on AAVMF
@@ -162,6 +163,95 @@ index 00000000..36ddf72b
 +         elif CONF.spice.enabled:
 +             video.type = 'qxl'
 +         if image_meta.properties.get('hw_video_model'):
++---
++
++From ac6d3cd85ffe94115f15134406ba0d366e938764 Mon Sep 17 00:00:00 2001
++From: Charalampos Kominos <Charalampos.Kominos@enea.com>
++Date: Tue, 13 Mar 2018 17:02:56 +0100
++Subject: [PATCH] Allow nova to create a pty device for aarch64VM
++
++Armband relies on Ubuntu Xenial and UCA Pike packages. The Nova package in UCA
++explicitly disables AArch64 serial console access by removing the second pty
++device due to libvirt/QEMU limitations in the Xenial release / UCA Pike.
++Since Armband provides newer versions for the core virtualization packages,
++we can safely bring back the serial console in Nova.
++
++JIRA: ARMBAND-352
++
++Signed-off-by: Charalampos Kominos <charalampos.kominos@enea.com>
++---
++
++--- a/nova/virt/libvirt/driver.py
+++++ b/nova/virt/libvirt/driver.py
++@@ -4666,13 +4666,11 @@
++                   self._is_s390x_guest(image_meta)):
++             self._create_consoles_s390x(guest_cfg, instance,
++                                         flavor, image_meta)
++-        elif (virt_type in ("qemu", "kvm") and
++-                  self._is_arm_guest(image_meta)):
++-            # NOTE(jamespage): libvirt 2.5.0 as shipped in Ubuntu zesty
++-            #                  and the Pike UCA needs to be configured
++-            #                  for compatibility on arm64.
++-            self._create_consoles_arm(guest_cfg, instance,
++-                                      flavor, image_meta)
+++
+++        #ARMband: Canonical applies a patch to align with libvirt 2.5.0 in UCA repos
+++        #         which removes the console on aarch64. Since ARMband uses a newer
+++        #         libvirt version we can safely revert that change.
+++
++         elif virt_type in ("qemu", "kvm"):
++             self._create_consoles_qemu_kvm(guest_cfg, instance,
++                                         flavor, image_meta)
++@@ -4681,12 +4679,6 @@
++         s390x_archs = (fields.Architecture.S390, fields.Architecture.S390X)
++         return libvirt_utils.get_arch(image_meta) in s390x_archs
++
++-    def _is_arm_guest(self, image_meta):
++-        arm_archs = (fields.Architecture.AARCH64,
++-                     fields.Architecture.ARMV7B,
++-                     fields.Architecture.ARMV7)
++-        return libvirt_utils.get_arch(image_meta) in arm_archs
++-
++     def _create_consoles_qemu_kvm(self, guest_cfg, instance, flavor,
++                                   image_meta):
++         char_dev_cls = vconfig.LibvirtConfigGuestSerial
++@@ -4716,25 +4708,6 @@
++                                     "sclplm")
++        self._create_pty_device(guest_cfg, char_dev_cls, "sclp", log_path)
++
++-    def _create_consoles_arm(self, guest_cfg, instance, flavor, image_meta):
++-        char_dev_cls = vconfig.LibvirtConfigGuestConsole
++-        log_path = self._get_console_log_path(instance)
++-        if CONF.serial_console.enabled:
++-            if not self._serial_ports_already_defined(instance):
++-                num_ports = hardware.get_number_of_serial_ports(flavor,
++-                                                                image_meta)
++-                self._check_number_of_serial_console(num_ports)
++-                self._create_serial_consoles(guest_cfg, num_ports,
++-                                             char_dev_cls, log_path)
++-        else:
++-            # NOTE(jamespage): Force creation of file device for compatibility
++-            #                  with aarch64 + libvirt 2.5.0
++-            self._create_file_device(guest_cfg, instance, char_dev_cls,
++-                                     force=True)
++-        # NOTE(jamespage): Skip creation of pty devices; they only work with
++-        #                  the virtio driver which does not capture early
++-        #                  boot on aarch64
++-
++     def _create_pty_device(self, guest_cfg, char_dev_cls, target_type=None,
++                            log_path=None):
++         def _create_base_dev():
++@@ -4772,8 +4745,8 @@
++                guest_cfg.add_device(_create_base_dev())
++
++     def _create_file_device(self, guest_cfg, instance, char_dev_cls,
++-                            target_type=None, force=False):
++-        if self._is_virtlogd_available() and not force:
+++                            target_type=None):
+++        if self._is_virtlogd_available():
++             return
++
++         consolelog = char_dev_cls()
 diff --git a/mcp/salt-formulas/armband/init.sls b/mcp/salt-formulas/armband/init.sls
 new file mode 100644
 index 00000000..8a8cf2ab