Add retired and retired_reason fields to baremetal node
Recently ironic added the retired and retired_reason fields to the node definition. Adding them here as base to support marking nodes for retirement. Change-Id: I2a80c7653a3e55c89f892d0a90d8c40ea80a482b
This commit is contained in:
parent
52a1a9460c
commit
5a6395b683
@ -53,8 +53,8 @@ class Node(_common.ListMixin, resource.Resource):
|
|||||||
is_maintenance='maintenance',
|
is_maintenance='maintenance',
|
||||||
)
|
)
|
||||||
|
|
||||||
# The allocation_uuid field introduced in 1.52 (Stein).
|
# The retired and retired_reason fields introduced in 1.61 (Ussuri).
|
||||||
_max_microversion = '1.52'
|
_max_microversion = '1.61'
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
#: The UUID of the allocation associated with this node. Added in API
|
#: 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
|
# Whether the node is protected from undeploying. Added in API microversion
|
||||||
# 1.48.
|
# 1.48.
|
||||||
is_protected = resource.Body("protected", type=bool)
|
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
|
#: Any error from the most recent transaction that started but failed to
|
||||||
#: finish.
|
#: finish.
|
||||||
last_error = resource.Body("last_error")
|
last_error = resource.Body("last_error")
|
||||||
@ -133,6 +136,9 @@ class Node(_common.ListMixin, resource.Resource):
|
|||||||
protected_reason = resource.Body("protected_reason")
|
protected_reason = resource.Body("protected_reason")
|
||||||
#: The current provisioning state of the node.
|
#: The current provisioning state of the node.
|
||||||
provision_state = resource.Body("provision_state")
|
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.
|
#: The current RAID configuration of the node.
|
||||||
raid_config = resource.Body("raid_config")
|
raid_config = resource.Body("raid_config")
|
||||||
#: The name of an service conductor host which is holding a lock on this
|
#: The name of an service conductor host which is holding a lock on this
|
||||||
|
@ -269,6 +269,62 @@ class TestBareMetalNode(base.BaseBaremetalTest):
|
|||||||
self.assertTrue(node.is_maintenance)
|
self.assertTrue(node.is_maintenance)
|
||||||
self.assertEqual(reason, node.maintenance_reason)
|
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):
|
class TestBareMetalNodeFields(base.BaseBaremetalTest):
|
||||||
|
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Adds ``is_retired`` and ``retired_reason`` to the baremetal Node schema.
|
Loading…
x
Reference in New Issue
Block a user