Merge "Adding functionality to check validity of configuration file"

This commit is contained in:
Joe (rook) 2016-04-11 13:05:30 -04:00 committed by Gerrit Code Review
commit 5169d338ed
3 changed files with 254 additions and 4 deletions

View File

@ -6,17 +6,37 @@ import argparse
import logging
import sys
import yaml
from pykwalify import core as pykwalify_core
from pykwalify import errors as pykwalify_errors
_workload_opts = ['perfkit', 'rally', 'shaker']
_config_file = 'browbeat-config.yaml'
debug_log_file = 'log/debug.log'
def _load_config(config_file):
with open(config_file, 'r') as stream_conf_file:
config = yaml.load(stream_conf_file)
def _load_config(path, _logger):
try:
stream = open(path, 'r')
except IOError:
_logger.error("Configuration file {} passed is missing".format(path))
exit(1)
config=yaml.load(stream)
stream.close()
validate_yaml(config, _logger)
return config
def validate_yaml(config, _logger):
_logger.info("Validating the configuration file passed by the user")
stream = open("lib/validate.yaml", 'r')
schema = yaml.load(stream)
check = pykwalify_core.Core(source_data=config, schema_data=schema)
try:
check.validate(raise_exception=True)
_logger.info("Validation successful")
except pykwalify_errors.SchemaError as e:
_logger.error("Schema Validation failed")
raise Exception('File does not conform to schema: {}'.format(e))
def _run_workload_provider(provider, config):
_logger = logging.getLogger('browbeat')
@ -61,7 +81,7 @@ def main():
_logger.debug("CLI Args: {}".format(_cli_args))
# Load Browbeat yaml config file:
_config = _load_config(_cli_args.setup)
_config = _load_config(_cli_args.setup, _logger)
# Default to all workloads
if _cli_args.workloads == []:

227
lib/validate.yaml Normal file
View File

@ -0,0 +1,227 @@
name: Browbeat configuration schema
type: map
allowempty: True
mapping:
browbeat:
required: True
type: map
mapping:
results:
type: str
required: True
rerun:
type: int
required: True
ansible:
required: True
type: map
mapping:
hosts:
type: str
adjust:
type: map
mapping:
keystone_token:
type: str
neutron_l3:
type: str
nova_db:
type: str
workers:
type: str
grafana_snapshot:
type: str
required: True
shaker_build:
type: str
connmon:
type: map
allowempty: True
mapping:
enabled:
type: bool
required: True
grafana:
required: True
type: map
mapping:
enabled:
type: bool
required: True
cloud_name:
type: str
grafana_ip:
type: str
pattern: (?:[0-9]{1,3}\.){3}[0-9]{1,3}
grafana_port:
type: int
dashboards:
type: seq
sequence:
- type: str
snapshot:
type: map
mapping:
enabled:
type: bool
required: True
snapshot_compute:
type: bool
required: True
perfkit:
required: False
type: map
allowempty: True
mapping:
enabled:
type: bool
required: True
sleep_before:
type: number
required: True
sleep_after:
type: number
required: True
venv:
type: str
required: True
default:
type: map
required: True
mapping:
image:
type: str
required: True
machine_type:
type: str
required: True
os_type:
type: str
required: True
enum: ['rhel', 'debian', 'ubuntu_container', 'windows']
openstack_image_username:
type: str
required: True
openstack_public_network:
type: str
required: True
openstack_private_network:
type: str
required: True
benchmarks:
type: seq
sequence:
- type: map
allowempty: True
mapping:
name:
type: str
required: True
enabled:
type: bool
required: True
benchmarks:
type: str
required: True
shaker:
required: False
allowempty: True
type: map
mapping:
enabled:
type: bool
required: True
server:
type: str
required: True
pattern: (?:[0-9]{1,3}\.){3}[0-9]{1,3}
port:
type: int
required: True
flavor:
type: str
required: True
join_timeout:
type: int
required: True
sleep_before:
type: number
required: True
sleep_after:
type: number
required: True
venv:
type: str
required: True
shaker_region:
type: str
required: true
scenarios:
type: seq
sequence:
- type: map
allowempty: True
mapping:
name:
type: str
required: True
enabled:
type: bool
required: True
file:
type: str
required: True
rally:
required: False
type: map
allowempty: True
mapping:
enabled:
type: bool
required: True
sleep_before:
type: number
required: True
sleep_after:
type: number
required: True
venv:
type: str
required: True
benchmarks:
type: seq
required: True
sequence:
- type: map
mapping:
name:
type: str
required: True
enabled:
required: True
type: bool
concurrency:
type: seq
required: True
sequence:
- type: int
times:
type: int
required: True
scenarios:
type: seq
sequence:
- type: map
allowempty: True
mapping:
name:
type: str
required: True
enabled:
type: bool
required: True
file:
type: str
required: True

View File

@ -1,2 +1,5 @@
ansible
matplotlib
python-dateutil==2.4.2
pykwalify