Replace config 'clean_nodes' with 'automated_clean'
Since we have automated cleaning and manual cleaning, the config 'clean_nodes' is a bit confusing since it only refers to automated cleaning. It is replaced with 'automated_clean'. This deprecates the 'clean_nodes' config; the plan is to delete it in Newton cycle. Updates to the documentation to explicitly mention automated vs manual cleaning is done in a separate patch. This includes a reno-style release note about the upgrade impact. Change-Id: I5b4fbac1753cb4213eb151b663490f381b751597 Partial-Bug: #1526290
This commit is contained in:
parent
c9f96d6d79
commit
9220cbd385
@ -28,7 +28,7 @@ Enabling cleaning
|
||||
To enable cleaning, ensure your ironic.conf is set as follows: ::
|
||||
|
||||
[conductor]
|
||||
clean_nodes=true
|
||||
automated_clean=true
|
||||
|
||||
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
|
||||
|
@ -164,20 +164,20 @@
|
||||
# Options defined in oslo.log
|
||||
#
|
||||
|
||||
# Print debugging output (set logging level to DEBUG instead
|
||||
# of default INFO level). (boolean value)
|
||||
# If set to true, the logging level will be set to DEBUG
|
||||
# instead of the default INFO level. (boolean value)
|
||||
#debug=false
|
||||
|
||||
# If set to false, will disable INFO logging level, making
|
||||
# WARNING the default. (boolean value)
|
||||
# If set to false, the logging level will be set to WARNING
|
||||
# instead of the default INFO level. (boolean value)
|
||||
#verbose=true
|
||||
|
||||
# The name of a logging configuration file. This file is
|
||||
# appended to any existing logging configuration files. For
|
||||
# details about logging configuration files, see the Python
|
||||
# logging module documentation. Note that when logging
|
||||
# configuration files are used then all logging configuration
|
||||
# is set in the configuration file and other logging
|
||||
# configuration files are used all logging configuration is
|
||||
# defined in the configuration file and other logging
|
||||
# configuration options are ignored (for example, log_format).
|
||||
# (string value)
|
||||
# Deprecated group/name - [DEFAULT]/log_config
|
||||
@ -191,29 +191,30 @@
|
||||
# ignored if log_config_append is set. (string value)
|
||||
#log_format=<None>
|
||||
|
||||
# Format string for %%(asctime)s in log records. Default:
|
||||
# %(default)s . This option is ignored if log_config_append is
|
||||
# set. (string value)
|
||||
# Defines the format string for %%(asctime)s in log records.
|
||||
# Default: %(default)s . This option is ignored if
|
||||
# log_config_append is set. (string value)
|
||||
#log_date_format=%Y-%m-%d %H:%M:%S
|
||||
|
||||
# (Optional) Name of log file to output to. If no default is
|
||||
# set, logging will go to stdout. This option is ignored if
|
||||
# log_config_append is set. (string value)
|
||||
# (Optional) Name of log file to send logging output to. If no
|
||||
# default is set, logging will go to stderr as defined by
|
||||
# use_stderr. This option is ignored if log_config_append is
|
||||
# set. (string value)
|
||||
# Deprecated group/name - [DEFAULT]/logfile
|
||||
#log_file=<None>
|
||||
|
||||
# (Optional) The base directory used for relative --log-file
|
||||
# (Optional) The base directory used for relative log_file
|
||||
# paths. This option is ignored if log_config_append is set.
|
||||
# (string value)
|
||||
# Deprecated group/name - [DEFAULT]/logdir
|
||||
#log_dir=<None>
|
||||
|
||||
# (Optional) Uses logging handler designed to watch file
|
||||
# system. When log file is moved or removed this handler will
|
||||
# open a new log file with specified path instantaneously. It
|
||||
# makes sense only if log-file option is specified and Linux
|
||||
# platform is used. This option is ignored if
|
||||
# log_config_append is set. (boolean value)
|
||||
# Uses logging handler designed to watch file system. When log
|
||||
# file is moved or removed this handler will open a new log
|
||||
# file with specified path instantaneously. It makes sense
|
||||
# only if log_file option is specified and Linux platform is
|
||||
# used. This option is ignored if log_config_append is set.
|
||||
# (boolean value)
|
||||
#watch_log_file=false
|
||||
|
||||
# Use syslog for logging. Existing syslog format is DEPRECATED
|
||||
@ -221,11 +222,11 @@
|
||||
# ignored if log_config_append is set. (boolean value)
|
||||
#use_syslog=false
|
||||
|
||||
# (Optional) Enables or disables syslog rfc5424 format for
|
||||
# logging. If enabled, prefixes the MSG part of the syslog
|
||||
# message with APP-NAME (RFC5424). The format without the APP-
|
||||
# NAME is deprecated in Kilo, and will be removed in Mitaka,
|
||||
# along with this option. This option is ignored if
|
||||
# Enables or disables syslog rfc5424 format for logging. If
|
||||
# enabled, prefixes the MSG part of the syslog message with
|
||||
# APP-NAME (RFC5424). The format without the APP-NAME is
|
||||
# deprecated in Kilo, and will be removed in Mitaka, along
|
||||
# with this option. This option is ignored if
|
||||
# log_config_append is set. (boolean value)
|
||||
#use_syslog_rfc_format=true
|
||||
|
||||
@ -241,20 +242,24 @@
|
||||
# value)
|
||||
#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
|
||||
|
||||
# Format string to use for log messages without context.
|
||||
# (string value)
|
||||
# Format string to use for log messages when context is
|
||||
# undefined. (string value)
|
||||
#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
|
||||
|
||||
# Data to append to log format when level is DEBUG. (string
|
||||
# value)
|
||||
# Additional data to append to log message when logging level
|
||||
# for the message is DEBUG. (string value)
|
||||
#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
|
||||
|
||||
# Prefix each line of exception output with this format.
|
||||
# (string value)
|
||||
#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s
|
||||
|
||||
# List of logger=LEVEL pairs. This option is ignored if
|
||||
# log_config_append is set. (list value)
|
||||
# Defines the format string for %(user_identity)s that is used
|
||||
# in logging_context_format_string. (string value)
|
||||
#logging_user_identity_format=%(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s
|
||||
|
||||
# List of package logging levels in logger=LEVEL pairs. This
|
||||
# option is ignored if log_config_append is set. (list value)
|
||||
#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN
|
||||
|
||||
# Enables or disables publication of error events. (boolean
|
||||
@ -269,10 +274,6 @@
|
||||
# message. (string value)
|
||||
#instance_uuid_format="[instance: %(uuid)s] "
|
||||
|
||||
# Format string for user_identity field of the
|
||||
# logging_context_format_string (string value)
|
||||
#logging_user_identity_format=%(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s
|
||||
|
||||
# Enables or disables fatal status of deprecations. (boolean
|
||||
# value)
|
||||
#fatal_deprecations=false
|
||||
@ -682,11 +683,12 @@
|
||||
# unlimited. (integer value)
|
||||
#inspect_timeout=1800
|
||||
|
||||
# Cleaning is a configurable set of steps, such as erasing
|
||||
# disk drives, that are performed on the node to ensure it is
|
||||
# in a baseline state and ready to be deployed to. This is
|
||||
# done after instance deletion, and during the transition from
|
||||
# a "managed" to "available" state. When enabled, the
|
||||
# Enables or disables automated cleaning. Automated cleaning
|
||||
# is a configurable set of steps, such as erasing disk drives,
|
||||
# that are performed on the node to ensure it is in a baseline
|
||||
# state and 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 performed to clean a node depend on which
|
||||
# driver that node is managed by; see the individual driver's
|
||||
# documentation for details. NOTE: The introduction of the
|
||||
@ -694,7 +696,8 @@
|
||||
# significantly longer. In an environment where all tenants
|
||||
# are trusted (eg, because there is only one tenant), this
|
||||
# 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
|
||||
# doing the cleaning. If the timeout is reached the node will
|
||||
@ -1397,13 +1400,12 @@
|
||||
#revocation_cache_time=10
|
||||
|
||||
# (Optional) If defined, indicate whether token data should be
|
||||
# authenticated or authenticated and encrypted. Acceptable
|
||||
# values are MAC or ENCRYPT. If MAC, token data is
|
||||
# authenticated (with HMAC) in the cache. If ENCRYPT, token
|
||||
# data is encrypted and authenticated in the cache. If the
|
||||
# value is not one of these options or empty, auth_token will
|
||||
# raise an exception on initialization. (string value)
|
||||
#memcache_security_strategy=<None>
|
||||
# authenticated or authenticated and encrypted. If MAC, token
|
||||
# data is authenticated (with HMAC) in the cache. If ENCRYPT,
|
||||
# token data is encrypted and authenticated in the cache. If
|
||||
# the value is not one of these options or empty, auth_token
|
||||
# will raise an exception on initialization. (string value)
|
||||
#memcache_security_strategy=None
|
||||
|
||||
# (Optional, mandatory if memcache_security_strategy is
|
||||
# defined) This string is used for key derivation. (string
|
||||
@ -1470,44 +1472,6 @@
|
||||
# (list value)
|
||||
#hash_algorithms=md5
|
||||
|
||||
# Prefix to prepend at the beginning of the path. Deprecated,
|
||||
# use identity_uri. (string value)
|
||||
#auth_admin_prefix=
|
||||
|
||||
# Host providing the admin Identity API endpoint. Deprecated,
|
||||
# use identity_uri. (string value)
|
||||
#auth_host=127.0.0.1
|
||||
|
||||
# Port of the admin Identity API endpoint. Deprecated, use
|
||||
# identity_uri. (integer value)
|
||||
#auth_port=35357
|
||||
|
||||
# Protocol of the admin Identity API endpoint (http or https).
|
||||
# Deprecated, use identity_uri. (string value)
|
||||
#auth_protocol=https
|
||||
|
||||
# Complete admin Identity API endpoint. This should specify
|
||||
# the unversioned root endpoint e.g. https://localhost:35357/
|
||||
# (string value)
|
||||
#identity_uri=<None>
|
||||
|
||||
# This option is deprecated and may be removed in a future
|
||||
# release. Single shared secret with the Keystone
|
||||
# configuration used for bootstrapping a Keystone
|
||||
# installation, or otherwise bypassing the normal
|
||||
# authentication process. This option should not be used, use
|
||||
# `admin_user` and `admin_password` instead. (string value)
|
||||
#admin_token=<None>
|
||||
|
||||
# Service username. (string value)
|
||||
#admin_user=<None>
|
||||
|
||||
# Service user password. (string value)
|
||||
#admin_password=<None>
|
||||
|
||||
# Service tenant name. (string value)
|
||||
#admin_tenant_name=admin
|
||||
|
||||
# Authentication type to load (type of value is unknown)
|
||||
# Deprecated group/name - [keystone_authtoken]/auth_plugin
|
||||
#auth_type=<None>
|
||||
|
@ -151,14 +151,18 @@ conductor_opts = [
|
||||
default=1800,
|
||||
help=_('Timeout (seconds) for waiting for node inspection. '
|
||||
'0 - unlimited.')),
|
||||
cfg.BoolOpt('clean_nodes',
|
||||
# TODO(rloo): Remove support for deprecated name 'clean_nodes' in Newton
|
||||
# cycle.
|
||||
cfg.BoolOpt('automated_clean',
|
||||
default=True,
|
||||
help=_('Cleaning is a configurable set of steps, such as '
|
||||
'erasing disk drives, that are performed on the node '
|
||||
'to ensure it is in a baseline state and ready to be '
|
||||
'deployed to. '
|
||||
'This is done after instance deletion, and during '
|
||||
'the transition from a "managed" to "available" '
|
||||
deprecated_name='clean_nodes',
|
||||
help=_('Enables or disables automated cleaning. Automated '
|
||||
'cleaning is a configurable set of steps, '
|
||||
'such as erasing disk drives, that are performed on '
|
||||
'the node to ensure it is in a baseline state and '
|
||||
'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 '
|
||||
'performed to clean a node depend on which driver '
|
||||
'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',
|
||||
{'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.
|
||||
node.clean_step = None
|
||||
node.save()
|
||||
|
@ -1360,7 +1360,7 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
tests_db_base.DbTestCase):
|
||||
def setUp(self):
|
||||
super(DoNodeCleanTestCase, self).setUp()
|
||||
self.config(clean_nodes=True, group='conductor')
|
||||
self.config(automated_clean=True, group='conductor')
|
||||
self.power_update = {
|
||||
'step': 'update_firmware', 'priority': 10, 'interface': 'power'}
|
||||
self.deploy_update = {
|
||||
@ -1627,7 +1627,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
@mock.patch('ironic.drivers.modules.fake.FakePower.validate')
|
||||
def __do_node_clean_validate_fail(self, mock_validate, clean_steps=None):
|
||||
# InvalidParameterValue should be cause node to go to CLEANFAIL
|
||||
self.config(clean_nodes=True, group='conductor')
|
||||
mock_validate.side_effect = exception.InvalidParameterValue('error')
|
||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||
node = obj_utils.create_test_node(
|
||||
@ -1650,7 +1649,7 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
|
||||
@mock.patch('ironic.drivers.modules.fake.FakePower.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(
|
||||
self.context, driver='fake',
|
||||
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):
|
||||
# Exception from task.driver.deploy.prepare_cleaning should cause node
|
||||
# to go to CLEANFAIL
|
||||
self.config(clean_nodes=True, group='conductor')
|
||||
mock_prep.side_effect = exception.InvalidParameterValue('error')
|
||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||
node = obj_utils.create_test_node(
|
||||
@ -1698,7 +1696,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
|
||||
@mock.patch('ironic.drivers.modules.fake.FakeDeploy.prepare_cleaning')
|
||||
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
|
||||
tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
|
||||
node = obj_utils.create_test_node(
|
||||
@ -1722,7 +1719,6 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
@mock.patch.object(conductor_utils, 'set_node_cleaning_steps')
|
||||
def __do_node_clean_steps_fail(self, mock_steps, clean_steps=None,
|
||||
invalid_exc=True):
|
||||
self.config(clean_nodes=True, group='conductor')
|
||||
if invalid_exc:
|
||||
mock_steps.side_effect = exception.InvalidParameterValue('invalid')
|
||||
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