diff --git a/eureka/__init__.py b/eureka/__init__.py index 43c4ab0..49e0fc1 100644 --- a/eureka/__init__.py +++ b/eureka/__init__.py @@ -1 +1 @@ -__version__ = "0.6.1" +__version__ = "0.7.0" diff --git a/eureka/client.py b/eureka/client.py index 2cc0d6f..84ef83b 100644 --- a/eureka/client.py +++ b/eureka/client.py @@ -35,7 +35,7 @@ class EurekaClient(object): def __init__(self, app_name, eureka_url=None, eureka_domain_name=None, host_name=None, data_center="Amazon", vip_address=None, secure_vip_address=None, port=None, secure_port=None, use_dns=True, region=None, prefer_same_zone=True, context="eureka/v2", eureka_port=None, - health_check_url=None): + health_check_url=None, eureka_host_name=None): super(EurekaClient, self).__init__() self.app_name = app_name self.eureka_url = eureka_url @@ -62,6 +62,7 @@ def __init__(self, app_name, eureka_url=None, eureka_domain_name=None, host_name # Relative URL to eureka self.context = context self.health_check_url = health_check_url + self.eureka_host_name = eureka_host_name self.eureka_urls = self.get_eureka_urls() def _get_txt_records_from_dns(self, domain): @@ -84,6 +85,8 @@ def get_zones_from_dns(self): def get_eureka_urls(self): if self.eureka_url: return [self.eureka_url] + elif self.eureka_host_name: + return [self._build_eureka_url(self.eureka_host_name)] elif self.use_dns: zone_dns_map = self.get_zones_from_dns() zones = zone_dns_map.keys() @@ -100,12 +103,7 @@ def get_eureka_urls(self): eureka_instances = zone_dns_map[zone] random.shuffle(eureka_instances) # Shuffle order for load balancing for eureka_instance in eureka_instances: - server_uri = "http://%s" % eureka_instance - if self.eureka_port: - server_uri += ":%s" % self.eureka_port - eureka_instance_url = urljoin(server_uri, self.context, "/") - if not eureka_instance_url.endswith("/"): - eureka_instance_url = "%s/" % eureka_instance_url + eureka_instance_url = self._build_eureka_url(eureka_instance) service_urls.append(eureka_instance_url) primary_server = service_urls.pop(0) random.shuffle(service_urls) @@ -113,6 +111,15 @@ def get_eureka_urls(self): logger.info("This client will talk to the following serviceUrls in order: %s" % service_urls) return service_urls + def _build_eureka_url(self, eureka_instance): + server_uri = "http://%s" % eureka_instance + if self.eureka_port: + server_uri += ":%s" % self.eureka_port + eureka_instance_url = urljoin(server_uri, self.context, "/") + if not eureka_instance_url.endswith("/"): + eureka_instance_url = "%s/" % eureka_instance_url + return eureka_instance_url + def get_instance_zone(self): if self.data_center == "Amazon": return ec2metadata.get('availability-zone') @@ -228,3 +235,6 @@ def get_instance(self, instance_id): def get_app_instance(self, app_id, instance_id): return self._get_from_any_instance("apps/%s/%s" % (app_id, instance_id)) + + def get_delta(self): + return self._get_from_any_instance("apps/delta")