[CORD-2497] add playbook to start cassandra db from hss_db service
Change-Id: I8435d46753ce27bafec4f5fcd6c1bb885218bdec
diff --git a/xos/synchronizer/steps/sync_hssdbserviceinstance.py b/xos/synchronizer/steps/sync_hssdbserviceinstance.py
index 4cb1379..aec739b 100644
--- a/xos/synchronizer/steps/sync_hssdbserviceinstance.py
+++ b/xos/synchronizer/steps/sync_hssdbserviceinstance.py
@@ -30,4 +30,71 @@
def __init__(self, *args, **kwargs):
super(SyncHSSDBServiceInstance, self).__init__(*args, **kwargs)
+ def get_extra_attributes(self, o):
+ fields = {}
+
+ fields['db_ip'] = self.get_ip_address_from_peer_service_instance_instance('db_network', o, o, 'db_ip')
+
+ return fields
+
+ def get_ip_address_from_peer_service_instance(self, network_name, sitype, o, parameter=None):
+ peer_si = self.get_peer_serviceinstance_of_type(sitype, o)
+ return self.get_ip_address_from_peer_service_instance_instance(network_name, peer_si, o, parameter)
+
+ def get_ip_address_from_peer_service_instance_instance(self, network_name, peer_si, o, parameter=None):
+ try:
+ net_id = self.get_network_id(network_name)
+ ins_id = peer_si.leaf_model.instance_id
+ ip_address = Port.objects.get(
+ network_id=net_id, instance_id=ins_id).ip
+ except Exception:
+ self.log.error("Failed to fetch parameter",
+ parameter=parameter,
+ network_name=network_name)
+ self.defer_sync(o, "Waiting for parameters to become available")
+
+ return ip_address
+
+ def get_peer_serviceinstance_of_type(self, sitype, o):
+ prov_link_set = ServiceInstanceLink.objects.filter(
+ subscriber_service_instance_id=o.id)
+
+ try:
+ peer_service = next(
+ p.provider_service_instance for p in prov_link_set if p.provider_service_instance.leaf_model_name == sitype)
+ except StopIteration:
+ sub_link_set = ServiceInstanceLink.objects.filter(
+ provider_service_instance_id=o.id)
+ try:
+ peer_service = next(
+ s.subscriber_service_instance for s in sub_link_set if s.subscriber_service_instance.leaf_model_name == sitype)
+ except StopIteration:
+ self.log.error(
+ 'Could not find service type in service graph', service_type=sitype, object=o)
+ raise ServiceGraphException(
+ "Synchronization failed due to incomplete service graph")
+
+ return peer_service
+
+ # To get each network id
+ def get_network_id(self, network_name):
+ return Network.objects.get(name=network_name).id
+
+ # To get service_instance (assumption: there is a single instance for each service)
+ def get_instance_id(self, serviceinstance):
+ instances = serviceinstance.objects.all()
+ instance_id = instances[0].instance_id
+ return instance_id
+
+ def has_instance(self, sitype, o):
+ try:
+ i = self.get_peer_serviceinstance_of_type(sitype, o)
+ except ServiceGraphException:
+ self.log.info("Missing in ServiceInstance graph",
+ serviceinstance=sitype)
+ return False
+
+ return i.leaf_model.instance_id
+
+