[ACORD-18] CORD 3.0 integration for monitoring service
Adding the new files
-Updating models 
-Fixing synchronizer

Change-Id: I148e06d421a42acdeb8366a7816d0589f8a39e54
diff --git a/xos/attic/ceilometerservice_model.py b/xos/attic/ceilometerservice_model.py
new file mode 100644
index 0000000..380da81
--- /dev/null
+++ b/xos/attic/ceilometerservice_model.py
@@ -0,0 +1,143 @@
+sync_attributes = ("private_ip", "private_mac",
+                   "nat_ip", "nat_mac", "ceilometer_enable_pub_sub")
+                   
+def get_instance(self):
+    for slice in self.slices.all():
+         for instance in slice.instances.all():
+             if instance.image.name in self.LOOK_FOR_IMAGES:
+                 return instance
+    return None
+
+@property
+def addresses(self):
+    if (not self.id) or (not self.get_instance()):
+        return {}
+
+    addresses = {}
+    for ns in self.get_instance().ports.all():
+        if "private" in ns.network.name.lower():
+            addresses["private"] = (ns.ip, ns.mac)
+        elif ("nat" in ns.network.name.lower()) or ("management" in ns.network.name.lower()):
+            addresses["nat"] = (ns.ip, ns.mac)
+        #TODO: Do we need this client_access_network. Revisit in VTN context
+        #elif "ceilometer_client_access" in ns.network.labels.lower():
+        #    addresses["ceilometer"] = (ns.ip, ns.mac)
+    return addresses
+
+@property
+def nat_ip(self):
+    return self.addresses.get("nat", (None, None))[0]
+
+@property
+def nat_mac(self):
+    return self.addresses.get("nat", (None, None))[1]
+
+@property
+def private_ip(self):
+    return self.addresses.get("private", (None, None))[0]
+
+@property
+def private_mac(self):
+    return self.addresses.get("private", (None, None))[1]
+
+def get_controller(self):
+    if not self.slices.count:
+        raise XOSConfigurationError("The service has no slices")
+    cslice = self.slices.all()[0].controllerslices.all()[0]
+    controller = cslice.controller
+    if not controller:
+        raise XOSConfigurationError("The service slice has no controller")
+    return controller
+
+@property
+def ceilometer_pub_sub_url(self):
+    if not self.get_instance():
+        return self.get_attribute("ceilometer_pub_sub_url", None)
+    if not self.private_ip:
+        return None
+    return "http://" + self.private_ip + ":4455/"
+
+@ceilometer_pub_sub_url.setter
+def ceilometer_pub_sub_url(self, value):
+    self.set_attribute("ceilometer_pub_sub_url", value)
+
+@property
+def ceilometer_enable_pub_sub(self):
+    return self.get_attribute("ceilometer_enable_pub_sub", False)
+
+@ceilometer_enable_pub_sub.setter
+def ceilometer_enable_pub_sub(self, value):
+    self.set_attribute("ceilometer_enable_pub_sub", value)
+
+@property
+def ceilometer_auth_url(self):
+    #FIXME: Crude way to determine if monitoring service is getting deployed with its own ceilometer+keystone 
+    if not self.get_instance():
+        return self.get_controller().auth_url
+    if not self.private_ip:
+        return None
+    return "http://" + self.private_ip + ":5000/v2.0"
+
+@property
+def ceilometer_admin_user(self):
+    if not self.get_instance():
+        return self.get_controller().admin_user
+    return 'admin'
+
+@property
+def ceilometer_admin_password(self):
+    if not self.get_instance():
+        return self.get_controller().admin_password
+    return 'password'
+
+@property
+def ceilometer_admin_tenant(self):
+    if not self.get_instance():
+        return self.get_controller().admin_tenant
+    return 'admin'
+
+@property
+def ceilometer_rabbit_compute_node(self):
+    if not self.get_instance():
+        return None
+    return self.get_instance().node.name
+
+@property
+def ceilometer_rabbit_host(self):
+    if not self.get_instance():
+        return None
+    return self.nat_ip
+
+@property
+def ceilometer_rabbit_user(self):
+    if not self.get_instance():
+        return None
+    return 'openstack'
+
+@property
+def ceilometer_rabbit_password(self):
+    if not self.get_instance():
+        return None
+    return 'password'
+
+@property
+def ceilometer_rabbit_uri(self):
+    if not self.get_instance():
+        return None
+    if not self.private_ip:
+        return None
+    return 'rabbit://openstack:password@' + self.private_ip + ':5672'
+
+@property
+def kafka_url(self):
+    if not self.get_instance():
+        return None
+    if not self.private_ip:
+        return None
+    return 'kafka://' + self.private_ip + ':9092'
+
+def delete(self, *args, **kwargs):
+    instance = self.get_instance()
+    if instance:
+        instance.delete()
+    super(CeilometerService, self).delete(*args, **kwargs)
\ No newline at end of file