Merge "Replace config 'clean_nodes' with 'automated_clean'"
This commit is contained in:
commit
1226bde2ff
@ -28,7 +28,7 @@ Enabling cleaning
|
|||||||
To enable cleaning, ensure your ironic.conf is set as follows: ::
|
To enable cleaning, ensure your ironic.conf is set as follows: ::
|
||||||
|
|
||||||
[conductor]
|
[conductor]
|
||||||
clean_nodes=true
|
automated_clean=true
|
||||||
|
|
||||||
This will enable the default set of steps, based on your hardware and ironic
|
This will enable the default set of steps, based on your hardware and ironic
|
||||||
drivers. If you're using an agent_* driver, this includes, by default, erasing
|
drivers. If you're using an agent_* driver, this includes, by default, erasing
|
||||||
|
@ -683,11 +683,12 @@
|
|||||||
# unlimited. (integer value)
|
# unlimited. (integer value)
|
||||||
#inspect_timeout=1800
|
#inspect_timeout=1800
|
||||||
|
|
||||||
# Cleaning is a configurable set of steps, such as erasing
|
# Enables or disables automated cleaning. Automated cleaning
|
||||||
# disk drives, that are performed on the node to ensure it is
|
# is a configurable set of steps, such as erasing disk drives,
|
||||||
# in a baseline state and ready to be deployed to. This is
|
# that are performed on the node to ensure it is in a baseline
|
||||||
# done after instance deletion, and during the transition from
|
# state and ready to be deployed to. This is done after
|
||||||
# a "managed" to "available" state. When enabled, the
|
# instance deletion as well as during the transition from a
|
||||||
|
# "manageable" to "available" state. When enabled, the
|
||||||
# particular steps performed to clean a node depend on which
|
# particular steps performed to clean a node depend on which
|
||||||
# driver that node is managed by; see the individual driver's
|
# driver that node is managed by; see the individual driver's
|
||||||
# documentation for details. NOTE: The introduction of the
|
# documentation for details. NOTE: The introduction of the
|
||||||
@ -695,7 +696,8 @@
|
|||||||
# significantly longer. In an environment where all tenants
|
# significantly longer. In an environment where all tenants
|
||||||
# are trusted (eg, because there is only one tenant), this
|
# are trusted (eg, because there is only one tenant), this
|
||||||
# option could be safely disabled. (boolean value)
|
# option could be safely disabled. (boolean value)
|
||||||
#clean_nodes=true
|
# Deprecated group/name - [conductor]/clean_nodes
|
||||||
|
#automated_clean=true
|
||||||
|
|
||||||
# Timeout (seconds) to wait for a callback from the ramdisk
|
# Timeout (seconds) to wait for a callback from the ramdisk
|
||||||
# doing the cleaning. If the timeout is reached the node will
|
# doing the cleaning. If the timeout is reached the node will
|
||||||
|
@ -151,14 +151,18 @@ conductor_opts = [
|
|||||||
default=1800,
|
default=1800,
|
||||||
help=_('Timeout (seconds) for waiting for node inspection. '
|
help=_('Timeout (seconds) for waiting for node inspection. '
|
||||||
'0 - unlimited.')),
|
'0 - unlimited.')),
|
||||||
cfg.BoolOpt('clean_nodes',
|
# TODO(rloo): Remove support for deprecated name 'clean_nodes' in Newton
|
||||||
|
# cycle.
|
||||||
|
cfg.BoolOpt('automated_clean',
|
||||||
default=True,
|
default=True,
|
||||||
help=_('Cleaning is a configurable set of steps, such as '
|
deprecated_name='clean_nodes',
|
||||||
'erasing disk drives, that are performed on the node '
|
help=_('Enables or disables automated cleaning. Automated '
|
||||||
'to ensure it is in a baseline state and ready to be '
|
'cleaning is a configurable set of steps, '
|
||||||
'deployed to. '
|
'such as erasing disk drives, that are performed on '
|
||||||
'This is done after instance deletion, and during '
|
'the node to ensure it is in a baseline state and '
|
||||||
'the transition from a "managed" to "available" '
|
'ready to be deployed to. This is '
|
||||||
|
'done after instance deletion as well as during '
|
||||||
|
'the transition from a "manageable" to "available" '
|
||||||
'state. When enabled, the particular steps '
|
'state. When enabled, the particular steps '
|
||||||
'performed to clean a node depend on which driver '
|
'performed to clean a node depend on which driver '
|
||||||
'that node is managed by; see the individual '
|
'that node is managed by; see the individual '
|
||||||
@ -859,7 +863,7 @@ class ConductorManager(base_manager.BaseConductorManager):
|
|||||||
LOG.debug('Starting %(type)s cleaning for node %(node)s',
|
LOG.debug('Starting %(type)s cleaning for node %(node)s',
|
||||||
{'type': clean_type, 'node': node.uuid})
|
{'type': clean_type, 'node': node.uuid})
|
||||||
|
|
||||||
if not manual_clean and not CONF.conductor.clean_nodes:
|
if not manual_clean and not CONF.conductor.automated_clean:
|
||||||
# Skip cleaning, move to AVAILABLE.
|
# Skip cleaning, move to AVAILABLE.
|
||||||
node.clean_step = None
|
node.clean_step = None
|
||||||
node.save()
|
node.save()
|
||||||
|
@ -1360,7 +1360,7 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
tests_db_base.DbTestCase):
|
tests_db_base.DbTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(DoNodeCleanTestCase, self).setUp()
|
super(DoNodeCleanTestCase, self).setUp()
|
||||||
self.config(clean_nodes=True, group='conductor')
|
self.config(automated_clean=True, group='conductor')
|
||||||
self.power_update = {
|
self.power_update = {
|
||||||
'step': 'update_firmware', 'priority': 10, 'interface': 'power'}
|
'step': 'update_firmware', 'priority': 10, 'interface': 'power'}
|
||||||
self.deploy_update = {
|
self.deploy_update = {
|
||||||
@ -1627,7 +1627,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
@mock.patch('ironic.drivers.modules.fake.FakePower.validate')
|
@mock.patch('ironic.drivers.modules.fake.FakePower.validate')
|
||||||
def __do_node_clean_validate_fail(self, mock_validate, clean_steps=None):
|
def __do_node_clean_validate_fail(self, mock_validate, clean_steps=None):
|
||||||
# InvalidParameterValue should be cause node to go to CLEANFAIL
|
# InvalidParameterValue should be cause node to go to CLEANFAIL
|
||||||
self.config(clean_nodes=True, group='conductor')
|
|
||||||
mock_validate.side_effect = exception.InvalidParameterValue('error')
|
mock_validate.side_effect = exception.InvalidParameterValue('error')
|
||||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
@ -1650,7 +1649,7 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
|
|
||||||
@mock.patch('ironic.drivers.modules.fake.FakePower.validate')
|
@mock.patch('ironic.drivers.modules.fake.FakePower.validate')
|
||||||
def test__do_node_clean_automated_disabled(self, mock_validate):
|
def test__do_node_clean_automated_disabled(self, mock_validate):
|
||||||
self.config(clean_nodes=False, group='conductor')
|
self.config(automated_clean=False, group='conductor')
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
self.context, driver='fake',
|
self.context, driver='fake',
|
||||||
provision_state=states.CLEANING,
|
provision_state=states.CLEANING,
|
||||||
@ -1675,7 +1674,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
def __do_node_clean_prepare_clean_fail(self, mock_prep, clean_steps=None):
|
def __do_node_clean_prepare_clean_fail(self, mock_prep, clean_steps=None):
|
||||||
# Exception from task.driver.deploy.prepare_cleaning should cause node
|
# Exception from task.driver.deploy.prepare_cleaning should cause node
|
||||||
# to go to CLEANFAIL
|
# to go to CLEANFAIL
|
||||||
self.config(clean_nodes=True, group='conductor')
|
|
||||||
mock_prep.side_effect = exception.InvalidParameterValue('error')
|
mock_prep.side_effect = exception.InvalidParameterValue('error')
|
||||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
@ -1698,7 +1696,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
|
|
||||||
@mock.patch('ironic.drivers.modules.fake.FakeDeploy.prepare_cleaning')
|
@mock.patch('ironic.drivers.modules.fake.FakeDeploy.prepare_cleaning')
|
||||||
def __do_node_clean_prepare_clean_wait(self, mock_prep, clean_steps=None):
|
def __do_node_clean_prepare_clean_wait(self, mock_prep, clean_steps=None):
|
||||||
self.config(clean_nodes=True, group='conductor')
|
|
||||||
mock_prep.return_value = states.CLEANWAIT
|
mock_prep.return_value = states.CLEANWAIT
|
||||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
@ -1722,7 +1719,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
|||||||
@mock.patch.object(conductor_utils, 'set_node_cleaning_steps')
|
@mock.patch.object(conductor_utils, 'set_node_cleaning_steps')
|
||||||
def __do_node_clean_steps_fail(self, mock_steps, clean_steps=None,
|
def __do_node_clean_steps_fail(self, mock_steps, clean_steps=None,
|
||||||
invalid_exc=True):
|
invalid_exc=True):
|
||||||
self.config(clean_nodes=True, group='conductor')
|
|
||||||
if invalid_exc:
|
if invalid_exc:
|
||||||
mock_steps.side_effect = exception.InvalidParameterValue('invalid')
|
mock_steps.side_effect = exception.InvalidParameterValue('invalid')
|
||||||
else:
|
else:
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
deprecations:
|
||||||
|
- The [conductor]/clean_nodes config is deprecated and will be removed in the
|
||||||
|
Newton cycle. It has been replaced by the [conductor]/automated_clean
|
||||||
|
config.
|
Loading…
Reference in New Issue
Block a user