milvus/tests/benchmark/milvus_benchmark/chaos/chaos_mesh.py

71 lines
2.5 KiB
Python
Raw Normal View History

import logging
import os
from yaml import full_load
from milvus_benchmark.chaos import utils
logger = logging.getLogger("milvus_benchmark.chaos.base")
class BaseChaos(object):
cur_path = os.path.abspath(os.path.dirname(__file__))
def __init__(self, api_version, kind, metadata, spec):
self.api_version = api_version
self.kind = kind
self.metadata = metadata
self.spec = spec
def gen_experiment_config(self):
pass
"""
1. load dict from default yaml
2. merge dict between dict and self.x
"""
def check_config(self):
if not self.kind:
raise Exception("kind is must be specified")
if not self.spec:
raise Exception("spec is must be specified")
if "action" not in self.spec:
raise Exception("action is must be specified in spec")
if "selector" not in self.spec:
raise Exception("selector is must be specified in spec")
return True
def replace_label_selector(self):
self.check_config()
label_selectors_dict = self.spec["selector"]["labelSelectors"]
label_selector = next(iter(label_selectors_dict.items()))
label_selector_value = label_selector[1]
# pods = utils.list_pod_for_namespace(label_selector[0] + "=" + label_selector_value)
pods = utils.list_pod_for_namespace()
real_label_selector_value = list(map(lambda pod: pod, filter(lambda pod: label_selector_value in pod, pods)))[0]
self.spec["selector"]["labelSelectors"].update({label_selector[0]: real_label_selector_value})
class PodChaos(BaseChaos):
default_yaml = BaseChaos.cur_path + '/template/PodChaos.yaml'
def __init__(self, api_version, kind, metadata, spec):
super(PodChaos, self).__init__(api_version, kind, metadata, spec)
def gen_experiment_config(self):
with open(self.default_yaml) as f:
default_config = full_load(f)
f.close()
self.replace_label_selector()
experiment_config = default_config
experiment_config.update({"apiVersion": self.api_version})
experiment_config.update({"kind": self.kind})
experiment_config["metadata"].update(self.metadata)
experiment_config["spec"].update(self.spec)
return experiment_config
class NetworkChaos(BaseChaos):
def __init__(self, api_version, kind, metadata, spec):
super(NetworkChaos, self).__init__(api_version, kind, metadata, spec)
def gen_experiment_config(self):
pass