Added some infrastructure tools
Copied generate_sample.sh and with_venv.sh scripts from openstack/ironic. Generated sample config. Change-Id: I1beab119499156c711d838a3a1ecc3316b655900
This commit is contained in:
parent
51bb147e47
commit
74ba66568e
|
@ -0,0 +1,83 @@
|
||||||
|
[DEFAULT]
|
||||||
|
|
||||||
|
#
|
||||||
|
# Options defined in ironic_python_agent.openstack.common.log
|
||||||
|
#
|
||||||
|
|
||||||
|
# Print debugging output (set logging level to DEBUG instead
|
||||||
|
# of default WARNING level). (boolean value)
|
||||||
|
#debug=false
|
||||||
|
|
||||||
|
# Print more verbose output (set logging level to INFO instead
|
||||||
|
# of default WARNING level). (boolean value)
|
||||||
|
#verbose=false
|
||||||
|
|
||||||
|
# Log output to standard error (boolean value)
|
||||||
|
#use_stderr=true
|
||||||
|
|
||||||
|
# format string to use for log messages with context (string
|
||||||
|
# value)
|
||||||
|
#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
|
||||||
|
|
||||||
|
# format string to use for log messages without context
|
||||||
|
# (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)
|
||||||
|
#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 TRACE %(name)s %(instance)s
|
||||||
|
|
||||||
|
# list of logger=LEVEL pairs (list value)
|
||||||
|
#default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
|
||||||
|
|
||||||
|
# publish error events (boolean value)
|
||||||
|
#publish_errors=false
|
||||||
|
|
||||||
|
# make deprecations fatal (boolean value)
|
||||||
|
#fatal_deprecations=false
|
||||||
|
|
||||||
|
# If an instance is passed with the log message, format it
|
||||||
|
# like this (string value)
|
||||||
|
#instance_format="[instance: %(uuid)s] "
|
||||||
|
|
||||||
|
# If an instance UUID is passed with the log message, format
|
||||||
|
# it like this (string value)
|
||||||
|
#instance_uuid_format="[instance: %(uuid)s] "
|
||||||
|
|
||||||
|
# If this option is specified, the logging configuration file
|
||||||
|
# specified is used and overrides any other logging options
|
||||||
|
# specified. Please see the Python logging module
|
||||||
|
# documentation for details on logging configuration files.
|
||||||
|
# (string value)
|
||||||
|
#log_config=<None>
|
||||||
|
|
||||||
|
# DEPRECATED. A logging.Formatter log message format string
|
||||||
|
# which may use any of the available logging.LogRecord
|
||||||
|
# attributes. This option is deprecated. Please use
|
||||||
|
# logging_context_format_string and
|
||||||
|
# logging_default_format_string instead. (string value)
|
||||||
|
#log_format=<None>
|
||||||
|
|
||||||
|
# Format string for %%(asctime)s in log records. Default:
|
||||||
|
# %(default)s (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. (string value)
|
||||||
|
#log_file=<None>
|
||||||
|
|
||||||
|
# (Optional) The base directory used for relative --log-file
|
||||||
|
# paths (string value)
|
||||||
|
#log_dir=<None>
|
||||||
|
|
||||||
|
# Use syslog for logging. (boolean value)
|
||||||
|
#use_syslog=false
|
||||||
|
|
||||||
|
# syslog facility to receive log lines (string value)
|
||||||
|
#syslog_log_facility=LOG_USER
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
PROJECT_NAME=${PROJECT_NAME:-ironic_python_agent}
|
||||||
|
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 ! 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
|
|
@ -0,0 +1,120 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
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:-${BASEDIR##*/}}
|
||||||
|
PACKAGENAME=`echo $PACKAGENAME | tr - _`
|
||||||
|
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/*" ! -path "*/nova/*" \
|
||||||
|
-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 mod in ${IRONIC_PYTHON_AGENT_CONFIG_GENERATOR_EXTRA_MODULES}; do
|
||||||
|
MODULES="$MODULES -m $mod"
|
||||||
|
done
|
||||||
|
|
||||||
|
for lib in ${IRONIC_PYTHON_AGENT_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=ironic_python_agent.openstack.common.config.generator
|
||||||
|
MODULEPATH=${MODULEPATH:-$DEFAULT_MODULEPATH}
|
||||||
|
OUTPUTFILE=$OUTPUTDIR/$PACKAGENAME.conf.sample
|
||||||
|
python -m $MODULEPATH $MODULES $LIBRARIES $FILES > $OUTPUTFILE
|
||||||
|
|
||||||
|
# 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
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
tools_path=${tools_path:-$(dirname $0)}
|
||||||
|
venv_path=${venv_path:-${tools_path}}
|
||||||
|
venv_dir=${venv_name:-/../.venv}
|
||||||
|
TOOLS=${tools_path}
|
||||||
|
VENV=${venv:-${venv_path}/${venv_dir}}
|
||||||
|
source ${VENV}/bin/activate && "$@"
|
Loading…
Reference in New Issue