From cedc4a24167de205db25cc45fd37275f3e4956bd Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Fri, 3 Jul 2020 14:08:45 +0200
Subject: [PATCH] Software RAID: don't try to set local_gb to MAX

Change-Id: Ibac5d07b988438719bf414f314cbc610562e7599
---
 ironic/common/raid.py                             |  3 ++-
 ironic/tests/unit/common/test_raid.py             | 15 +++++++++++++--
 releasenotes/notes/raid-max-c0920cc44b9779ee.yaml |  5 +++++
 3 files changed, 20 insertions(+), 3 deletions(-)
 create mode 100644 releasenotes/notes/raid-max-c0920cc44b9779ee.yaml

diff --git a/ironic/common/raid.py b/ironic/common/raid.py
index 3f503beb3c..ab60bd603d 100644
--- a/ironic/common/raid.py
+++ b/ironic/common/raid.py
@@ -114,7 +114,8 @@ def update_raid_info(node, raid_config):
     if root_logical_disk:
         # Update local_gb and root_device_hint
         properties = node.properties
-        properties['local_gb'] = root_logical_disk['size_gb']
+        if root_logical_disk['size_gb'] != 'MAX':
+            properties['local_gb'] = root_logical_disk['size_gb']
         try:
             properties['root_device'] = (
                 root_logical_disk['root_device_hint'])
diff --git a/ironic/tests/unit/common/test_raid.py b/ironic/tests/unit/common/test_raid.py
index fd1677d8ab..26ef6a9c0d 100644
--- a/ironic/tests/unit/common/test_raid.py
+++ b/ironic/tests/unit/common/test_raid.py
@@ -212,7 +212,8 @@ class RaidPublicMethodsTestCase(db_base.DbTestCase):
         self.assertIn('foo', logical_disk_properties)
 
     def _test_update_raid_info(self, current_config,
-                               capabilities=None):
+                               capabilities=None,
+                               skip_local_gb=False):
         node = self.node
         if capabilities:
             properties = node.properties
@@ -231,7 +232,10 @@ class RaidPublicMethodsTestCase(db_base.DbTestCase):
         if current_config['logical_disks'][0].get('is_root_volume'):
             self.assertEqual({'wwn': '600508B100'},
                              properties['root_device'])
-            self.assertEqual(100, properties['local_gb'])
+            if skip_local_gb:
+                self.assertNotIn('local_gb', properties)
+            else:
+                self.assertEqual(100, properties['local_gb'])
             self.assertIn('raid_level:1', properties['capabilities'])
             if capabilities:
                 self.assertIn(capabilities, properties['capabilities'])
@@ -267,6 +271,13 @@ class RaidPublicMethodsTestCase(db_base.DbTestCase):
                           self._test_update_raid_info,
                           current_config)
 
+    def test_update_raid_info_skip_MAX(self):
+        current_config = json.loads(raid_constants.CURRENT_RAID_CONFIG)
+        current_config['logical_disks'][0]['size_gb'] = 'MAX'
+        self._test_update_raid_info(current_config,
+                                    capabilities='boot_mode:bios',
+                                    skip_local_gb=True)
+
     def test_filter_target_raid_config(self):
         result = raid.filter_target_raid_config(self.node)
         self.assertEqual(self.node.target_raid_config, result)
diff --git a/releasenotes/notes/raid-max-c0920cc44b9779ee.yaml b/releasenotes/notes/raid-max-c0920cc44b9779ee.yaml
new file mode 100644
index 0000000000..3035d2b8de
--- /dev/null
+++ b/releasenotes/notes/raid-max-c0920cc44b9779ee.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    No longer tries to set ``local_gb`` to ``MAX`` when building RAID with
+    the root disk using ``MAX`` for its size.