Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    def _init_etcdctl(self, arg_etcd_endpoint):
        etcdctl = ETCDCTL.create_etcdctl(arg_etcd_endpoint)

        if etcdctl is not None:
            return etcdctl
        else:
            return None
Ejemplo n.º 3
0
    def init_etcdctl(self, arg_etcd_endpoint):
        etcdctl = ETCDCTL.create_etcdctl(arg_etcd_endpoint)

        if etcdctl is not None:
            return etcdctl
        else:
            return None
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
 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))
Ejemplo n.º 15
0
 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))
Ejemplo n.º 16
0
 def _init_etcdctl(self, etcd_endpoint):
     etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint)
     return etcdctl
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
 def _init_etcdctl(self, etcd_endpoint):
     etcdctl = ETCDCTL.create_etcdctl(etcd_endpoint)
     return etcdctl