Adding first progran Xos integration

Change-Id: I2f9f52bff7ed985fe4b76eb928048c9d0cfde03e
diff --git a/xos/models.py b/xos/models.py
new file mode 100644
index 0000000..de98a6d
--- /dev/null
+++ b/xos/models.py
@@ -0,0 +1,91 @@
+from django.db import models
+from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber, NetworkParameter, NetworkParameterType, Port, AddressPool
+from core.models.plcorebase import StrippedCharField
+import os
+from django.db import models, transaction
+from django.forms.models import model_to_dict
+from django.db.models import Q
+from operator import itemgetter, attrgetter, methodcaller
+from core.models import Tag
+from core.models.service import LeastLoadedNodeScheduler
+import traceback
+from xos.exceptions import *
+from xos.config import Config
+
+
+class ConfigurationError(Exception):
+    pass
+
+
+PROGRAN_KIND = "Progran"
+APP_LABEL = "progran"
+
+
+
+class VProgranService(Service):
+    KIND = PROGRAN_KIND
+
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "Progran Service"
+        proxy = True
+
+    default_attributes = {
+        "rest_hostname": "10.6.0.1",
+        "rest_port": "8183",
+        "rest_user": "onos",
+        "rest_pass": "rocks"
+    }
+
+    @property
+    def rest_hostname(self):
+        return self.get_attribute("rest_hostname", self.default_attributes["rest_hostname"])
+
+    @rest_hostname.setter
+    def rest_hostname(self, value):
+        self.set_attribute("rest_hostname", value)
+
+    @property
+    def rest_port(self):
+        return self.get_attribute("rest_port", self.default_attributes["rest_port"])
+
+    @rest_port.setter
+    def rest_port(self, value):
+        self.set_attribute("rest_port", value)
+
+    @property
+    def rest_user(self):
+        return self.get_attribute("rest_user", self.default_attributes["rest_user"])
+
+    @rest_user.setter
+    def rest_user(self, value):
+        self.set_attribute("rest_user", value)
+
+    @property
+    def rest_pass(self):
+        return self.get_attribute("rest_pass", self.default_attributes["rest_pass"])
+
+
+
+
+class VProgranImsi(PlCoreBase):
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "vProgran Imsi"
+
+    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
+    imsi = models.CharField(max_length=20, help_text="imsi ", null=False, blank=False)
+    profile = models.CharField(max_length=20, help_text="profile name", null=True, blank=True)
+
+
+class VProgranProfile(PlCoreBase):
+
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "vProgran Profile"
+
+    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
+    profile = models.CharField(max_length=20, help_text="profile name", null=False, blank=False)
+    dlrate = models.IntegerField( help_text="device download rate", null=False, blank=False)
+    ulrate = models.IntegerField( help_text="device upload rate", null=False, blank=False )
+