From 8f1101df131a4d3e03b377738507d88b745831c0 Mon Sep 17 00:00:00 2001 From: "Yiting.Li" Date: Tue, 22 Dec 2015 17:11:12 -0800 Subject: Upload the contribution of vstf as bottleneck network framework. End to End Performance test JIRA:BOTTLENECK-29 Change-Id: Ib2c553c8b60d6cda9e7a7b52b737c9139f706ebd Signed-off-by: Yiting.Li --- vstf/vstf/agent/env/plugins/Readme | 49 ++++++++++++++++++ vstf/vstf/agent/env/plugins/__init__.py | 14 +++++ vstf/vstf/agent/env/plugins/libvirt_plugin.py | 66 ++++++++++++++++++++++++ vstf/vstf/agent/env/plugins/model.py | 54 +++++++++++++++++++ vstf/vstf/agent/env/plugins/tester_env_plugin.py | 43 +++++++++++++++ 5 files changed, 226 insertions(+) create mode 100755 vstf/vstf/agent/env/plugins/Readme create mode 100755 vstf/vstf/agent/env/plugins/__init__.py create mode 100755 vstf/vstf/agent/env/plugins/libvirt_plugin.py create mode 100755 vstf/vstf/agent/env/plugins/model.py create mode 100755 vstf/vstf/agent/env/plugins/tester_env_plugin.py (limited to 'vstf/vstf/agent/env/plugins') diff --git a/vstf/vstf/agent/env/plugins/Readme b/vstf/vstf/agent/env/plugins/Readme new file mode 100755 index 00000000..a2879ba0 --- /dev/null +++ b/vstf/vstf/agent/env/plugins/Readme @@ -0,0 +1,49 @@ +All the plugins should subclass EnvBuilderPlugin from "model.py". + +The EnvBuilderPlugin is a template class with a template algorithm: + + def __init__(self, ): + pass + @abstractmethod + def clean(self): + #clean Environment before goes further. + @abstractmethod + def install(self): + #install network virtualization software from source code. + @abstractmethod + def load_drivers(self): + #loads drivers for network card. + @abstractmethod + def create_brs(self): + #creates virtual switches. + @abstractmethod + def config_br_ports(self): + #config the vlan property for vswitch ports. + def create_vms(self): + #create vms + def wait_vms(self): + #wait vm to boot up and config vm for ips and other configurations. + def check_vm_connectivity(self): + #check if the vms correctly setup the control panel ips. + def build(self, cfg_intent): + self.host_cfg = cfg_intent #please retrieve options from self.host_cfg for your use in other methods. + self.clean() + self.download_and_compile() + self.load_drivers() + self.create_brs() + self.create_vms() + self.wait_vms() + self.config_tap_vlans() + self.check_vm_connectivity() + +You should implements the abstract methods left empty, however you can make some methods do nothing to skip steps.. + +The plugin receives a "cfg_intent", The "cfg_intent" is a python dict parsed from a env-build configuration file. + +It contains the detail configurations for the plugin to build a "virtual network" for testing. + +There are some example json config files for building different type of "virtual network" under "etc/vstf/env" that you can refer to. + +Before you creates a new plugin, you should make sure you understand these json config file properly. + + diff --git a/vstf/vstf/agent/env/plugins/__init__.py b/vstf/vstf/agent/env/plugins/__init__.py new file mode 100755 index 00000000..89dcd4e2 --- /dev/null +++ b/vstf/vstf/agent/env/plugins/__init__.py @@ -0,0 +1,14 @@ +# Copyright Huawei Technologies Co., Ltd. 1998-2015. +# 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. diff --git a/vstf/vstf/agent/env/plugins/libvirt_plugin.py b/vstf/vstf/agent/env/plugins/libvirt_plugin.py new file mode 100755 index 00000000..e7fefb6f --- /dev/null +++ b/vstf/vstf/agent/env/plugins/libvirt_plugin.py @@ -0,0 +1,66 @@ +""" +Created on 2015-7-8 + +@author: y00228926 +""" +import logging + +from vstf.common.utils import ping, my_sleep +from vstf.agent.env.plugins.model import EnvBuilderPlugin +from vstf.agent.env.basic.source_manager import SourceCodeManager +from vstf.agent.env.basic.vm_manager import VMControlOperation +from vstf.agent.env.vswitch_plugins.manager import VswitchPluginManager +from vstf.agent.env.driver_plugins.manager import DriverPluginManager + +LOG = logging.getLogger(__name__) + + +class Plugin(EnvBuilderPlugin): + def __init__(self): + super(Plugin, self).__init__() + self.vm_mgr = VMControlOperation() + self.vs_mgr = VswitchPluginManager() + self.dr_mgr = DriverPluginManager() + + def clean(self): + self.vm_mgr.clean_all_vms() + self.vs_mgr.clean() + self.dr_mgr.clean() + + def load_drivers(self): + drivers = self.host_cfg['drivers'] + self.dr_mgr.load(drivers) + + def create_brs(self): + for br_cfg in self.host_cfg['bridges']: + plugin = self.vs_mgr.get_vs_plugin(br_cfg['type']) + plugin.create_br(br_cfg) + + def config_br_ports(self): + for vm_cfg in self.host_cfg['vms']: + for tap_cfg in vm_cfg['taps']: + plugin = self.vs_mgr.get_vs_plugin(tap_cfg['br_type']) + plugin.set_tap_vid(tap_cfg) + for br_cfg in self.host_cfg['bridges']: + plugin = self.vs_mgr.get_vs_plugin(br_cfg['type']) + plugin.set_fastlink(br_cfg) + + def create_vms(self): + for vm_cfg in self.host_cfg['vms']: + self.vm_mgr.create_vm(vm_cfg) + + def wait_vms(self): + for vm_cfg in self.host_cfg['vms']: + self.vm_mgr.wait_vm(vm_cfg['vm_name']) + self.vm_mgr.init_config_vm(vm_cfg['vm_name']) + + def check_vm_connectivity(self): + for vm_cfg in self.host_cfg['vms']: + vm_ip = vm_cfg['init_config']['ctrl_ip_setting'].split('/')[0] + for _ in range(3): + ret = ping(vm_ip) + if ret: + break + my_sleep(3) + else: + raise Exception("ping ip:%s failed." % vm_ip) diff --git a/vstf/vstf/agent/env/plugins/model.py b/vstf/vstf/agent/env/plugins/model.py new file mode 100755 index 00000000..5485f970 --- /dev/null +++ b/vstf/vstf/agent/env/plugins/model.py @@ -0,0 +1,54 @@ +""" +Created on 2015-9-15 + +@author: y00228926 +""" +from abc import ABCMeta +from abc import abstractmethod + + +class EnvBuilderPlugin: + __metaclass__ = ABCMeta + + def __init__(self): + self.host_cfg = None + pass + + @abstractmethod + def clean(self): + pass + + @abstractmethod + def load_drivers(self): + pass + + @abstractmethod + def create_brs(self): + pass + + @abstractmethod + def config_br_ports(self): + pass + + @abstractmethod + def create_vms(self): + pass + + @abstractmethod + def wait_vms(self): + pass + + @abstractmethod + def check_vm_connectivity(self): + pass + + def build(self, cfg_intent): + self.host_cfg = cfg_intent + self.clean() + self.load_drivers() + self.create_brs() + self.create_vms() + self.wait_vms() + self.config_br_ports() + self.check_vm_connectivity() + return True diff --git a/vstf/vstf/agent/env/plugins/tester_env_plugin.py b/vstf/vstf/agent/env/plugins/tester_env_plugin.py new file mode 100755 index 00000000..0fd4b9a2 --- /dev/null +++ b/vstf/vstf/agent/env/plugins/tester_env_plugin.py @@ -0,0 +1,43 @@ +#!/usr/bin/python +# -*- coding: utf8 -*- +# author: wly +# date: 2015/11/17 +# see license for license details + +import logging + +from vstf.agent.env.plugins.model import EnvBuilderPlugin +from vstf.agent.env.driver_plugins.manager import DriverPluginManager + +LOG = logging.getLogger(__name__) + + +class Plugin(EnvBuilderPlugin): + def __init__(self): + super(Plugin, self).__init__() + self.dr_mgr = DriverPluginManager() + + def clean(self): + self.dr_mgr.clean() + + def install(self): + pass + + def load_drivers(self): + drivers = self.host_cfg['drivers'] + self.dr_mgr.load(drivers) + + def create_brs(self): + pass + + def config_br_ports(self): + pass + + def create_vms(self): + pass + + def wait_vms(self): + pass + + def check_vm_connectivity(self): + pass -- cgit 1.2.3-korg