Auto venv via path module

* Add path module to handle paths
  * Finds the venv
  * Finds the overcloudrc
* Clean-up/refactor imports

Change-Id: I24c269f2073a28ae0bee230cb9911dc89249f79f
This commit is contained in:
akrzos 2017-09-29 17:16:39 -04:00
parent d00d2c41de
commit aa1b7651d3
35 changed files with 150 additions and 143 deletions

2
.gitignore vendored
View File

@ -1,11 +1,11 @@
*.py[cod]
.tox
# Virtual Environments:
.browbeat-venv
.perfkit-venv
.rally-venv
.shaker-venv
.yoda-venv
# OpenStack Environment Files
stackrc

View File

@ -25,25 +25,22 @@ overcloudrc: "{{home_dir}}/overcloudrc"
# overcloud_ca_path: /etc/pki/ca-trust/source/anchors/overcloud.crt.pem
# The default Browbeat venv
browbeat_venv: "{{home_dir}}/browbeat-venv"
browbeat_venv: "{{browbeat_path}}/.browbeat-venv"
# The default Rally venv
rally_venv: "{{home_dir}}/rally-venv"
rally_venv: "{{browbeat_path}}/.rally-venv"
# Rally version to install
rally_version: 0.8.1
# The default Shaker venv
shaker_venv: "{{home_dir}}/shaker-venv"
shaker_venv: "{{browbeat_path}}/.shaker-venv"
# Shaker version to Install
shaker_version: 1.1.0
# The default YODA venv
yoda_venv: /home/stack/yoda-venv
# PerfKitBenchmarker Settings
perfkit_venv: "{{home_dir}}/perfkit-venv"
perfkit_venv: "{{browbeat_path}}/.perfkit-venv"
perfkit_version: v1.12.0
# Configuration items to adjust browbeat results served through httpd

View File

@ -2,6 +2,6 @@
- name: Run Browbeat
shell:
"source {{ ansible_env.HOME }}/browbeat-venv/bin/activate; \
"source {{ ansible_env.HOME }}/browbeat/.browbeat-venv/bin/activate; \
cd {{ ansible_env.HOME }}/browbeat/; \
python browbeat.py all"

View File

@ -2,7 +2,6 @@ browbeat:
results : results/
rerun: 3
cloud_name: {{ browbeat_cloud_name }}
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: {{ elastic_enabled }}
host: {{ elastic_host }}

View File

@ -1,10 +1,9 @@
# Tests to be compleated for the install-and-check.sh script minimal and short workloads are performed
# Tests to be completed for the install-and-check.sh script minimal and short workloads are performed
# to confirm functionality.
browbeat:
results : results/
rerun: 1
cloud_name: {{ browbeat_cloud_name }}
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: {{ elastic_enabled }}
host: {{ elastic_host }}

View File

@ -4,7 +4,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: {{ browbeat_cloud_name }}
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: {{ elastic_enabled }}
host: {{ elastic_host }}

View File

@ -3,7 +3,6 @@ browbeat:
results : results/
rerun: 3
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -40,7 +39,6 @@ perfkit:
enabled: true
sleep_before: 0
sleep_after: 0
venv: /home/stack/perfkit-venv
default:
image: centos7
machine_type: m1.small
@ -59,7 +57,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- netcreate-boot: rally/rally-plugins/netcreate-boot
- netcreate-boot-ping: rally/rally-plugins/netcreate-boot-ping
@ -275,7 +272,6 @@ shaker:
join_timeout: 600
sleep_before: 5
sleep_after: 5
venv: /home/stack/shaker-venv
shaker_region: regionOne
external_host: 2.2.2.2
scenarios:
@ -371,7 +367,6 @@ yoda:
enabled: false
instackenv: "/home/stack/instackenv.json"
stackrc: "/home/stack/stackrc"
venv: "/home/stack/yoda-venv/bin/activate"
benchmarks:
- name: scale-deploy
type: overcloud

View File

@ -3,7 +3,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: true
host: 1.1.1.1
@ -40,7 +39,6 @@ perfkit:
enabled: false
sleep_before: 0
sleep_after: 0
venv: /home/stack/perfkit-venv
default:
image: centos7
machine_type: m1.small
@ -63,7 +61,6 @@ shaker:
join_timeout: 600
sleep_before: 5
sleep_after: 5
venv: /home/stack/shaker-venv
shaker_region: regionOne
external_host: 2.2.2.2
scenarios:
@ -92,7 +89,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- netcreate-boot: rally/rally-plugins/netcreate-boot
- netcreate-boot-ping: rally/rally-plugins/netcreate-boot-ping

View File

@ -13,18 +13,15 @@
import argparse
import datetime
import browbeat.elastic
import browbeat.perfkit
import browbeat.rally
import browbeat.shaker
import browbeat.yoda
import browbeat.workloadbase
import browbeat.tools
import logging
import os
import sys
import time
import browbeat.elastic
import browbeat.tools
import browbeat.workloadbase
_workload_opts = ['perfkit', 'rally', 'shaker', 'yoda']
_config_file = 'browbeat-config.yaml'
debug_log_file = 'log/debug.log'

View File

@ -11,16 +11,17 @@
# limitations under the License.
from collections import deque
import elasticsearch
from elasticsearch import helpers
import logging
import json
import datetime
import uuid
import sys
import time
import json
import logging
import os
import re
import sys
import time
import uuid
import elasticsearch
from elasticsearch import helpers
browbeat_uuid = uuid.uuid4()

69
browbeat/path.py Normal file
View File

@ -0,0 +1,69 @@
# 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.
import logging
import os
_logger = logging.getLogger('browbeat.path')
# Browbeat's project modules path, typically /home/stack/browbeat/browbeat
browbeat_project_path = os.path.dirname(os.path.realpath(__file__))
# Path to Browbeat, typically /home/stack/browbeat
browbeat_path = os.path.abspath(os.path.join(browbeat_project_path, os.pardir))
# Base Path, typically /home/stack
base_path = os.path.abspath(os.path.join(browbeat_path, os.pardir))
conf_path = os.path.join(browbeat_path, 'conf')
log_path = os.path.join(browbeat_path, 'log')
results_path = os.path.join(browbeat_path, 'results')
def get_overcloudrc():
"""Check the several expected locations for the overcloudrc file:
* $base_path/overcloudrc
* $browbeat_path/overcloudrc
"""
paths = [
os.path.join(base_path, 'overcloudrc'),
os.path.join(browbeat_path, 'overcloudrc')
]
for overcloudrc_file in paths:
if os.path.exists(overcloudrc_file):
return overcloudrc_file
else:
_logger.debug("overcloudrc not found in {}".format(overcloudrc_file))
_logger.error('overcloudrc file can not be found')
def get_workload_venv(workload, path_activate):
"""Check the several expected locations for a workload's venv and return the existing venv:
* $base_path/$workload-venv
* $base_path/.$workload-venv
* $browbeat_path/.$workload-venv
"""
paths = [
os.path.join(base_path, '{}-venv'.format(workload)),
os.path.join(base_path, '.{}-venv'.format(workload)),
os.path.join(browbeat_path, '.{}-venv'.format(workload))
]
for workload_venv_path in paths:
if os.path.isdir(workload_venv_path):
if path_activate and os.path.exists(os.path.join(workload_venv_path, 'bin/activate')):
return os.path.join(workload_venv_path, 'bin/activate')
else:
return workload_venv_path
else:
_logger.debug("{} not installed in {}".format(workload, workload_venv_path))
_logger.error('{} does not appear to be installed correctly'.format(workload))

View File

@ -11,24 +11,27 @@
# limitations under the License.
import ast
import connmon
import datetime
import elastic
import glob
import grafana
import logging
import os
import shutil
import subprocess
import time
import connmon
import elastic
import grafana
from path import get_overcloudrc
from path import get_workload_venv
import tools
import workloadbase
class PerfKit(workloadbase.WorkloadBase):
def __init__(self, config):
self.logger = logging.getLogger('browbeat.perfkit')
self.overcloudrc = get_overcloudrc()
self.config = config
self.error_count = 0
self.tools = tools.Tools(self.config)
@ -125,11 +128,12 @@ class PerfKit(workloadbase.WorkloadBase):
# Build command to run
if 'enabled' in benchmark_config:
del benchmark_config['enabled']
cmd = ("source {0}/bin/activate; source {1} "
"/home/stack/perfkit-venv/PerfKitBenchmarker/pkb.py "
"--cloud={2} --run_uri=browbeat".format(
self.config['perfkit']['venv'],
self.config['browbeat']['overcloud_credentials'], cloud_type))
cmd = ("source {0}; source {1}; "
"{2}/PerfKitBenchmarker/pkb.py "
"--cloud={3} --run_uri=browbeat".format(
get_workload_venv('perfkit', True),
self.overcloudrc,
get_workload_venv('perfkit', False), cloud_type))
for parameter, value in benchmark_config.iteritems():
if not parameter == 'name':
self.logger.debug(

View File

@ -11,19 +11,21 @@
# limitations under the License.
import collections
import connmon
import datetime
import elastic
import glob
import grafana
import json
import logging
import os
import re
import shutil
import time
import tools
import connmon
import elastic
import grafana
from path import get_workload_venv
import workloadbase
import json
import tools
class Rally(workloadbase.WorkloadBase):
@ -61,7 +63,7 @@ class Rally(workloadbase.WorkloadBase):
plugin_string = ""
if len(plugins) > 0:
plugin_string = "--plugin-paths {}".format(",".join(plugins))
cmd = "source {}/bin/activate; ".format(self.config['rally']['venv'])
cmd = "source {}; ".format(get_workload_venv('rally', True))
cmd += "rally {} task start {} --task-args \'{}\' 2>&1 | tee {}.log".format(
plugin_string, task_file, task_args, test_name)
from_time = time.time()
@ -104,18 +106,18 @@ class Rally(workloadbase.WorkloadBase):
def gen_scenario_html(self, task_ids, test_name):
all_task_ids = ' '.join(task_ids)
cmd = "source {}/bin/activate; ".format(self.config['rally']['venv'])
cmd = "source {}; ".format(get_workload_venv('rally', True))
cmd += "rally task report --task {} --out {}.html".format(
all_task_ids, test_name)
return self.tools.run_cmd(cmd)['stdout']
def gen_scenario_json(self, task_id):
cmd = "source {}/bin/activate; ".format(self.config['rally']['venv'])
cmd = "source {}; ".format(get_workload_venv('rally', True))
cmd += "rally task results {}".format(task_id)
return self.tools.run_cmd(cmd)['stdout']
def gen_scenario_json_file(self, task_id, test_name):
cmd = "source {}/bin/activate; ".format(self.config['rally']['venv'])
cmd = "source {}; ".format(get_workload_venv('rally', True))
cmd += "rally task results {} > {}.json".format(task_id, test_name)
return self.tools.run_cmd(cmd)['stdout']

View File

@ -12,22 +12,26 @@
import collections
import datetime
import elastic
import grafana
import json
import logging
import os
import time
import tools
import uuid
import workloadbase
import yaml
import elastic
import grafana
from path import get_overcloudrc
from path import get_workload_venv
import workloadbase
import tools
class Shaker(workloadbase.WorkloadBase):
def __init__(self, config):
self.logger = logging.getLogger('browbeat.shaker')
self.overcloudrc = get_overcloudrc()
self.config = config
self.tools = tools.Tools(self.config)
self.grafana = grafana.Grafana(self.config)
@ -38,7 +42,7 @@ class Shaker(workloadbase.WorkloadBase):
self.scenario_count = 0
def shaker_checks(self):
cmd = "source /home/stack/overcloudrc; glance image-list | grep -w shaker-image"
cmd = "source {}; glance image-list | grep -w shaker-image".format(self.overcloudrc)
if self.tools.run_cmd(cmd)['stdout'] == "":
self.logger.error("Shaker Image is not built, try again")
exit(1)
@ -351,14 +355,13 @@ class Shaker(workloadbase.WorkloadBase):
server_endpoint = self.config['shaker']['server']
port_no = self.config['shaker']['port']
flavor = self.config['shaker']['flavor']
venv = self.config['shaker']['venv']
venv = get_workload_venv('shaker', True)
shaker_region = self.config['shaker']['shaker_region']
timeout = self.config['shaker']['join_timeout']
self.logger.info(
"The uuid for this shaker scenario is {}".format(shaker_uuid))
cmd_env = (
"source {0}/bin/activate; source {1}").format(venv, self.config['browbeat']
['overcloud_credentials'])
"source {0}; source {1}").format(venv, self.overcloudrc)
if 'external' in filename and 'external_host' in self.config['shaker']:
external_host = self.config['shaker']['external_host']
cmd_shaker = (
@ -408,7 +411,7 @@ class Shaker(workloadbase.WorkloadBase):
time_stamp = datetime.datetime.utcnow().strftime("%Y%m%d-%H%M%S")
self.logger.debug("Time Stamp (Prefix): {}".format(time_stamp))
scenarios = self.config.get('shaker')['scenarios']
venv = self.config['shaker']['venv']
venv = get_workload_venv('shaker')
default_time = 60
self.shaker_checks()
if (scenarios is not None and len(scenarios) > 0):

View File

@ -10,17 +10,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import os
import re
import subprocess
import yaml
from pykwalify import core as pykwalify_core
from pykwalify import errors as pykwalify_errors
import perfkit
import rally
import shaker
import yoda
import logging
import os
import subprocess
import yaml
import re
from pykwalify import core as pykwalify_core
from pykwalify import errors as pykwalify_errors
class Tools(object):

View File

@ -14,9 +14,6 @@ mapping:
cloud_name:
type: str
required: True
overcloud_credentials:
type: str
required: True
elasticsearch:
required: True
@ -116,9 +113,6 @@ mapping:
sleep_after:
type: number
required: True
venv:
type: str
required: True
default:
type: map
required: True
@ -191,9 +185,6 @@ mapping:
sleep_after:
type: number
required: True
venv:
type: str
required: True
shaker_region:
type: str
required: true
@ -231,9 +222,6 @@ mapping:
sleep_after:
type: number
required: True
venv:
type: str
required: True
benchmarks:
type: seq
required: True

View File

@ -12,23 +12,26 @@
# limitations under the License.
# Yet another cloud deployment tool
from collections import deque
import datetime
import elastic
import grafana
import json
import logging
import os
import time
import tools
import workloadbase
from openstack import connection
from openstack import exceptions
import os
import requests
try:
from ostag import ostag
except ImportError:
ostag = None
from collections import deque
import requests
import elastic
import grafana
import workloadbase
import tools
class Yoda(workloadbase.WorkloadBase):

View File

@ -3,7 +3,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -40,7 +39,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- glance-create-boot-delete: rally/rally-plugins/glance-create-boot-delete
benchmarks:

View File

@ -4,7 +4,6 @@ browbeat:
results : results/
rerun: 3
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -42,7 +41,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
benchmarks:
- name: authenticate
enabled: true

View File

@ -4,7 +4,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -42,7 +41,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
benchmarks:
- name: authenticate
enabled: true

View File

@ -39,7 +39,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv/bin/activate
plugins:
- workloads: rally/rally-plugins/workloads
benchmarks:

View File

@ -3,7 +3,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -40,7 +39,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- validate-ceilometer: rally/rally-plugins/validate-ceilometer
- nova-ceilometer: rally/rally-plugins/nova-ceilometer

View File

@ -6,7 +6,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -43,7 +42,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
benchmarks:

View File

@ -4,7 +4,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -41,7 +40,6 @@ rally:
enabled: true
sleep_before: 0
sleep_after: 0
venv: /home/stack/rally-venv
plugins:
- gnocchi: rally/rally-plugins/gnocchi
benchmarks:

View File

@ -8,7 +8,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -45,7 +44,6 @@ perfkit:
enabled: true
sleep_before: 0
sleep_after: 0
venv: /home/stack/perfkit-venv
default:
image: centos7
machine_type: m1.small

View File

@ -10,7 +10,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -47,7 +46,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
- neutron: rally/rally-plugins/neutron

View File

@ -10,7 +10,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -47,7 +46,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
- neutron: rally/rally-plugins/neutron

View File

@ -10,7 +10,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -47,7 +46,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
- neutron: rally/rally-plugins/neutron

View File

@ -10,7 +10,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -47,7 +46,6 @@ rally:
enabled: true
sleep_before: 5
sleep_after: 5
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
- neutron: rally/rally-plugins/neutron

View File

@ -8,7 +8,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
host: 1.1.1.1
@ -47,7 +46,6 @@ rally:
# Sleeps 30 minutes after each iteration to allow for system resources to degrade or
# display stepped degrading (If the system is hitting saturation or high utilization)
sleep_after: 1800
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
- neutron: rally/rally-plugins/neutron

View File

@ -7,7 +7,6 @@ browbeat:
results : results/
rerun: 1
cloud_name: openstack
overcloud_credentials: /home/stack/overcloudrc
elasticsearch:
enabled: false
regather: false
@ -47,7 +46,6 @@ rally:
# Sleeps 30 minutes after each iteration to allow for system resources to degrade or
# display stepped degrading (If the system is hitting saturation or high utilization)
sleep_after: 1800
venv: /home/stack/rally-venv
plugins:
- nova: rally/rally-plugins/nova
benchmarks:

View File

@ -397,9 +397,7 @@ setup Browbeat with Rally against your local quickstart cloud.
Edit your browbeat-config and validate the following:
* Correct overcloudrc referenced
* Elastic Indexing configuration
* Rally venv is set correctly
* Scenarios you want to run are setup and set to a low times/concurrency
Troubleshooting

View File

@ -355,13 +355,9 @@ environment is different and thus your configuration options will vary.
[browbeat1@browbeatvm ansible]$ cd ..
[browbeat1@browbeatvm browbeat]$ vi browbeat-config.yaml
[browbeat1@browbeatvm browbeat]$ . ../browbeat-venv/bin/activate
[browbeat1@browbeatvm browbeat]$ . .browbeat-venv/bin/activate
(browbeat-venv) [browbeat1@browbeatvm browbeat]$ python browbeat.py rally
Make sure to modify the venv settings for Rally to match the directory in which
Rally was installed in. You will have to do so for other workload providers as
well.
11. Setup network for Shaker+PerfKitBenchmarker and build Shaker image
::

View File

@ -11,32 +11,20 @@ Run Overcloud checks
Your Overcloud check output is located in results/bug_report.log
NOTE: It is strongly advised to not run the ansible playbooks in a venv.
NOTE: It is strongly advised to not run the ansible playbooks in a virtual environment.
Run performance stress tests through Browbeat on the undercloud
---------------------------------------------------------------
Run Browbeat performance tests from Undercloud
----------------------------------------------
::
$ ssh undercloud-root
[root@ospd ~]# su - stack
[stack@ospd ~]$ screen -S browbeat
[stack@ospd ~]$ . browbeat-venv/bin/activate
(browbeat-venv)[stack@ospd ~]$ cd browbeat/
[stack@ospd ~]$ cd browbeat/
[stack@ospd browbeat]$ . .browbeat-venv/bin/activate
(browbeat-venv)[stack@ospd browbeat]$ vi browbeat-config.yaml # Edit browbeat-config.yaml to control how many stress tests are run.
(browbeat-venv)[stack@ospd browbeat]$ ./browbeat.py <workload> #perfkit, rally, shaker or "all"
Run performance stress tests through Browbeat
---------------------------------------------
::
[stack@ospd ansible]$ . ../../browbeat-venv/bin/activate
(browbeat-venv)[stack@ospd ansible]$ cd ..
(browbeat-venv)[stack@ospd browbeat]$ vi browbeat-config.yaml # Edit browbeat.cfg to control how many stress tests are run.
(browbeat-venv)[stack@ospd browbeat]$ ./browbeat.py <workload> #perfkit, rally, shaker or "all"
Running PerfKitBenchmarker
---------------------------
@ -99,8 +87,6 @@ summarized below:
:join_timeout: Timeout in seconds for agents to join
:sleep_before: Time in seconds to sleep before executing a scenario
:sleep_after: Time in seconds to sleep after executing a scenario
:venv: venv to execute shaker commands in, ``/home/stack/shaker-venv`` by
default
:shaker_region: OpenStack region you want to use
:external_host: IP of a server for external tests (should have
``browbeat/util/shaker-external.sh`` executed on it previously and have

View File

@ -43,4 +43,4 @@ show-source = True
ignore = E123,E125,E226,E302,E41,E231,E203,H233,H306,H238,H236,H404,H405
max-line-length = 100
builtins = _
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,ansible/*
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,ansible/*,.browbeat-venv,.perfkit-venv,.rally-venv,.shaker-venv