The changes here are substantial and widespread, but in summary:
- We use cfg to parse the CLI and config files, rather than optparse
and PasteDeploy
- A schema is defined for all configuration options close to the code
which uses the option
- 2 ConfigOpts sub-classes are added to config.py basically just
defining how to find config files; this means we can now use e.g.
glance.conf for base config values which glance-api.conf can
override
- load_paste_app() is changed to load the paste app from the last
config file in the stack and pass the app the ConfigOpts instance
- The generic app and filter factories in wsgi.py are modified to
pass a ConfigOpts instance to the apps and filters
- A ConfigOpts subclass is added for the unit tests which writes out
config values to a temporary config file and uses cfg to parse that
I've tried to keep the switch as unobtrusive as possible leaving further
cleanups for later e.g.
- Moving PasteDeploy config out of the config files - I think it would
be good to aim for having users modify the PasteDeploy config files
only in fairly rare circumstances. To achieve this, we might define
a number of common pipelines in the PasteDeploy config and allow
the user to choose between those pipelines in the glance config.
- We should add help strings to all the opts, even just for the sake
of documenting them
- We should move a bunch of the options into groups - e.g. all the
rabbit options
- We no longer rely on config files for default values, so the default
config files could contain nothing but comments - i.e. explaining
each option and showing what the default for it is - making it
obvious where a user has explicitly set a value
There are a couple of behavioural changes which I don't think are
signifcant but are worth mentioning:
- We used to support passing a config file as a positional argument
but don't anymore; AFAICT, it was only used by glance-manage when
launching servers and I've changed that to pass --config-file
- log_opt_values() doesn't log unknown opts, so won't log any values
for opts which get registered at runtime later
Change-Id: Iafa998a2a8d860f1ad57e2cd2afee69686ed58ba
* Adds SSL configuration params to all client classes
* Adds unit test for bad SSL client configuration
* Refactors the registry methods to no longer need
configuration options passed, and to configure the
registry client once, on images.Controller.__init__
* Adds glance-api.conf options for SSL support in
registry client connections.
* Adds SSL CA file socket wrappers via a client auth
HTTPS connection class
* Adds server SSL support, but not functional tests
for SSL support yet. Still need to research self-signed
cert generation for tests...
* Updates documentation for bind and startup options
* Adds functional test case for secure communication
with API server stood up with SSL supprt. Note it is
not very DRY. There is some DRY cleanup to do in the
future...
TODO: Integrate options with bin/glance CLI tool
Change-Id: Ie9fcd36337cc93fd5beeabb9186ad5e93ae2a0f0
Added gettext.install to glance endpoints, setup.py, and run_tests.py. Wrapped all exceptions in common/exception.py with gettext.
Included fix for bug lp:823676.
Change-Id: Ied4381e1676227afea857acd01f4754e6a181106
paste.deploy configuration files. Removed ability to configure
server options from CLI options when starting the servers with
the exception of --verbose and --debug, which are useful during
debugging.
Updated the documentation controllingservers.rst.
program based on Swift's swift-init script.
Adds a crap-ton of documentation on installing Glance and
controlling Glance's server programs.
This was necessary since when glance.common.server was removed
from Glance and paste.deploy used, we lost the ability to control
server daemonization with CLI options. This adds back some of that
functionality while still using paste.deploy like Swift does.
in favour of paste.deploy.
We use a solution that is a hybrid of the code in Nova and Swift:
* We continue to use the object-based WSGI Server/Router objects
in glance.common.wsgi.
* We load options from a configuration file like Swift does, merging
in the typed options returned from glance.common.config.parse_options()
NOTE: Due to http://trac.pythonpaste.org/pythonpaste/ticket/379, we
removed the CLI option --log-format and use a hard-coded DEFAULT_LOG_FORMAT.
You are still able to adjust the log format using the --log-config-file
option, however, and setting the format string in the log config file.
configuration files.
glance-api, glance-registry, and glance-combined now process
a set of configuration files in order, with options read from
later files overriding values in earlier files:
/etc/glance.cnf
/etc/glance/glance.conf
~/glance.cnf
~/.glance/glance.cnf
./glance.cnf
The new glance.common.config.get_config_file_options() function
processes these config files into a mapping of key/value
option pairs. This mapping can now be passed to the
glance.common.config.parse_options() function as default values
Adds a sample glance.cnf to the etc/ directory
outputs INFO-level log records.
Adds --log-date-format option for greater control over the log
record date format.
Makes config.setup_logging() set up all loggers, not just an application's
specific logger. Fixes issue Rick brought up about logging config file
being overridden by adding a return statement after logging.config stuff
is done.
* Adds option group for logging-only configuration settings
* Adds /etc and /etc/logging.cnf.sample as an example of setting
up logging configuration directly with a config file
* Adds to glance.common.config a couple function useful in
adding logging options and setting up the logger(s)
Next round will include the addition of a --debug option and
lots more debugging output to the loggers.
Fix was simple. args = FLAGS(argv) returns ALL argv's including
the program name. optparse.OptionParser.parse_args() does not
return the program name as args[0], instead it returns args[1:].
In glance.common.server.serve(), we were checking:
action = 'start':
if len(args) > 1:
action = args.pop()
Changing this to if len(args): fixed the problem.
consolidating the Teller and Parallax APIs into a single,
unified Glance API.
The following changes were made:
* Change the bin/teller-server to bin/glance-api
* Remove the notion of Teller as something the user
has to be aware of. Call the previous "Teller backends"
simple "stores".
* Moves /glance/teller/controllers.py to /glance/server.py
* Break out the filesystem store into a separate file
Next steps:
* Hide Parallax behind a unified API
* Update docs and wiki
* Refactor image registry database to include more
information about images
* Refactor notion of an image identifier to be a Glance URI