bb5c984c02728c8207947bf6432788b411f23db0
[pti/o2.git] / o2ims / adapter / orm.py
1 # Copyright (C) 2021 Wind River Systems, Inc.\r
2 #\r
3 #  Licensed under the Apache License, Version 2.0 (the "License");\r
4 #  you may not use this file except in compliance with the License.\r
5 #  You may obtain a copy of the License at\r
6 #\r
7 #      http://www.apache.org/licenses/LICENSE-2.0\r
8 #\r
9 #  Unless required by applicable law or agreed to in writing, software\r
10 #  distributed under the License is distributed on an "AS IS" BASIS,\r
11 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 #  See the License for the specific language governing permissions and\r
13 #  limitations under the License.\r
14 \r
15 # from typing_extensions import Required\r
16 from sqlalchemy import (\r
17     Table,\r
18     MetaData,\r
19     Column,\r
20     Integer,\r
21     String,\r
22     Text,\r
23     Enum,\r
24     # Date,\r
25     DateTime,\r
26     ForeignKey,\r
27     # engine,\r
28     # event,\r
29 )\r
30 \r
31 from sqlalchemy.orm import mapper, relationship\r
32 # from sqlalchemy.sql.sqltypes import Integer\r
33 \r
34 from o2ims.domain import ocloud as ocloudModel\r
35 from o2ims.domain import subscription_obj as subModel\r
36 from o2ims.domain.resource_type import ResourceTypeEnum\r
37 \r
38 from o2common.helper import o2logging\r
39 logger = o2logging.get_logger(__name__)\r
40 \r
41 metadata = MetaData()\r
42 \r
43 ocloud = Table(\r
44     "ocloud",\r
45     metadata,\r
46     Column("updatetime", DateTime),\r
47     Column("createtime", DateTime),\r
48     Column("hash", String(255)),\r
49     Column("version_number", Integer),\r
50 \r
51     Column("oCloudId", String(255), primary_key=True),\r
52     Column("globalcloudId", String(255)),\r
53     Column("name", String(255)),\r
54     Column("description", String(255)),\r
55     Column("infrastructureManagementServiceEndpoint", String(255))\r
56     # Column("extensions", String(1024))\r
57 )\r
58 \r
59 resourcetype = Table(\r
60     "resourcetype",\r
61     metadata,\r
62     Column("updatetime", DateTime),\r
63     Column("createtime", DateTime),\r
64     Column("hash", String(255)),\r
65 \r
66     Column("resourceTypeId", String(255), primary_key=True),\r
67     Column("resourceTypeEnum", Enum(ResourceTypeEnum), nullable=False),\r
68     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
69     Column("name", String(255)),\r
70     Column("vendor", String(255)),\r
71     Column("model", String(255)),\r
72     Column("version", String(255)),\r
73     Column("description", String(255)),\r
74     # Column("extensions", String(1024))\r
75 )\r
76 \r
77 resourcepool = Table(\r
78     "resourcepool",\r
79     metadata,\r
80     Column("updatetime", DateTime),\r
81     Column("createtime", DateTime),\r
82     Column("hash", String(255)),\r
83     Column("version_number", Integer),\r
84 \r
85     Column("resourcePoolId", String(255), primary_key=True),\r
86     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
87     Column("globalLocationId", String(255)),\r
88     Column("name", String(255)),\r
89     Column("location", String(255)),\r
90     Column("description", String(255)),\r
91     # Column("resources", String(1024))\r
92     # Column("extensions", String(1024))\r
93 )\r
94 \r
95 resource = Table(\r
96     "resource",\r
97     metadata,\r
98     Column("updatetime", DateTime),\r
99     Column("createtime", DateTime),\r
100     Column("hash", String(255)),\r
101     Column("version_number", Integer),\r
102 \r
103     Column("resourceId", String(255), primary_key=True),\r
104     Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),\r
105     Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),\r
106     Column("name", String(255)),\r
107     # Column("globalAssetId", String(255)),\r
108     Column("parentId", String(255)),\r
109     Column("description", String(255)),\r
110     Column("elements", Text())\r
111     # Column("extensions", String(1024))\r
112 )\r
113 \r
114 deploymentmanager = Table(\r
115     "deploymentmanager",\r
116     metadata,\r
117     Column("updatetime", DateTime),\r
118     Column("createtime", DateTime),\r
119     Column("hash", String(255)),\r
120     Column("version_number", Integer),\r
121 \r
122     Column("deploymentManagerId", String(255), primary_key=True),\r
123     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
124     Column("name", String(255)),\r
125     Column("description", String(255)),\r
126     Column("deploymentManagementServiceEndpoint", String(255)),\r
127     Column("supportedLocations", String(255)),\r
128     Column("capabilities", String(255)),\r
129     Column("capacity", String(255)),\r
130     # Column("extensions", String(1024))\r
131 )\r
132 \r
133 subscription = Table(\r
134     "subscription",\r
135     metadata,\r
136     Column("updatetime", DateTime),\r
137     Column("createtime", DateTime),\r
138     Column("hash", String(255)),\r
139     Column("version_number", Integer),\r
140 \r
141     Column("subscriptionId", String(255), primary_key=True),\r
142     Column("callback", String(255)),\r
143     Column("consumerSubscriptionId", String(255)),\r
144     Column("filter", String(255)),\r
145 )\r
146 \r
147 \r
148 def start_o2ims_mappers(engine=None):\r
149     logger.info("Starting O2 IMS mappers")\r
150 \r
151     dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)\r
152     resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)\r
153     resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)\r
154     mapper(\r
155         ocloudModel.Ocloud,\r
156         ocloud,\r
157         properties={\r
158             "deploymentManagers": relationship(dm_mapper),\r
159             "resourceTypes": relationship(resourcetype_mapper),\r
160             "resourcePools": relationship(resourcepool_mapper)\r
161         })\r
162     mapper(\r
163         ocloudModel.Resource,\r
164         resource,\r
165         properties={\r
166             "resourceTypes": relationship(resourcetype_mapper),\r
167             "resourcePools": relationship(resourcepool_mapper)\r
168         }\r
169     )\r
170     mapper(subModel.Subscription, subscription)\r
171 \r
172     if engine is not None:\r
173         metadata.create_all(engine)\r