Age | Commit message (Collapse) | Author | Files | Lines | |
---|---|---|---|---|---|
2017-05-05 | Merge "Define loggers as class-private members" | 5 | -48/+56 | ||
2017-05-05 | Merge "Delete functest.utils.functest_logger" | 37 | -231/+159 | ||
2017-05-04 | Forbid calling generate_report from cmdline | 1 | -6/+0 | ||
Change-Id: Ic9ea7507dc5f1f781b57c4573e971a2c8a8ca9ef Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com> | |||||
2017-05-04 | Define loggers as class-private members | 5 | -48/+56 | ||
This mangling ensures that all info messages printed from core packages are shown in console. It also avoids sphinx to print them. Change-Id: I07db9f33060c195bce3b48b06a6640eb6c56c2eb Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com> | |||||
2017-05-04 | Delete functest.utils.functest_logger | 37 | -231/+159 | ||
It deletes functest.utils.functest_logger and the related unit tests. Then it modifies all functest modules to get all loggers via logging.getLogger(). __name__ is mainly used as getLogger arg as proposed by logging [1]. All loggers and handlers are now defined via functest/ci/logging.ini instead of a dict loaded by an external json file. Now only warn messages and info messages from ci and core packages are printed in console. [1] https://docs.python.org/2/library/logging.html Change-Id: Ic192855e0f9bf94825d8f7ec73549a0f3b8d44c5 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com> | |||||
2017-05-04 | Merge "Update tempest.conf to enable tempest from external server" | 1 | -1/+8 | ||
2017-05-04 | .highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */# Copyright 2015 Intel Corporation.
#
# 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.
"""Class wrapper for controlling an OVS instance.
Wraps a pair of ``ovs-vswitchd`` and ``ovsdb-server`` processes.
"""
import os
import logging
import pexpect
from conf import settings
from tools import tasks
_OVS_VSWITCHD_BIN = os.path.join(
settings.getValue('OVS_DIR'), 'vswitchd', 'ovs-vswitchd')
_OVSDB_TOOL_BIN = os.path.join(
settings.getValue('OVS_DIR'), 'ovsdb', 'ovsdb-tool')
_OVSDB_SERVER_BIN = os.path.join(
settings.getValue('OVS_DIR'), 'ovsdb', 'ovsdb-server')
_OVS_VAR_DIR = '/usr/local/var/run/openvswitch/'
_OVS_ETC_DIR = '/usr/local/etc/openvswitch/'
_LOG_FILE_VSWITCHD = os.path.join(
settings.getValue('LOG_DIR'), settings.getValue('LOG_FILE_VSWITCHD'))
class VSwitchd(tasks.Process):
"""Class wrapper for controlling an OVS instance.
Wraps a pair of ``ovs-vswitchd`` and ``ovsdb-server`` processes.
"""
_ovsdb_pid = None
_logfile = _LOG_FILE_VSWITCHD
_ovsdb_pidfile_path = os.path.join(settings.getValue('LOG_DIR'),
"ovsdb_pidfile.pid")
_proc_name = 'ovs-vswitchd'
def __init__(self, timeout=30, vswitchd_args=None, expected_cmd=None):
"""Initialise the wrapper with a specific start timeout and extra
parameters.
:param timeout: Timeout to wait for application to start.
:param vswitchd_args: Command line parameters for vswitchd.
:returns: None
"""
self._logger = logging.getLogger(__name__)
self._timeout = timeout
self._expect = expected_cmd;
vswitchd_args = vswitchd_args or []
self._cmd = ['sudo', '-E', _OVS_VSWITCHD_BIN] + vswitchd_args
# startup/shutdown
def start(self):
""" Start ``ovsdb-server`` and ``ovs-vswitchd`` instance.
:returns: None
:raises: pexpect.EOF, pexpect.TIMEOUT
"""
self._reset_ovsdb()
self._start_ovsdb() # this has to be started first
try:
super(VSwitchd, self).start()
self.relinquish()
except (pexpect.EOF, pexpect.TIMEOUT) as exc:
logging.error("Exception during VSwitch start.")
self._kill_ovsdb()
raise exc
def kill(self):
"""Kill ``ovs-vswitchd`` instance if it is alive.
:returns: None
"""
self._logger.info('Killing ovs-vswitchd...')
self._kill_ovsdb()
super(VSwitchd, self).kill()
# helper functions
def _reset_ovsdb(self):
"""Reset system for 'ovsdb'.
:returns: None
"""
self._logger.info('Resetting system after last run...')
tasks.run_task(['sudo', 'rm', '-rf', _OVS_VAR_DIR], self._logger)
tasks.run_task(['sudo', 'mkdir', '-p', _OVS_VAR_DIR], self._logger)
tasks.run_task(['sudo', 'rm', '-rf', _OVS_ETC_DIR], self._logger)
tasks.run_task(['sudo', 'mkdir', '-p', _OVS_ETC_DIR], self._logger)
tasks.run_task(['sudo', 'rm', '-f',
os.path.join(_OVS_ETC_DIR, 'conf.db')],
self._logger)
self._logger.info('System reset after last run.')
def _start_ovsdb(self):
"""Start ``ovsdb-server`` instance.
:returns: None
"""
tasks.run_task(['sudo', _OVSDB_TOOL_BIN, 'create',
os.path.join(_OVS_ETC_DIR, 'conf.db'),
os.path.join(settings.getValue('OVS_DIR'), 'vswitchd',
'vswitch.ovsschema')],
self._logger,
'Creating ovsdb configuration database...')
tasks.run_background_task(
['sudo', _OVSDB_SERVER_BIN,
'--remote=punix:%s' % os.path.join(_OVS_VAR_DIR, 'db.sock'),
'--remote=db:Open_vSwitch,Open_vSwitch,manager_options',
'--pidfile=' + self._ovsdb_pidfile_path , '--overwrite-pidfile'],
self._logger,
'Starting ovsdb-server...')
def _kill_ovsdb(self):
"""Kill ``ovsdb-server`` instance.
:returns: None
"""
with open (self._ovsdb_pidfile_path, "r") as pidfile:
ovsdb_pid = pidfile.read().strip()
self._logger.info("Killing ovsdb with pid: " + ovsdb_pid)
if ovsdb_pid:
tasks.run_task(['sudo', 'kill', '-15', str(ovsdb_pid)],
self._logger, 'Killing ovsdb-server...')
@staticmethod
def getDbSockPath():
"""Method returns location of db.sock file
:returns: path to db.sock file.
"""
return os.path.join(_OVS_VAR_DIR, 'db.sock')
|