Merge "Add retired and retired_reason fields to baremetal node"

This commit is contained in:
Zuul 2020-03-09 16:05:14 +00:00 committed by Gerrit Code Review
commit 1ad44c8fa1
3 changed files with 68 additions and 2 deletions

View File

@ -53,8 +53,8 @@ class Node(_common.ListMixin, resource.Resource):
is_maintenance='maintenance',
)
# The allocation_uuid field introduced in 1.52 (Stein).
_max_microversion = '1.52'
# The retired and retired_reason fields introduced in 1.61 (Ussuri).
_max_microversion = '1.61'
# Properties
#: The UUID of the allocation associated with this node. Added in API
@ -107,6 +107,9 @@ class Node(_common.ListMixin, resource.Resource):
# Whether the node is protected from undeploying. Added in API microversion
# 1.48.
is_protected = resource.Body("protected", type=bool)
#: Whether the node is marked for retirement. Added in API microversion
#: 1.61.
is_retired = resource.Body("retired", type=bool)
#: Any error from the most recent transaction that started but failed to
#: finish.
last_error = resource.Body("last_error")
@ -133,6 +136,9 @@ class Node(_common.ListMixin, resource.Resource):
protected_reason = resource.Body("protected_reason")
#: The current provisioning state of the node.
provision_state = resource.Body("provision_state")
#: The reason why the node is marked for retirement. Added in API
#: microversion 1.61.
retired_reason = resource.Body("retired_reason")
#: The current RAID configuration of the node.
raid_config = resource.Body("raid_config")
#: The name of an service conductor host which is holding a lock on this

View File

@ -269,6 +269,62 @@ class TestBareMetalNode(base.BaseBaremetalTest):
self.assertTrue(node.is_maintenance)
self.assertEqual(reason, node.maintenance_reason)
def test_retired(self):
reason = "I'm too old for this s...tuff!"
node = self.create_node()
# Set retired when node state available should fail!
self.assertRaises(
exceptions.ConflictException,
self.conn.baremetal.update_node, node, is_retired=True)
# Set node state to manageable
self.conn.baremetal.set_node_provision_state(node, 'manage',
wait=True)
self.assertEqual(node.provision_state, 'manageable')
# Set retired without reason
node = self.conn.baremetal.update_node(node, is_retired=True)
self.assertTrue(node.is_retired)
self.assertIsNone(node.retired_reason)
# Verify set retired on server side
node = self.conn.baremetal.get_node(node.id)
self.assertTrue(node.is_retired)
self.assertIsNone(node.retired_reason)
# Add the reason
node = self.conn.baremetal.update_node(node, retired_reason=reason)
self.assertTrue(node.is_retired)
self.assertEqual(reason, node.retired_reason)
# Verify the reason on server side
node = self.conn.baremetal.get_node(node.id)
self.assertTrue(node.is_retired)
self.assertEqual(reason, node.retired_reason)
# Unset retired
node = self.conn.baremetal.update_node(node, is_retired=False)
self.assertFalse(node.is_retired)
self.assertIsNone(node.retired_reason)
# Verify on server side
node = self.conn.baremetal.get_node(node.id)
self.assertFalse(node.is_retired)
self.assertIsNone(node.retired_reason)
# Set retired with reason
node = self.conn.baremetal.update_node(node, is_retired=True,
retired_reason=reason)
self.assertTrue(node.is_retired)
self.assertEqual(reason, node.retired_reason)
# Verify on server side
node = self.conn.baremetal.get_node(node.id)
self.assertTrue(node.is_retired)
self.assertEqual(reason, node.retired_reason)
class TestBareMetalNodeFields(base.BaseBaremetalTest):

View File

@ -0,0 +1,4 @@
---
features:
- |
Adds ``is_retired`` and ``retired_reason`` to the baremetal Node schema.