CORD-2407 MME playbook

Change-Id: Ifce2c1cc225d7469827f5da509b84957a45457e1
diff --git a/xos/synchronizer/steps/sync_vmmetenant.py b/xos/synchronizer/steps/sync_vmmetenant.py
index 2a0c617..c642bb8 100644
--- a/xos/synchronizer/steps/sync_vmmetenant.py
+++ b/xos/synchronizer/steps/sync_vmmetenant.py
@@ -37,4 +37,59 @@
     def __init__(self, *args, **kwargs):
         super(SyncVMMETenant, self).__init__(*args, **kwargs)
 
+    def get_extra_attributes(self, o):
+        fields = {}
 
+        fields['s6a_hss_ip']   = self.get_ip_address_from_peer_service_instance('s6a_network', 'VHSSTenant', o, 's6a_hss_ip')
+        fields['s1mme_enb_ip'] = o.enodeb_ip_addr
+        fields['s1mme_mme_ip'] = self.get_my_ip_address(o, 'flat_network_s1mme', 's1mme_mme_ip')
+        fields['s11_mme_ip']   = self.get_my_ip_address(o, 's11_network', 's11_mme_ip')
+        fields['s11_sgw_ip']   = self.get_ip_address_from_peer_service_instance('s11_network', 'VSPGWCTenant', o, 's11_sgw_ip')
+
+        return fields
+
+    def get_my_ip_address(self, o, network_name, parameter=None):
+        return self.get_ip_address_from_peer_service_instance_instance(network_name, o, o, parameter)
+
+    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
\ No newline at end of file