switch from sample_config.sh to oslo-config-generator

This switches keystone to use oslo-config-generator, where the contents
of our sample configuration file are configured using a configuration
file in config-generators/, because the only way to have tox create
files is to have configuration files for your configuration files
(seriously, it chokes when redirects are included in the command for a
test environment).

This also takes advantage of oslo-config-generator's ability to set the
line wrap width, which is done at 79 chars here to match the rest of our
code.

Also update the actual sample file under etc/

Change-Id: I9f9a157c7802c56a2c7484f6f4adec4aeb4071b8
Closes-Bug: 1324610
This commit is contained in:
Dolph Mathews 2014-08-13 09:13:04 -05:00 committed by Brant Knudson
parent f5c06d619c
commit 083d1cd522
9 changed files with 1101 additions and 1413 deletions

View File

@ -0,0 +1,10 @@
[DEFAULT]
output_file = etc/keystone.conf.sample
wrap_width = 79
namespace = keystone
namespace = keystone.notifications
namespace = keystone.openstack.common.eventlet_backdoor
namespace = keystone.openstack.common.log
namespace = keystone.openstack.common.policy
namespace = oslo.messaging
namespace = oslo.db

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,9 @@ notifier_opts = [
help='Default publisher_id for outgoing notifications'),
]
config_section = None
list_opts = lambda: [(config_section, notifier_opts), ]
LOG = log.getLogger(__name__)
# NOTE(gyee): actions that can be notified. One must update this list whenever
# a new action is supported.

View File

@ -65,3 +65,7 @@ warnerrors = True
[entry_points]
oslo.config.opts =
keystone = keystone.common.config:list_opts
keystone.notifications = keystone.notifications:list_opts
keystone.openstack.common.eventlet_backdoor = keystone.openstack.common.eventlet_backdoor:list_opts
keystone.openstack.common.log = keystone.openstack.common.log:list_opts
keystone.openstack.common.policy = keystone.openstack.common.policy:list_opts

View File

@ -1,38 +0,0 @@
This generate_sample.sh tool is used to generate sample config files
from OpenStack project source trees.
Run it by passing the base directory and package name i.e.
$> generate_sample.sh --base-dir /opt/stack/nova --package-name nova \
--output-dir /opt/stack/nova/etc
$> generate_sample.sh -b /opt/stack/neutron -p nova -o /opt/stack/neutron/etc
Optionally, include libraries that register entry points for option
discovery, such as oslo.messaging:
$> generate_sample.sh -b /opt/stack/ceilometer -p ceilometer \
-o /opt/stack/ceilometer/etc -l oslo.messaging
Watch out for warnings about modules like libvirt, qpid and zmq not
being found - these warnings are significant because they result
in options not appearing in the generated config file.
This check_uptodate.sh tool is used to ensure that the generated sample
config file in the OpenStack project source tree is continually kept up
to date with the code itself.
This can be done by adding a hook to tox.ini. For example, if a project
already had flake8 enabled in a section like this:
[testenv.pep8]
commands =
flake8 {posargs}
This section would be changed to:
[testenv.pep8]
commands =
flake8 {posargs}
{toxinidir}/tools/config/check_uptodate.sh

View File

@ -1,29 +0,0 @@
#!/usr/bin/env bash
PROJECT_NAME=${PROJECT_NAME:-keystone}
CFGFILE_NAME=${PROJECT_NAME}.conf.sample
if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then
CFGFILE=etc/${PROJECT_NAME}/${CFGFILE_NAME}
elif [ -e etc/${CFGFILE_NAME} ]; then
CFGFILE=etc/${CFGFILE_NAME}
else
echo "${0##*/}: can not find config file"
exit 1
fi
TEMPDIR=`mktemp -d /tmp/${PROJECT_NAME}.XXXXXX`
trap "rm -rf $TEMPDIR" EXIT
tools/config/generate_sample.sh -b ./ -p ${PROJECT_NAME} -o ${TEMPDIR}
if [ $? != 0 ]
then
exit 1
fi
if ! diff -u ${TEMPDIR}/${CFGFILE_NAME} ${CFGFILE}
then
echo "${0##*/}: ${PROJECT_NAME}.conf.sample is not up to date."
echo "${0##*/}: Please run ${0%%${0##*/}}generate_sample.sh."
exit 1
fi

View File

@ -1,138 +0,0 @@
#!/usr/bin/env bash
# Generate sample configuration for your project.
#
# Aside from the command line flags, it also respects a config file which
# should be named oslo.config.generator.rc and be placed in the same directory.
#
# You can then export the following variables:
# KEYSTONE_CONFIG_GENERATOR_EXTRA_MODULES: list of modules to interrogate for options.
# KEYSTONE_CONFIG_GENERATOR_EXTRA_LIBRARIES: list of libraries to discover.
# KEYSTONE_CONFIG_GENERATOR_EXCLUDED_FILES: list of files to remove from automatic listing.
print_hint() {
echo "Try \`${0##*/} --help' for more information." >&2
}
PARSED_OPTIONS=$(getopt -n "${0##*/}" -o hb:p:m:l:o: \
--long help,base-dir:,package-name:,output-dir:,module:,library: -- "$@")
if [ $? != 0 ] ; then print_hint ; exit 1 ; fi
eval set -- "$PARSED_OPTIONS"
while true; do
case "$1" in
-h|--help)
echo "${0##*/} [options]"
echo ""
echo "options:"
echo "-h, --help show brief help"
echo "-b, --base-dir=DIR project base directory"
echo "-p, --package-name=NAME project package name"
echo "-o, --output-dir=DIR file output directory"
echo "-m, --module=MOD extra python module to interrogate for options"
echo "-l, --library=LIB extra library that registers options for discovery"
exit 0
;;
-b|--base-dir)
shift
BASEDIR=`echo $1 | sed -e 's/\/*$//g'`
shift
;;
-p|--package-name)
shift
PACKAGENAME=`echo $1`
shift
;;
-o|--output-dir)
shift
OUTPUTDIR=`echo $1 | sed -e 's/\/*$//g'`
shift
;;
-m|--module)
shift
MODULES="$MODULES -m $1"
shift
;;
-l|--library)
shift
LIBRARIES="$LIBRARIES -l $1"
shift
;;
--)
break
;;
esac
done
BASEDIR=${BASEDIR:-`pwd`}
if ! [ -d $BASEDIR ]
then
echo "${0##*/}: missing project base directory" >&2 ; print_hint ; exit 1
elif [[ $BASEDIR != /* ]]
then
BASEDIR=$(cd "$BASEDIR" && pwd)
fi
PACKAGENAME=${PACKAGENAME:-$(python setup.py --name)}
TARGETDIR=$BASEDIR/$PACKAGENAME
if ! [ -d $TARGETDIR ]
then
echo "${0##*/}: invalid project package name" >&2 ; print_hint ; exit 1
fi
OUTPUTDIR=${OUTPUTDIR:-$BASEDIR/etc}
# NOTE(bnemec): Some projects put their sample config in etc/,
# some in etc/$PACKAGENAME/
if [ -d $OUTPUTDIR/$PACKAGENAME ]
then
OUTPUTDIR=$OUTPUTDIR/$PACKAGENAME
elif ! [ -d $OUTPUTDIR ]
then
echo "${0##*/}: cannot access \`$OUTPUTDIR': No such file or directory" >&2
exit 1
fi
BASEDIRESC=`echo $BASEDIR | sed -e 's/\//\\\\\//g'`
find $TARGETDIR -type f -name "*.pyc" -delete
FILES=$(find $TARGETDIR -type f -name "*.py" ! -path "*/tests/*" \
-exec grep -l "Opt(" {} + | sed -e "s/^$BASEDIRESC\///g" | sort -u)
RC_FILE="`dirname $0`/oslo.config.generator.rc"
if test -r "$RC_FILE"
then
source "$RC_FILE"
fi
for filename in ${KEYSTONE_CONFIG_GENERATOR_EXCLUDED_FILES}; do
FILES="${FILES[@]/$filename/}"
done
for mod in ${KEYSTONE_CONFIG_GENERATOR_EXTRA_MODULES}; do
MODULES="$MODULES -m $mod"
done
for lib in ${KEYSTONE_CONFIG_GENERATOR_EXTRA_LIBRARIES}; do
LIBRARIES="$LIBRARIES -l $lib"
done
export EVENTLET_NO_GREENDNS=yes
OS_VARS=$(set | sed -n '/^OS_/s/=[^=]*$//gp' | xargs)
[ "$OS_VARS" ] && eval "unset \$OS_VARS"
DEFAULT_MODULEPATH=keystone.openstack.common.config.generator
MODULEPATH=${MODULEPATH:-$DEFAULT_MODULEPATH}
OUTPUTFILE=$OUTPUTDIR/$PACKAGENAME.conf.sample
python -m $MODULEPATH $MODULES $LIBRARIES $FILES > $OUTPUTFILE
if [ $? != 0 ]
then
echo "Can not generate $OUTPUTFILE"
exit 1
fi
# Hook to allow projects to append custom config file snippets
CONCAT_FILES=$(ls $BASEDIR/tools/config/*.conf.sample 2>/dev/null)
for CONCAT_FILE in $CONCAT_FILES; do
cat $CONCAT_FILE >> $OUTPUTFILE
done

View File

@ -1,4 +0,0 @@
# Environmental Variables that affect the automatic sample config generation.
# Additions to any of these variables are space delimited. See the "generate_sample.sh"
# script for the variables that can be used.
KEYSTONE_CONFIG_GENERATOR_EXTRA_LIBRARIES='keystone oslo.messaging oslo.db'

View File

@ -108,7 +108,7 @@ commands=
python setup.py build_sphinx
[testenv:sample_config]
commands = {toxinidir}/tools/config/generate_sample.sh
commands = oslo-config-generator --config-file=config-generator/keystone.conf
[hacking]
import_exceptions =