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