Fix nfdeployment uninstalling issue
[pti/o2.git] / o2ims / adapter / orm.py
index 05a8dc7..43b48b0 100644 (file)
@@ -13,6 +13,7 @@
 #  limitations under the License.\r
 \r
 # from typing_extensions import Required\r
+from retry import retry\r
 from sqlalchemy import (\r
     Table,\r
     MetaData,\r
@@ -24,14 +25,18 @@ from sqlalchemy import (
     # Date,\r
     DateTime,\r
     ForeignKey,\r
+    # Boolean,\r
     # engine,\r
     # event,\r
+    exc,\r
 )\r
 \r
 from sqlalchemy.orm import mapper, relationship\r
 # from sqlalchemy.sql.sqltypes import Integer\r
 \r
 from o2ims.domain import ocloud as ocloudModel\r
+from o2ims.domain import subscription_obj as subModel\r
+from o2ims.domain import configuration_obj as confModel\r
 from o2ims.domain.resource_type import ResourceTypeEnum\r
 \r
 from o2common.helper import o2logging\r
@@ -63,7 +68,8 @@ resourcetype = Table(
     Column("hash", String(255)),\r
 \r
     Column("resourceTypeId", String(255), primary_key=True),\r
-    Column("resourceTypeEnum", Enum(ResourceTypeEnum), nullable=False),\r
+    Column("resourceTypeEnum", Enum(\r
+        ResourceTypeEnum, native_enum=False), nullable=False),\r
     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
     Column("name", String(255)),\r
     Column("vendor", String(255)),\r
@@ -102,6 +108,7 @@ resource = Table(
     Column("resourceId", String(255), primary_key=True),\r
     Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),\r
     Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),\r
+    Column("name", String(255)),\r
     # Column("globalAssetId", String(255)),\r
     Column("parentId", String(255)),\r
     Column("description", String(255)),\r
@@ -142,6 +149,26 @@ subscription = Table(
     Column("filter", String(255)),\r
 )\r
 \r
+configuration = Table(\r
+    "configuration",\r
+    metadata,\r
+    Column("updatetime", DateTime),\r
+    Column("createtime", DateTime),\r
+\r
+    Column("configurationId", String(255), primary_key=True),\r
+    Column("conftype", String(255)),\r
+    Column("callback", String(255)),\r
+    Column("status", String(255)),\r
+    Column("comments", String(255)),\r
+)\r
+\r
+\r
+@retry((exc.IntegrityError), tries=3, delay=2)\r
+def wait_for_metadata_ready(engine):\r
+    # wait for mapper ready\r
+    metadata.create_all(engine, checkfirst=True)\r
+    logger.info("metadata is ready")\r
+\r
 \r
 def start_o2ims_mappers(engine=None):\r
     logger.info("Starting O2 IMS mappers")\r
@@ -165,7 +192,8 @@ def start_o2ims_mappers(engine=None):
             "resourcePools": relationship(resourcepool_mapper)\r
         }\r
     )\r
-    mapper(ocloudModel.Subscription, subscription)\r
+    mapper(subModel.Subscription, subscription)\r
+    mapper(confModel.Configuration, configuration)\r
 \r
     if engine is not None:\r
-        metadata.create_all(engine)\r
+        wait_for_metadata_ready(engine)\r