ec2api-tempest-plugin/config.py

153 lines
5.2 KiB
Python

# Copyright 2012 OpenStack Foundation
# All Rights Reserved.
#
# 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.
from __future__ import print_function
import logging as std_logging
import os
from oslo_config import cfg
from oslo_log import log as logging
def register_opt_group(conf, opt_group, options):
conf.register_group(opt_group)
for opt in options:
conf.register_opt(opt, group=opt_group.name)
aws_group = cfg.OptGroup(name='aws',
title='AWS options')
AWSGroup = [
cfg.StrOpt('ec2_url',
default="http://localhost:8788/",
help="EC2 URL"),
cfg.StrOpt('s3_url',
default="http://localhost:3334/",
help="S3 URL"),
cfg.StrOpt('aws_secret',
default=None,
help="AWS Secret Key",
secret=True),
cfg.StrOpt('aws_access',
default=None,
help="AWS Access Key"),
cfg.StrOpt('aws_region',
default="RegionOne",
help="AWS region for EC2 tests"),
cfg.StrOpt('aws_zone',
default='nova',
help="AWS zone inside region for EC2 tests"),
cfg.IntOpt('build_timeout',
default=120,
help="Status Change Timeout"),
cfg.IntOpt('build_interval',
default=1,
help="Status Change Test Interval"),
cfg.StrOpt('instance_type',
default="m1.tiny",
help="Instance type"),
cfg.StrOpt('instance_type_alt',
default=None,
help="Instance type"),
cfg.StrOpt('image_id',
default=None,
help="Image ID for instance running(can be cirros). "
"It must be any instance with instance-store "
"root device type."),
cfg.StrOpt('ebs_image_id',
default=None,
help="EBS Image ID for testing snapshots, volumes, instances."),
cfg.StrOpt('image_user',
default='cirros',
help="User for sshing into instance based on configured image"),
cfg.StrOpt('image_id_ubuntu',
default=None,
help="Fully functional image ID for instance running. "
"For some tests it must be ubuntu-trusty-i386."),
cfg.StrOpt('image_user_ubuntu',
default='ubuntu',
help="User for sshing into instance based on configured image"),
cfg.BoolOpt('run_incompatible_tests',
default=False,
help='Will run all tests plus incompatible with Amazon.'),
cfg.BoolOpt('run_long_tests',
default=False,
help='Will run all long tests also.'),
cfg.StrOpt('s3_materials_path',
default=None,
help="S3 Materials Path"),
cfg.StrOpt('ari_manifest',
default=None,
help="ARI Ramdisk Image manifest"),
cfg.StrOpt('ami_manifest',
default=None,
help="AMI Machine Image manifest"),
cfg.StrOpt('aki_manifest',
default=None,
help="AKI Kernel Image manifest"),
]
def register_opts():
register_opt_group(cfg.CONF, aws_group, AWSGroup)
# this should never be called outside of this class
class ConfigPrivate(object):
"""Provides OpenStack configuration information."""
DEFAULT_CONFIG_DIR = os.path.join(
os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
"etc")
DEFAULT_CONFIG_FILE = "functional_tests.conf"
def __init__(self, parse_conf=True):
"""Initialize a configuration from a conf directory and conf file."""
super(ConfigPrivate, self).__init__()
config_files = []
# Environment variables override defaults...
conf_dir = os.environ.get('TEST_CONFIG_DIR', '.')
conf_file = os.environ.get('TEST_CONFIG', self.DEFAULT_CONFIG_FILE)
path = os.path.join(conf_dir, conf_file)
# only parse the config file if we expect one to exist. This is needed
# to remove an issue with the config file up to date checker.
if parse_conf:
config_files.append(path)
cfg.CONF([], project='ec2api', default_config_files=config_files)
LOG = logging.getLogger('ec2api')
LOG.info("Using ec2api config file %s" % path)
register_opts()
self.aws = cfg.CONF.aws
if parse_conf:
cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
class ConfigProxy(object):
_config = None
def __getattr__(self, attr):
if not self._config:
self._config = ConfigPrivate()
return getattr(self._config, attr)
CONF = ConfigProxy()