43b48b001b6ebafeffdfb92ffbebcbfd1d91e469
[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 retry import retry\r
17 from sqlalchemy import (\r
18     Table,\r
19     MetaData,\r
20     Column,\r
21     Integer,\r
22     String,\r
23     Text,\r
24     Enum,\r
25     # Date,\r
26     DateTime,\r
27     ForeignKey,\r
28     # Boolean,\r
29     # engine,\r
30     # event,\r
31     exc,\r
32 )\r
33 \r
34 from sqlalchemy.orm import mapper, relationship\r
35 # from sqlalchemy.sql.sqltypes import Integer\r
36 \r
37 from o2ims.domain import ocloud as ocloudModel\r
38 from o2ims.domain import subscription_obj as subModel\r
39 from o2ims.domain import configuration_obj as confModel\r
40 from o2ims.domain.resource_type import ResourceTypeEnum\r
41 \r
42 from o2common.helper import o2logging\r
43 logger = o2logging.get_logger(__name__)\r
44 \r
45 metadata = MetaData()\r
46 \r
47 ocloud = Table(\r
48     "ocloud",\r
49     metadata,\r
50     Column("updatetime", DateTime),\r
51     Column("createtime", DateTime),\r
52     Column("hash", String(255)),\r
53     Column("version_number", Integer),\r
54 \r
55     Column("oCloudId", String(255), primary_key=True),\r
56     Column("globalcloudId", String(255)),\r
57     Column("name", String(255)),\r
58     Column("description", String(255)),\r
59     Column("infrastructureManagementServiceEndpoint", String(255))\r
60     # Column("extensions", String(1024))\r
61 )\r
62 \r
63 resourcetype = Table(\r
64     "resourcetype",\r
65     metadata,\r
66     Column("updatetime", DateTime),\r
67     Column("createtime", DateTime),\r
68     Column("hash", String(255)),\r
69 \r
70     Column("resourceTypeId", String(255), primary_key=True),\r
71     Column("resourceTypeEnum", Enum(\r
72         ResourceTypeEnum, native_enum=False), nullable=False),\r
73     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
74     Column("name", String(255)),\r
75     Column("vendor", String(255)),\r
76     Column("model", String(255)),\r
77     Column("version", String(255)),\r
78     Column("description", String(255)),\r
79     # Column("extensions", String(1024))\r
80 )\r
81 \r
82 resourcepool = Table(\r
83     "resourcepool",\r
84     metadata,\r
85     Column("updatetime", DateTime),\r
86     Column("createtime", DateTime),\r
87     Column("hash", String(255)),\r
88     Column("version_number", Integer),\r
89 \r
90     Column("resourcePoolId", String(255), primary_key=True),\r
91     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
92     Column("globalLocationId", String(255)),\r
93     Column("name", String(255)),\r
94     Column("location", String(255)),\r
95     Column("description", String(255)),\r
96     # Column("resources", String(1024))\r
97     # Column("extensions", String(1024))\r
98 )\r
99 \r
100 resource = Table(\r
101     "resource",\r
102     metadata,\r
103     Column("updatetime", DateTime),\r
104     Column("createtime", DateTime),\r
105     Column("hash", String(255)),\r
106     Column("version_number", Integer),\r
107 \r
108     Column("resourceId", String(255), primary_key=True),\r
109     Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),\r
110     Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),\r
111     Column("name", String(255)),\r
112     # Column("globalAssetId", String(255)),\r
113     Column("parentId", String(255)),\r
114     Column("description", String(255)),\r
115     Column("elements", Text())\r
116     # Column("extensions", String(1024))\r
117 )\r
118 \r
119 deploymentmanager = Table(\r
120     "deploymentmanager",\r
121     metadata,\r
122     Column("updatetime", DateTime),\r
123     Column("createtime", DateTime),\r
124     Column("hash", String(255)),\r
125     Column("version_number", Integer),\r
126 \r
127     Column("deploymentManagerId", String(255), primary_key=True),\r
128     Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
129     Column("name", String(255)),\r
130     Column("description", String(255)),\r
131     Column("deploymentManagementServiceEndpoint", String(255)),\r
132     Column("supportedLocations", String(255)),\r
133     Column("capabilities", String(255)),\r
134     Column("capacity", String(255)),\r
135     # Column("extensions", String(1024))\r
136 )\r
137 \r
138 subscription = Table(\r
139     "subscription",\r
140     metadata,\r
141     Column("updatetime", DateTime),\r
142     Column("createtime", DateTime),\r
143     Column("hash", String(255)),\r
144     Column("version_number", Integer),\r
145 \r
146     Column("subscriptionId", String(255), primary_key=True),\r
147     Column("callback", String(255)),\r
148     Column("consumerSubscriptionId", String(255)),\r
149     Column("filter", String(255)),\r
150 )\r
151 \r
152 configuration = Table(\r
153     "configuration",\r
154     metadata,\r
155     Column("updatetime", DateTime),\r
156     Column("createtime", DateTime),\r
157 \r
158     Column("configurationId", String(255), primary_key=True),\r
159     Column("conftype", String(255)),\r
160     Column("callback", String(255)),\r
161     Column("status", String(255)),\r
162     Column("comments", String(255)),\r
163 )\r
164 \r
165 \r
166 @retry((exc.IntegrityError), tries=3, delay=2)\r
167 def wait_for_metadata_ready(engine):\r
168     # wait for mapper ready\r
169     metadata.create_all(engine, checkfirst=True)\r
170     logger.info("metadata is ready")\r
171 \r
172 \r
173 def start_o2ims_mappers(engine=None):\r
174     logger.info("Starting O2 IMS mappers")\r
175 \r
176     dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)\r
177     resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)\r
178     resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)\r
179     mapper(\r
180         ocloudModel.Ocloud,\r
181         ocloud,\r
182         properties={\r
183             "deploymentManagers": relationship(dm_mapper),\r
184             "resourceTypes": relationship(resourcetype_mapper),\r
185             "resourcePools": relationship(resourcepool_mapper)\r
186         })\r
187     mapper(\r
188         ocloudModel.Resource,\r
189         resource,\r
190         properties={\r
191             "resourceTypes": relationship(resourcetype_mapper),\r
192             "resourcePools": relationship(resourcepool_mapper)\r
193         }\r
194     )\r
195     mapper(subModel.Subscription, subscription)\r
196     mapper(confModel.Configuration, configuration)\r
197 \r
198     if engine is not None:\r
199         wait_for_metadata_ready(engine)\r