def add_new_fleet_service_instance(self, fleet_service_name): if not isinstance(fleet_service_name, str): raise IllegalArgumentError("Error: Argument <fleet_service_name> not of type <str>") if fleet_service_name in self.FleetServiceDict: fleet_service = self.FleetServiceDict[fleet_service_name] new_fleet_service_instance = self.FleetServiceHandler.create_new_fleet_service_instance(fleet_service) if new_fleet_service_instance is not None: try: self.FleetServiceHandler.start(fleet_service, new_fleet_service_instance) except FleetSubmissionError as submissionError: self.FleetServiceHandler.remove_fleet_service_instance(fleet_service, new_fleet_service_instance.name, False) raise submissionError # save the updated fleet service into etcd (this is mainly done here to save the updated used_port_numbers # into etcd so that when dynamite restarts it handles those correctly self.save_fleet_service_state_to_etcd(fleet_service) fleet_service_instance_dict = new_fleet_service_instance.to_dict() fleet_service_instance_json = json.dumps(fleet_service_instance_dict) fleet_service_instance_name = fleet_service_instance_dict['name'] etcd_instance_key = ETCDCTL.etcd_key_running_services + "/" + fleet_service.name + "/" + fleet_service_instance_name etcdctl = ETCDCTL.get_etcdctl() etcdctl.write(etcd_instance_key, fleet_service_instance_json) return new_fleet_service_instance return None
def _init_etcdctl(self, arg_etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(arg_etcd_endpoint) if etcdctl is not None: return etcdctl else: return None
def init_etcdctl(self, arg_etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(arg_etcd_endpoint) if etcdctl is not None: return etcdctl else: return None
def save_fleet_service_state_to_etcd(self, fleet_service): etcdctl = ETCDCTL.get_etcdctl() etcd_key = ETCDCTL.etcd_key_running_services + "/" + fleet_service.name + "/" + ETCDCTL.etcd_name_fleet_service_template fleet_service_dict = fleet_service.to_dict() fleet_service_dict['fleet_service_instances'] = {} fleet_service_dict_json = json.dumps(fleet_service_dict) etcdctl.write(etcd_key, fleet_service_dict_json)
def init_from_etcd(self, etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint) if etcdctl is not None: res = etcdctl.read(ETCDCTL.etcd_key_init_application_configuration) dynamite_config_str = res.value if dynamite_config_str is not None and isinstance(dynamite_config_str, str): dynamite_yaml_config = json.loads(dynamite_config_str) self.set_instance_variables(dynamite_yaml_config) else: return None
def init_from_etcd(self, etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint) if etcdctl is not None: res = etcdctl.read(ETCDCTL.etcd_key_init_application_configuration) dynamite_config_str = res.value if dynamite_config_str is not None and isinstance( dynamite_config_str, str): dynamite_yaml_config = json.loads(dynamite_config_str) self.set_instance_variables(dynamite_yaml_config) else: return None
def remove_fleet_service_instance(self, fleet_service_name): fleet_service_handler = self.FleetServiceHandler fleet_service_dict = self.FleetServiceDict for service_name, fleet_service in fleet_service_dict.items(): if fleet_service.name == fleet_service_name: name_of_deleted_fleet_service = fleet_service_handler.remove_fleet_service_instance(fleet_service) self.save_fleet_service_state_to_etcd(fleet_service) # TODO remove the deleted fleet service instance from etcd if name_of_deleted_fleet_service is not None: etcd_instance_key = ETCDCTL.etcd_key_running_services + "/" + fleet_service.name + "/" + name_of_deleted_fleet_service etcdctl = ETCDCTL.get_etcdctl() etcdctl.delete(etcd_instance_key) return None
def create_fleet_service_dict_from_etcd(self, etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint) if etcdctl is not None: r = etcdctl.read(ETCDCTL.etcd_key_running_services, recursive=True, sorted=True) fleet_service_dict = {} fleet_service_instance_list = [] for service in r.children: service_path_parts = service.key.split("/") # name in fleet_service_dict service_name = service_path_parts[-2] # name in fleet_service_instances dict instance_name = service_path_parts[-1] if instance_name == "fleet_service_template": #print(service.value) value = json.loads(service.value) fleet_service = FleetService.dict_to_instance(value) fleet_service_dict[fleet_service.name] = fleet_service else: value = json.loads(service.value) fleet_service_instance = FleetService.FleetServiceInstance.dict_to_instance(value) fleet_service_instance_list.append(fleet_service_instance) for fleet_service_instance in fleet_service_instance_list: if "@" in fleet_service_instance.name: service_name = fleet_service_instance.name.split("@")[0] else: service_name = fleet_service_instance.name.replace(".service", "") fleet_service_dict[service_name].fleet_service_instances[fleet_service_instance.name] = fleet_service_instance return fleet_service_dict else: return None
def remove_fleet_service_instance(self, fleet_service_name, fleet_service_instance_name=None): fleet_service_handler = self.FleetServiceHandler fleet_service_dict = self.FleetServiceDict for service_name, fleet_service in fleet_service_dict.items(): if fleet_service.name == fleet_service_name: try: name_of_deleted_fleet_service = fleet_service_handler.remove_fleet_service_instance(fleet_service, fleet_service_instance_name) except requests.exceptions.HTTPError: self._logger.exception("Error removing service instance!") return False self.save_fleet_service_state_to_etcd(fleet_service) # remove the deleted fleet service instance from etcd if name_of_deleted_fleet_service is not None: etcd_instance_key = ETCDCTL.etcd_key_running_services + "/" + fleet_service.name + "/" + name_of_deleted_fleet_service etcdctl = ETCDCTL.get_etcdctl() etcdctl.delete(etcd_instance_key) return True return None
def __init__(self, configuration): self._metrics_base_path = configuration.metrics_path self._services_base_path = configuration.services_path self._etcdctl = ETCDCTL.create_etcdctl(str(configuration.etcd_endpoint))
def __init__(self, configuration): self._metrics_base_path = configuration.metrics_path self._services_base_path = configuration.services_path self._etcdctl = ETCDCTL.create_etcdctl(str( configuration.etcd_endpoint))
def _init_etcdctl(self, etcd_endpoint): etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint) return etcdctl
import argparse import os import platform import yaml import json import requests import etcd from dynamite.INIT.DynamiteConfig import DynamiteConfig from dynamite.INIT.DynamiteServiceHandler import DynamiteServiceHandler from intervaltree import Interval, IntervalTree from dynamite.GENERAL.FleetService import FleetService from dynamite.GENERAL import ETCDCTL etcdctl = ETCDCTL.create_etcdctl("127.0.0.1:4001") class Test(object): def to_json_string(self): instance_dict = {} for variable, value in self.__dict__.items(): instance_dict[variable] = value return json.dumps(instance_dict) def __init__(self): self.x = 12 self.y = 13