Fix issue where system hostname can impact genconfig

When run on a system that has a hostname or Fully Qualified Domain Name
(FQDN) of 'localhost' the generated config file would be wrong as it
would change the default values of 'localhost' to the value 'ironic'

To prevent this we mock out the calls to system.getfqdn() and
system.gethostname()

Change the default value shown in the config file for 3rd party
libraries that use either the FQDN or hostname as their default value
from 'ironic' to 'localhost'.

Also regenerate the etc/ironic/ironic.conf.sample file

Change-Id: Ibaec7f2488896824e225e4f159a6284f31f17328
Closes-Bug: #1524768
This commit is contained in:
John L. Villalovos 2015-12-10 04:17:40 -08:00
parent 8f5350017b
commit 0a75c41e21
2 changed files with 49 additions and 90 deletions

View File

@ -125,7 +125,7 @@
# the node name must be valid within an AMQP key, and if using # the node name must be valid within an AMQP key, and if using
# ZeroMQ, a valid hostname, FQDN, or IP address. (string # ZeroMQ, a valid hostname, FQDN, or IP address. (string
# value) # value)
#host=ironic #host=localhost
# #
@ -164,20 +164,20 @@
# Options defined in oslo.log # Options defined in oslo.log
# #
# Print debugging output (set logging level to DEBUG instead # If set to true, the logging level will be set to DEBUG
# of default INFO level). (boolean value) # instead of the default INFO level. (boolean value)
#debug=false #debug=false
# If set to false, will disable INFO logging level, making # If set to false, the logging level will be set to WARNING
# WARNING the default. (boolean value) # instead of the default INFO level. (boolean value)
#verbose=true #verbose=true
# The name of a logging configuration file. This file is # The name of a logging configuration file. This file is
# appended to any existing logging configuration files. For # appended to any existing logging configuration files. For
# details about logging configuration files, see the Python # details about logging configuration files, see the Python
# logging module documentation. Note that when logging # logging module documentation. Note that when logging
# configuration files are used then all logging configuration # configuration files are used all logging configuration is
# is set in the configuration file and other logging # defined in the configuration file and other logging
# configuration options are ignored (for example, log_format). # configuration options are ignored (for example, log_format).
# (string value) # (string value)
# Deprecated group/name - [DEFAULT]/log_config # Deprecated group/name - [DEFAULT]/log_config
@ -191,29 +191,30 @@
# ignored if log_config_append is set. (string value) # ignored if log_config_append is set. (string value)
#log_format=<None> #log_format=<None>
# Format string for %%(asctime)s in log records. Default: # Defines the format string for %%(asctime)s in log records.
# %(default)s . This option is ignored if log_config_append is # Default: %(default)s . This option is ignored if
# set. (string value) # log_config_append is set. (string value)
#log_date_format=%Y-%m-%d %H:%M:%S #log_date_format=%Y-%m-%d %H:%M:%S
# (Optional) Name of log file to output to. If no default is # (Optional) Name of log file to send logging output to. If no
# set, logging will go to stdout. This option is ignored if # default is set, logging will go to stderr as defined by
# log_config_append is set. (string value) # use_stderr. This option is ignored if log_config_append is
# set. (string value)
# Deprecated group/name - [DEFAULT]/logfile # Deprecated group/name - [DEFAULT]/logfile
#log_file=<None> #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. # paths. This option is ignored if log_config_append is set.
# (string value) # (string value)
# Deprecated group/name - [DEFAULT]/logdir # Deprecated group/name - [DEFAULT]/logdir
#log_dir=<None> #log_dir=<None>
# (Optional) Uses logging handler designed to watch file # Uses logging handler designed to watch file system. When log
# system. When log file is moved or removed this handler will # file is moved or removed this handler will open a new log
# open a new log file with specified path instantaneously. It # file with specified path instantaneously. It makes sense
# makes sense only if log-file option is specified and Linux # only if log_file option is specified and Linux platform is
# platform is used. This option is ignored if # used. This option is ignored if log_config_append is set.
# log_config_append is set. (boolean value) # (boolean value)
#watch_log_file=false #watch_log_file=false
# Use syslog for logging. Existing syslog format is DEPRECATED # Use syslog for logging. Existing syslog format is DEPRECATED
@ -221,11 +222,11 @@
# ignored if log_config_append is set. (boolean value) # ignored if log_config_append is set. (boolean value)
#use_syslog=false #use_syslog=false
# (Optional) Enables or disables syslog rfc5424 format for # Enables or disables syslog rfc5424 format for logging. If
# logging. If enabled, prefixes the MSG part of the syslog # enabled, prefixes the MSG part of the syslog message with
# message with APP-NAME (RFC5424). The format without the APP- # APP-NAME (RFC5424). The format without the APP-NAME is
# NAME is deprecated in Kilo, and will be removed in Mitaka, # deprecated in Kilo, and will be removed in Mitaka, along
# along with this option. This option is ignored if # with this option. This option is ignored if
# log_config_append is set. (boolean value) # log_config_append is set. (boolean value)
#use_syslog_rfc_format=true #use_syslog_rfc_format=true
@ -241,20 +242,24 @@
# value) # 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 #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. # Format string to use for log messages when context is
# (string value) # undefined. (string value)
#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s #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 # Additional data to append to log message when logging level
# value) # for the message is DEBUG. (string value)
#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d #logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
# Prefix each line of exception output with this format. # Prefix each line of exception output with this format.
# (string value) # (string value)
#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s #logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s
# List of logger=LEVEL pairs. This option is ignored if # Defines the format string for %(user_identity)s that is used
# log_config_append is set. (list value) # 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 #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 # Enables or disables publication of error events. (boolean
@ -269,10 +274,6 @@
# message. (string value) # message. (string value)
#instance_uuid_format="[instance: %(uuid)s] " #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 # Enables or disables fatal status of deprecations. (boolean
# value) # value)
#fatal_deprecations=false #fatal_deprecations=false
@ -311,7 +312,7 @@
# Name of this node. Must be a valid hostname, FQDN, or IP # Name of this node. Must be a valid hostname, FQDN, or IP
# address. Must match "host" option, if running Nova. (string # address. Must match "host" option, if running Nova. (string
# value) # value)
#rpc_zmq_host=ironic #rpc_zmq_host=localhost
# Seconds to wait before a cast expires (TTL). Only supported # Seconds to wait before a cast expires (TTL). Only supported
# by impl_zmq. (integer value) # by impl_zmq. (integer value)
@ -1394,13 +1395,12 @@
#revocation_cache_time=10 #revocation_cache_time=10
# (Optional) If defined, indicate whether token data should be # (Optional) If defined, indicate whether token data should be
# authenticated or authenticated and encrypted. Acceptable # authenticated or authenticated and encrypted. If MAC, token
# values are MAC or ENCRYPT. If MAC, token data is # data is authenticated (with HMAC) in the cache. If ENCRYPT,
# authenticated (with HMAC) in the cache. If ENCRYPT, token # token data is encrypted and authenticated in the cache. If
# data is encrypted and authenticated in the cache. If the # the value is not one of these options or empty, auth_token
# value is not one of these options or empty, auth_token will # will raise an exception on initialization. (string value)
# raise an exception on initialization. (string value) #memcache_security_strategy=None
#memcache_security_strategy=<None>
# (Optional, mandatory if memcache_security_strategy is # (Optional, mandatory if memcache_security_strategy is
# defined) This string is used for key derivation. (string # defined) This string is used for key derivation. (string
@ -1467,44 +1467,6 @@
# (list value) # (list value)
#hash_algorithms=md5 #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) # Authentication type to load (type of value is unknown)
# Deprecated group/name - [keystone_authtoken]/auth_plugin # Deprecated group/name - [keystone_authtoken]/auth_plugin
#auth_type=<None> #auth_type=<None>

View File

@ -30,6 +30,7 @@ import socket
import sys import sys
import textwrap import textwrap
import mock
from oslo_config import cfg from oslo_config import cfg
import oslo_i18n import oslo_i18n
from oslo_utils import importutils from oslo_utils import importutils
@ -73,6 +74,11 @@ def raise_extension_exception(extmanager, ep, err):
raise raise
# Don't let the system hostname or FQDN affect config file values. Certain 3rd
# party libraries use either 'gethostbyname' or 'getfqdn' to set the default
# value.
@mock.patch.object(socket, 'gethostname', lambda: 'localhost')
@mock.patch.object(socket, 'getfqdn', lambda: 'localhost')
def generate(argv): def generate(argv):
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='generate sample configuration file', description='generate sample configuration file',
@ -238,8 +244,6 @@ def _get_my_ip():
def _sanitize_default(name, value): def _sanitize_default(name, value):
"""Set up a reasonably sensible default for pybasedir, my_ip and host.""" """Set up a reasonably sensible default for pybasedir, my_ip and host."""
hostname = socket.gethostname()
fqdn = socket.getfqdn()
if value.startswith(sys.prefix): if value.startswith(sys.prefix):
# NOTE(jd) Don't use os.path.join, because it is likely to think the # NOTE(jd) Don't use os.path.join, because it is likely to think the
# second part is an absolute pathname and therefore drop the first # second part is an absolute pathname and therefore drop the first
@ -251,13 +255,6 @@ def _sanitize_default(name, value):
return value.replace(BASEDIR, '') return value.replace(BASEDIR, '')
elif value == _get_my_ip(): elif value == _get_my_ip():
return '10.0.0.1' return '10.0.0.1'
elif value in (hostname, fqdn):
if 'host' in name:
return 'ironic'
elif value.endswith(hostname):
return value.replace(hostname, 'ironic')
elif value.endswith(fqdn):
return value.replace(fqdn, 'ironic')
elif value.strip() != value: elif value.strip() != value:
return '"%s"' % value return '"%s"' % value
return value return value