Update SMO register process; remove provision code
[pti/o2.git] / o2ims / adapter / orm.py
1 # Copyright (C) 2021 Wind River Systems, Inc.
2 #
3 #  Licensed under the Apache License, Version 2.0 (the "License");
4 #  you may not use this file except in compliance with the License.
5 #  You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #  Unless required by applicable law or agreed to in writing, software
10 #  distributed under the License is distributed on an "AS IS" BASIS,
11 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #  See the License for the specific language governing permissions and
13 #  limitations under the License.
14
15 # from typing_extensions import Required
16 from retry import retry
17 from sqlalchemy import (
18     Table,
19     MetaData,
20     Column,
21     Integer,
22     String,
23     Text,
24     Enum,
25     # Date,
26     DateTime,
27     ForeignKey,
28     # Boolean,
29     # engine,
30     # event,
31     exc,
32 )
33
34 from sqlalchemy.orm import mapper, relationship
35 # from sqlalchemy.sql.sqltypes import Integer
36
37 from o2ims.domain import ocloud as ocloudModel
38 from o2ims.domain import subscription_obj as subModel
39 from o2ims.domain import alarm_obj as alarmModel
40 from o2ims.domain.resource_type import ResourceTypeEnum
41 # from o2ims.domain.alarm_obj import AlarmLastChangeEnum, PerceivedSeverityEnum
42
43 from o2common.helper import o2logging
44 logger = o2logging.get_logger(__name__)
45
46 metadata = MetaData()
47
48 ocloud = Table(
49     "ocloud",
50     metadata,
51     Column("updatetime", DateTime),
52     Column("createtime", DateTime),
53     Column("hash", String(255)),
54     Column("version_number", Integer),
55
56     Column("oCloudId", String(255), primary_key=True),
57     Column("globalcloudId", String(255)),
58     Column("name", String(255)),
59     Column("description", String(255)),
60     Column("serviceUri", String(255))
61     # Column("extensions", String(1024))
62 )
63
64 resourcetype = Table(
65     "resourcetype",
66     metadata,
67     Column("updatetime", DateTime),
68     Column("createtime", DateTime),
69     Column("hash", String(255)),
70
71     Column("resourceTypeId", String(255), primary_key=True),
72     Column("resourceTypeEnum", Enum(
73         ResourceTypeEnum, native_enum=False), nullable=False),
74     Column("oCloudId", ForeignKey("ocloud.oCloudId")),
75     Column("name", String(255)),
76     Column("vendor", String(255)),
77     Column("model", String(255)),
78     Column("version", String(255)),
79     Column("description", String(255)),
80     # Column("extensions", String(1024))
81 )
82
83 resourcepool = Table(
84     "resourcepool",
85     metadata,
86     Column("updatetime", DateTime),
87     Column("createtime", DateTime),
88     Column("hash", String(255)),
89     Column("version_number", Integer),
90
91     Column("resourcePoolId", String(255), primary_key=True),
92     Column("oCloudId", ForeignKey("ocloud.oCloudId")),
93     Column("globalLocationId", String(255)),
94     Column("name", String(255)),
95     Column("location", String(255)),
96     Column("description", String(255)),
97     # Column("resources", String(1024))
98     # Column("extensions", String(1024))
99 )
100
101 resource = Table(
102     "resource",
103     metadata,
104     Column("updatetime", DateTime),
105     Column("createtime", DateTime),
106     Column("hash", String(255)),
107     Column("version_number", Integer),
108
109     Column("resourceId", String(255), primary_key=True),
110     Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
111     Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),
112     Column("name", String(255)),
113     # Column("globalAssetId", String(255)),
114     Column("parentId", String(255)),
115     Column("description", String(255)),
116     Column("elements", Text())
117     # Column("extensions", String(1024))
118 )
119
120 deploymentmanager = Table(
121     "deploymentmanager",
122     metadata,
123     Column("updatetime", DateTime),
124     Column("createtime", DateTime),
125     Column("hash", String(255)),
126     Column("version_number", Integer),
127
128     Column("deploymentManagerId", String(255), primary_key=True),
129     Column("oCloudId", ForeignKey("ocloud.oCloudId")),
130     Column("name", String(255)),
131     Column("description", String(255)),
132     Column("deploymentManagementServiceEndpoint", String(255)),
133     Column("supportedLocations", String(255)),
134     Column("capabilities", String(255)),
135     Column("capacity", String(255)),
136     Column("profile", Text())
137     # Column("extensions", String(1024))
138 )
139
140 subscription = Table(
141     "subscription",
142     metadata,
143     Column("updatetime", DateTime),
144     Column("createtime", DateTime),
145     Column("hash", String(255)),
146     Column("version_number", Integer),
147
148     Column("subscriptionId", String(255), primary_key=True),
149     Column("callback", String(255)),
150     Column("consumerSubscriptionId", String(255)),
151     Column("filter", String(255)),
152 )
153
154 alarm_definition = Table(
155     "alarmDefinition",
156     metadata,
157     Column("updatetime", DateTime),
158     Column("createtime", DateTime),
159
160     Column("alarmDefinitionId", String(255), primary_key=True),
161     Column("alarmName", String(255), unique=True),
162     Column("alarmLastChange", String(255)),
163     Column("alarmDescription", String(255)),
164     Column("proposeRepairActions", String(255)),
165     Column("clearingType", String(255)),
166     Column("managementInterfaceId", String(255)),
167     Column("pkNotificationField", String(255))
168 )
169
170 alarm_event_record = Table(
171     "alarmEventRecord",
172     metadata,
173     Column("updatetime", DateTime),
174     Column("createtime", DateTime),
175     Column("hash", String(255)),
176
177     Column("alarmEventRecordId", String(255), primary_key=True),
178     Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
179     Column("resourceId", ForeignKey("resource.resourceId")),
180     Column("alarmDefinitionId", ForeignKey(
181         "alarmDefinition.alarmDefinitionId")),
182     Column("probableCauseId", String(255)),
183     Column("perceivedSeverity", Integer),
184     Column("alarmRaisedTime", String(255)),
185     Column("alarmChangedTime", String(255)),
186     Column("alarmAcknowledgeTime", String(255)),
187     Column("alarmAcknowledged", String(255)),
188 )
189
190 alarm_probable_cause = Table(
191     "probableCause",
192     metadata,
193     Column("updatetime", DateTime),
194     Column("createtime", DateTime),
195     Column("hash", String(255)),
196
197     Column("probableCauseId", String(255), primary_key=True),
198     Column("name", String(255)),
199     Column("description", String(255)),
200 )
201
202 alarm_subscription = Table(
203     "alarmSubscription",
204     metadata,
205     Column("updatetime", DateTime),
206     Column("createtime", DateTime),
207
208     Column("alarmSubscriptionId", String(255), primary_key=True),
209     Column("callback", String(255)),
210     Column("consumerSubscriptionId", String(255)),
211     Column("filter", String(255)),
212 )
213
214
215 @retry((exc.IntegrityError), tries=3, delay=2)
216 def wait_for_metadata_ready(engine):
217     # wait for mapper ready
218     metadata.create_all(engine, checkfirst=True)
219     logger.info("metadata is ready")
220
221
222 def start_o2ims_mappers(engine=None):
223     logger.info("Starting O2 IMS mappers")
224
225     # IMS Infrastructure Inventory Mappering
226     dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
227     resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
228     resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
229     mapper(
230         ocloudModel.Ocloud,
231         ocloud,
232         properties={
233             "deploymentManagers": relationship(dm_mapper),
234             "resourceTypes": relationship(resourcetype_mapper),
235             "resourcePools": relationship(resourcepool_mapper)
236         })
237     mapper(
238         ocloudModel.Resource,
239         resource,
240         properties={
241             "resourceTypes": relationship(resourcetype_mapper),
242             "resourcePools": relationship(resourcepool_mapper)
243         }
244     )
245     mapper(subModel.Subscription, subscription)
246
247     # IMS Infrastruture Monitoring Mappering
248     mapper(alarmModel.AlarmEventRecord, alarm_event_record)
249     mapper(alarmModel.AlarmDefinition, alarm_definition)
250     mapper(alarmModel.ProbableCause, alarm_probable_cause)
251     mapper(alarmModel.AlarmSubscription, alarm_subscription)
252
253     if engine is not None:
254         wait_for_metadata_ready(engine)