diff options
author | opensource-tnbt <sridhar.rao@spirent.com> | 2020-11-25 15:11:47 +0530 |
---|---|---|
committer | opensource-tnbt <sridhar.rao@spirent.com> | 2020-11-25 15:23:55 +0530 |
commit | 5be0a76d76aefbfc7b0555482df2dada7a6e5a08 (patch) | |
tree | 003daa1e3c97d6ff75522b672fecee2568d8efbd /core/pod_controller.py | |
parent | 092de71ff79b23ab05d013ceb417b4f0b48dcc55 (diff) |
Kubernetes: Infrastructure For K8S Net testing.
This patch adds necessary code to perform K8S Networking performance
benchmarking.
Signed-off-by: Sridhar K. N. Rao <sridhar.rao@spirent.com>
Change-Id: I059ddd2e9ad3ee7c05e4620c64401f81474be195
Diffstat (limited to 'core/pod_controller.py')
-rw-r--r-- | core/pod_controller.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/core/pod_controller.py b/core/pod_controller.py new file mode 100644 index 00000000..8bc91ec4 --- /dev/null +++ b/core/pod_controller.py @@ -0,0 +1,93 @@ +# Copyright 2020 Spirent Communications +# +# 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. +""" pod Controller interface +""" + +import logging +import pexpect +#from conf import settings +from pods.pod.pod import IPod + +class PodController(): + """POD controller class + + Used to set-up and control PODs for specified scenario + + Attributes: + _pod_class: A class object representing the POD. + _deployment: A string describing the scenario to set-up in the + constructor. + _pods: A list of pods controlled by the controller. + """ + + def __init__(self, deployment, pod_class): + """Sets up the POD infrastructure based on deployment scenario + + :param pod_class: The POD class to be used. + """ + # reset POD ID counter for each testcase + IPod.reset_pod_counter() + pod_number = 0 + # setup controller with requested number of pods + self._logger = logging.getLogger(__name__) + self._pod_class = pod_class + self._deployment = deployment.lower() + self._pods = [] + if self._deployment == 'p2p': + pod_number = 1 + + if pod_number: + self._pods = [pod_class() for _ in range(pod_number)] + + self._logger.debug('Initializing the pod') + + def get_pods(self): + """Returns a list of pods controlled by this controller. + """ + self._logger.debug('get the pods') + return self._pods + + def get_pods_number(self): + """Returns a number of pods controlled by this controller. + """ + self._logger.debug('get_pods_number %s pod[s]', str(len(self._pods))) + return len(self._pods) + + def start(self): + """Boots all pods set-up by __init__. + + This is a blocking function. + """ + self._logger.debug('start the pod') + try: + for pod in self._pods: + pod.create() + except pexpect.TIMEOUT: + self.stop() + raise + + def stop(self): + """Stops all pods set-up by __init__. + + This is a blocking function. + """ + self._logger.debug('stopping the pod') + for pod in self._pods: + pod.terminate() + + def __enter__(self): + self.start() + + def __exit__(self, type_, value, traceback): + self.stop() |