Adding functionality to check validity of configuration file
Change-Id: Icaf5fecb6e77351c23273e6c888924de1a55d596
This commit is contained in:
parent
86dba51a41
commit
d7bde02b0d
28
browbeat.py
28
browbeat.py
@ -6,17 +6,37 @@ import argparse
|
|||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import yaml
|
import yaml
|
||||||
|
from pykwalify import core as pykwalify_core
|
||||||
|
from pykwalify import errors as pykwalify_errors
|
||||||
|
|
||||||
_workload_opts = ['perfkit', 'rally', 'shaker']
|
_workload_opts = ['perfkit', 'rally', 'shaker']
|
||||||
_config_file = 'browbeat-config.yaml'
|
_config_file = 'browbeat-config.yaml'
|
||||||
debug_log_file = 'log/debug.log'
|
debug_log_file = 'log/debug.log'
|
||||||
|
|
||||||
|
|
||||||
def _load_config(config_file):
|
|
||||||
with open(config_file, 'r') as stream_conf_file:
|
def _load_config(path, _logger):
|
||||||
config = yaml.load(stream_conf_file)
|
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
|
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):
|
def _run_workload_provider(provider, config):
|
||||||
_logger = logging.getLogger('browbeat')
|
_logger = logging.getLogger('browbeat')
|
||||||
@ -61,7 +81,7 @@ def main():
|
|||||||
_logger.debug("CLI Args: {}".format(_cli_args))
|
_logger.debug("CLI Args: {}".format(_cli_args))
|
||||||
|
|
||||||
# Load Browbeat yaml config file:
|
# Load Browbeat yaml config file:
|
||||||
_config = _load_config(_cli_args.setup)
|
_config = _load_config(_cli_args.setup, _logger)
|
||||||
|
|
||||||
# Default to all workloads
|
# Default to all workloads
|
||||||
if _cli_args.workloads == []:
|
if _cli_args.workloads == []:
|
||||||
|
227
lib/validate.yaml
Normal file
227
lib/validate.yaml
Normal 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
|
@ -1,2 +1,5 @@
|
|||||||
ansible
|
ansible
|
||||||
matplotlib
|
matplotlib
|
||||||
|
python-dateutil==2.4.2
|
||||||
|
pykwalify
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user