mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-04 21:09:06 +08:00
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
|
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
|