219 lines
9.1 KiB
Python
219 lines
9.1 KiB
Python
# Copyright 2010 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# All Rights Reserved.
|
|
# Copyright 2012 Red Hat, Inc.
|
|
# Copyright 2013 NTT corp.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
"""Command-line flag library.
|
|
|
|
Emulates gflags by wrapping cfg.ConfigOpts.
|
|
|
|
The idea is to move fully to cfg eventually, and this wrapper is a
|
|
stepping stone.
|
|
|
|
"""
|
|
|
|
import os
|
|
import socket
|
|
|
|
from oslo.config import cfg
|
|
|
|
from cinder.openstack.common.gettextutils import _
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
def _get_my_ip():
|
|
"""
|
|
Returns the actual ip of the local machine.
|
|
|
|
This code figures out what source address would be used if some traffic
|
|
were to be sent out to some well known address on the Internet. In this
|
|
case, a Google DNS server is used, but the specific address does not
|
|
matter much. No traffic is actually sent.
|
|
"""
|
|
try:
|
|
csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
csock.connect(('8.8.8.8', 80))
|
|
(addr, port) = csock.getsockname()
|
|
csock.close()
|
|
return addr
|
|
except socket.error:
|
|
return "127.0.0.1"
|
|
|
|
|
|
core_opts = [
|
|
cfg.StrOpt('connection_type',
|
|
default=None,
|
|
help='Virtualization api connection type : libvirt, xenapi, '
|
|
'or fake'),
|
|
cfg.StrOpt('api_paste_config',
|
|
default="api-paste.ini",
|
|
help='File name for the paste.deploy config for cinder-api'),
|
|
cfg.StrOpt('pybasedir',
|
|
default=os.path.abspath(os.path.join(os.path.dirname(__file__),
|
|
'..',
|
|
'..')),
|
|
help='Directory where the cinder python module is installed'),
|
|
cfg.StrOpt('bindir',
|
|
default='$pybasedir/bin',
|
|
help='Directory where cinder binaries are installed'),
|
|
cfg.StrOpt('state_path',
|
|
default='$pybasedir',
|
|
help="Top-level directory for maintaining cinder's state"), ]
|
|
|
|
debug_opts = [
|
|
]
|
|
|
|
CONF.register_cli_opts(core_opts)
|
|
CONF.register_cli_opts(debug_opts)
|
|
|
|
global_opts = [
|
|
cfg.StrOpt('my_ip',
|
|
default=_get_my_ip(),
|
|
help='ip address of this host'),
|
|
cfg.StrOpt('glance_host',
|
|
default='$my_ip',
|
|
help='default glance hostname or ip'),
|
|
cfg.IntOpt('glance_port',
|
|
default=9292,
|
|
help='default glance port'),
|
|
cfg.ListOpt('glance_api_servers',
|
|
default=['$glance_host:$glance_port'],
|
|
help='A list of the glance api servers available to cinder '
|
|
'([hostname|ip]:port)'),
|
|
cfg.IntOpt('glance_api_version',
|
|
default=1,
|
|
help='Version of the glance api to use'),
|
|
cfg.IntOpt('glance_num_retries',
|
|
default=0,
|
|
help='Number retries when downloading an image from glance'),
|
|
cfg.BoolOpt('glance_api_insecure',
|
|
default=False,
|
|
help='Allow to perform insecure SSL (https) requests to '
|
|
'glance'),
|
|
cfg.BoolOpt('glance_api_ssl_compression',
|
|
default=False,
|
|
help='Whether to attempt to negotiate SSL layer compression '
|
|
'when using SSL (https) requests. Set to False to '
|
|
'disable SSL layer compression. In some cases disabling '
|
|
'this may improve data throughput, eg when high network '
|
|
'bandwidth is available and you are using already '
|
|
'compressed image formats such as qcow2 .'),
|
|
cfg.IntOpt('glance_request_timeout',
|
|
default=None,
|
|
help='http/https timeout value for glance operations. If no '
|
|
'value (None) is supplied here, the glanceclient default '
|
|
'value is used.'),
|
|
cfg.StrOpt('scheduler_topic',
|
|
default='cinder-scheduler',
|
|
help='the topic scheduler nodes listen on'),
|
|
cfg.StrOpt('volume_topic',
|
|
default='cinder-volume',
|
|
help='the topic volume nodes listen on'),
|
|
cfg.StrOpt('backup_topic',
|
|
default='cinder-backup',
|
|
help='the topic volume backup nodes listen on'),
|
|
cfg.BoolOpt('enable_v1_api',
|
|
default=True,
|
|
help=_("Deploy v1 of the Cinder API.")),
|
|
cfg.BoolOpt('enable_v2_api',
|
|
default=True,
|
|
help=_("Deploy v2 of the Cinder API.")),
|
|
cfg.BoolOpt('api_rate_limit',
|
|
default=True,
|
|
help='whether to rate limit the api'),
|
|
cfg.ListOpt('osapi_volume_ext_list',
|
|
default=[],
|
|
help='Specify list of extensions to load when using osapi_'
|
|
'volume_extension option with cinder.api.contrib.'
|
|
'select_extensions'),
|
|
cfg.MultiStrOpt('osapi_volume_extension',
|
|
default=['cinder.api.contrib.standard_extensions'],
|
|
help='osapi volume extension to load'),
|
|
cfg.StrOpt('volume_manager',
|
|
default='cinder.volume.manager.VolumeManager',
|
|
help='full class name for the Manager for volume'),
|
|
cfg.StrOpt('backup_manager',
|
|
default='cinder.backup.manager.BackupManager',
|
|
help='full class name for the Manager for volume backup'),
|
|
cfg.StrOpt('scheduler_manager',
|
|
default='cinder.scheduler.manager.SchedulerManager',
|
|
help='full class name for the Manager for scheduler'),
|
|
cfg.StrOpt('host',
|
|
default=socket.gethostname(),
|
|
help='Name of this node. This can be an opaque identifier. '
|
|
'It is not necessarily a hostname, FQDN, or IP address.'),
|
|
# NOTE(vish): default to nova for compatibility with nova installs
|
|
cfg.StrOpt('storage_availability_zone',
|
|
default='nova',
|
|
help='availability zone of this node'),
|
|
cfg.StrOpt('default_availability_zone',
|
|
default=None,
|
|
help='default availability zone to use when creating a new volume. '
|
|
'If this is not set then we use the value from the '
|
|
'storage_availability_zone option as the default '
|
|
'availability_zone for new volumes.'),
|
|
cfg.ListOpt('memcached_servers',
|
|
default=None,
|
|
help='Memcached servers or None for in process cache.'),
|
|
cfg.StrOpt('default_volume_type',
|
|
default=None,
|
|
help='default volume type to use'),
|
|
cfg.StrOpt('volume_usage_audit_period',
|
|
default='month',
|
|
help='time period to generate volume usages for. '
|
|
'Time period must be hour, day, month or year'),
|
|
cfg.StrOpt('root_helper',
|
|
default='sudo',
|
|
help='Deprecated: command to use for running commands as root'),
|
|
cfg.StrOpt('rootwrap_config',
|
|
default='/etc/cinder/rootwrap.conf',
|
|
help='Path to the rootwrap configuration file to use for '
|
|
'running commands as root'),
|
|
cfg.BoolOpt('monkey_patch',
|
|
default=False,
|
|
help='Enable monkey patching'),
|
|
cfg.ListOpt('monkey_patch_modules',
|
|
default=[],
|
|
help='List of modules/decorators to monkey patch'),
|
|
cfg.IntOpt('service_down_time',
|
|
default=60,
|
|
help='maximum time since last check-in for up service'),
|
|
cfg.StrOpt('volume_api_class',
|
|
default='cinder.volume.api.API',
|
|
help='The full class name of the volume API class to use'),
|
|
cfg.StrOpt('backup_api_class',
|
|
default='cinder.backup.api.API',
|
|
help='The full class name of the volume backup API class'),
|
|
cfg.StrOpt('auth_strategy',
|
|
default='noauth',
|
|
help='The strategy to use for auth. Supports noauth, keystone, '
|
|
'and deprecated.'),
|
|
cfg.ListOpt('enabled_backends',
|
|
default=None,
|
|
help='A list of backend names to use. These backend names '
|
|
'should be backed by a unique [CONFIG] group '
|
|
'with its options'),
|
|
cfg.BoolOpt('no_snapshot_gb_quota',
|
|
default=False,
|
|
help='Whether snapshots count against GigaByte quota'),
|
|
cfg.StrOpt('transfer_api_class',
|
|
default='cinder.transfer.api.API',
|
|
help='The full class name of the volume transfer API class'), ]
|
|
|
|
CONF.register_opts(global_opts)
|