1 # Copyright (C) 2021 Wind River Systems, Inc.
\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
7 # http://www.apache.org/licenses/LICENSE-2.0
\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
15 # from typing_extensions import Required
\r
16 from retry import retry
\r
17 from sqlalchemy import (
\r
34 from sqlalchemy.orm import mapper, relationship
\r
35 # from sqlalchemy.sql.sqltypes import Integer
\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
42 from o2common.helper import o2logging
\r
43 logger = o2logging.get_logger(__name__)
\r
45 metadata = MetaData()
\r
50 Column("updatetime", DateTime),
\r
51 Column("createtime", DateTime),
\r
52 Column("hash", String(255)),
\r
53 Column("version_number", Integer),
\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
63 resourcetype = Table(
\r
66 Column("updatetime", DateTime),
\r
67 Column("createtime", DateTime),
\r
68 Column("hash", String(255)),
\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
82 resourcepool = Table(
\r
85 Column("updatetime", DateTime),
\r
86 Column("createtime", DateTime),
\r
87 Column("hash", String(255)),
\r
88 Column("version_number", Integer),
\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
103 Column("updatetime", DateTime),
\r
104 Column("createtime", DateTime),
\r
105 Column("hash", String(255)),
\r
106 Column("version_number", Integer),
\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
119 deploymentmanager = Table(
\r
120 "deploymentmanager",
\r
122 Column("updatetime", DateTime),
\r
123 Column("createtime", DateTime),
\r
124 Column("hash", String(255)),
\r
125 Column("version_number", Integer),
\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
138 subscription = Table(
\r
141 Column("updatetime", DateTime),
\r
142 Column("createtime", DateTime),
\r
143 Column("hash", String(255)),
\r
144 Column("version_number", Integer),
\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
152 configuration = Table(
\r
155 Column("updatetime", DateTime),
\r
156 Column("createtime", DateTime),
\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
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
173 def start_o2ims_mappers(engine=None):
\r
174 logger.info("Starting O2 IMS mappers")
\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
180 ocloudModel.Ocloud,
\r
183 "deploymentManagers": relationship(dm_mapper),
\r
184 "resourceTypes": relationship(resourcetype_mapper),
\r
185 "resourcePools": relationship(resourcepool_mapper)
\r
188 ocloudModel.Resource,
\r
191 "resourceTypes": relationship(resourcetype_mapper),
\r
192 "resourcePools": relationship(resourcepool_mapper)
\r
195 mapper(subModel.Subscription, subscription)
\r
196 mapper(confModel.Configuration, configuration)
\r
198 if engine is not None:
\r
199 wait_for_metadata_ready(engine)
\r