.DeploymentManagerSqlAlchemyRepository(self.session)\r
self.nfdeployment_descs = dms_repository\\r
.NfDeploymentDescSqlAlchemyRepository(self.session)\r
+ self.nfdeployments = dms_repository\\r
+ .NfDeploymentSqlAlchemyRepository(self.session)\r
+ self.ocloudvresources = dms_repository\\r
+ .NfOCloudVResourceSqlAlchemyRepository(self.session)\r
return super().__enter__()\r
\r
def __exit__(self, *args):\r
for entry in self.nfdeployment_descs.seen:\r
while entry.events:\r
yield entry.events.pop(0)\r
+ for entry in self.nfdeployments.seen:\r
+ while entry.events:\r
+ yield entry.events.pop(0)\r
+ for entry in self.ocloudvresources.seen:\r
+ while entry.events:\r
+ yield entry.events.pop(0)\r
self.session.query(dms.NfDeploymentDesc).filter_by(
id=nfdeployment_desc_id
).delete()
+
+
+class NfDeploymentSqlAlchemyRepository(
+ dms_repo.NfDeploymentRepository):
+
+ def __init__(self, session):
+ super().__init__()
+ self.session = session
+
+ def _add(self, nfdeployment: dms.NfDeployment):
+ self.session.add(nfdeployment)
+
+ def _get(self, nfdeployment_id) -> dms.NfDeployment:
+ return self.session.query(dms.NfDeployment).filter_by(
+ id=nfdeployment_id).first()
+
+ def _list(self) -> List[dms.NfDeployment]:
+ return self.session.query()
+
+ def _update(self, nfdeployment_id, **kwargs):
+ self.session.query(dms.NfDeployment).filter_by(
+ id=nfdeployment_id).update(**kwargs)
+
+ def _delete(self, nfdeployment_id):
+ self.session.query(dms.NfDeployment).filter_by(
+ id=nfdeployment_id
+ ).delete()
+
+
+class NfOCloudVResourceSqlAlchemyRepository(
+ dms_repo.NfOCloudVResourceRepository):
+
+ def __init__(self, session):
+ super().__init__()
+ self.session = session
+
+ def _add(self, nfocloudvres: dms.NfOCloudVResource):
+ self.session.add(nfocloudvres)
+
+ def _get(self, nfocloudvres_id) -> dms.NfOCloudVResource:
+ return self.session.query(dms.NfOCloudVResource).filter_by(
+ id=nfocloudvres_id).first()
+
+ def _list(self) -> List[dms.NfOCloudVResource]:
+ return self.session.query()
+
+ def _update(self, nfocloudvres, **kwargs):
+ self.session.query(dms.NfOCloudVResource).filter_by(
+ id=nfocloudvres).update(**kwargs)
+
+ def _delete(self, nfocloudvres):
+ self.session.query(dms.NfOCloudVResource).filter_by(
+ id=nfocloudvres
+ ).delete()
# Column("extensions", String(1024))\r
)\r
\r
+nfDeployment = Table(\r
+ "nfDeployment",\r
+ metadata,\r
+ Column("updatetime", DateTime),\r
+ Column("createtime", DateTime),\r
+ Column("hash", String(255)),\r
+ Column("version_number", Integer),\r
+\r
+ Column("id", String(255), primary_key=True),\r
+ Column("deploymentManagerId", String(255)),\r
+ Column("name", String(255)),\r
+ Column("description", String(255)),\r
+ Column("descriptorId", String(255)),\r
+ Column("parentDeploymentId", String(255)),\r
+ Column("status", Integer)\r
+)\r
+\r
+nfOCloudVResource = Table(\r
+ "nfOcloudVRes",\r
+ metadata,\r
+ Column("updatetime", DateTime),\r
+ Column("createtime", DateTime),\r
+ Column("hash", String(255)),\r
+ Column("version_number", Integer),\r
+\r
+ Column("id", String(255), primary_key=True),\r
+ Column("deploymentManagerId", String(255)),\r
+ Column("name", String(255)),\r
+ Column("description", String(255)),\r
+ Column("descriptorId", String(255)),\r
+ Column("vresourceType", String(255)),\r
+ Column("status", Integer),\r
+ Column("metadata", String(2048)),\r
+ Column("nfDeploymentId", String(255))\r
+)\r
+\r
\r
def start_o2dms_mappers(engine=None):\r
logger.info("Starting O2 DMS mappers")\r
\r
mapper(dmsModel.NfDeploymentDesc, nfDeploymentDesc)\r
+ mapper(dmsModel.NfDeployment, nfDeployment)\r
+ mapper(dmsModel.NfOCloudVResource, nfOCloudVResource)\r
\r
if engine is not None:\r
metadata.create_all(engine)\r
self.inputParams = inputParams\r
self.outputParams = outputParams\r
# self.extensions = []\r
+\r
+\r
+class NfDeployment(AgRoot):\r
+ def __init__(self, id: str, name: str, dmsId: str, description: str = '',\r
+ descriptorId: str = '', parentId: str = '',) -> None:\r
+ super().__init__()\r
+ self.id = id\r
+ self.version_number = 0\r
+ self.deploymentManagerId = dmsId\r
+ self.name = name\r
+ self.description = description\r
+ self.descriptorId = descriptorId\r
+ self.parentDeploymentId = parentId\r
+ self.status = 0\r
+\r
+\r
+class NfOCloudVResource(AgRoot):\r
+ def __init__(self, id: str, name: str, dmsId: str, description: str = '',\r
+ descriptorId: str = '', nfDeploymentId: str = '',\r
+ vresourceType: int = 0,) -> None:\r
+ super().__init__()\r
+ self.id = id\r
+ self.version_number = 0\r
+ self.deploymentManagerId = dmsId\r
+ self.name = name\r
+ self.description = description\r
+ self.descriptorId = descriptorId\r
+ self.nfDeploymentId = nfDeploymentId\r
+ self.vresourceType = vresourceType\r
+ self.status = 0\r
+ self.metadata = []\r
from o2dms.domain import dms\r
\r
\r
+class NfDeploymentRepository(abc.ABC):\r
+ def __init__(self):\r
+ self.seen = set() # type: Set[dms.NfDeployment]\r
+\r
+ def add(self, nfdeployment: dms.NfDeployment):\r
+ self._add(nfdeployment)\r
+ self.seen.add(nfdeployment)\r
+\r
+ def get(self, nfdeployment_id) -> dms.NfDeployment:\r
+ nfdeployment = self._get(nfdeployment_id)\r
+ if nfdeployment:\r
+ self.seen.add(nfdeployment)\r
+ return nfdeployment\r
+\r
+ def list(self) -> List[dms.NfDeployment]:\r
+ return self._list()\r
+\r
+ def update(self, id, **kwargs):\r
+ self._update(id, **kwargs)\r
+\r
+ def delete(self, nfdeployment_id):\r
+ self._delete(nfdeployment_id)\r
+\r
+ @abc.abstractmethod\r
+ def _add(self, nfdeployment: dms.NfDeployment):\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _get(self, nfdeployment_id) -> dms.NfDeployment:\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _update(self, id, **kwargs):\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _delete(self, nfdeployment_id):\r
+ raise NotImplementedError\r
+\r
+\r
class NfDeploymentDescRepository(abc.ABC):\r
def __init__(self):\r
self.seen = set() # type: Set[dms.NfDeploymentDesc]\r
raise NotImplementedError\r
\r
@abc.abstractmethod\r
- def _update(self, nfdeployment_descriptor: dms.NfDeploymentDesc):\r
+ def _update(self, id, **kwargs):\r
raise NotImplementedError\r
\r
@abc.abstractmethod\r
def _delete(self, nfdeployment_descriptor_id):\r
raise NotImplementedError\r
+\r
+\r
+class NfOCloudVResourceRepository(abc.ABC):\r
+ def __init__(self):\r
+ self.seen = set() # type: Set[dms.NfOCloudVResource]\r
+\r
+ def add(self, nfocloudvres: dms.NfOCloudVResource):\r
+ self._add(nfocloudvres)\r
+ self.seen.add(nfocloudvres)\r
+\r
+ def get(self, nfocloudvres_id) -> dms.NfOCloudVResource:\r
+ nfocloudvres = self._get(nfocloudvres_id)\r
+ if nfocloudvres:\r
+ self.seen.add(nfocloudvres)\r
+ return nfocloudvres\r
+\r
+ def list(self) -> List[dms.NfOCloudVResource]:\r
+ return self._list()\r
+\r
+ def update(self, nfocloudvres_id, **kwargs):\r
+ self._update(nfocloudvres_id, **kwargs)\r
+\r
+ def delete(self, nfocloudvres_id):\r
+ self._delete(nfocloudvres_id)\r
+\r
+ @abc.abstractmethod\r
+ def _add(self, nfocloudvres: dms.NfOCloudVResource):\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _get(self, nfocloudvres_id) -> dms.NfOCloudVResource:\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _update(self, nfocloudvres_id, **kwargs):\r
+ raise NotImplementedError\r
+\r
+ @abc.abstractmethod\r
+ def _delete(self, nfocloudvres_id):\r
+ raise NotImplementedError\r
class DmsLcmNfDeploymentDescriptorDTO:
- dmslcm_NfDeploymentDescriptor_get = api_dms_lcm_v1.model(
+ NfDeploymentDescriptor_get = api_dms_lcm_v1.model(
"NfDeploymentDescriptorGetDto",
{
'id': fields.String(
)
NfDeploymentDescriptor_update = api_dms_lcm_v1.model(
- "NfDeploymentDescriptorCreateDto",
+ "NfDeploymentDescriptorUpdateDto",
{
'name': fields.String,
'description': fields.String,
'outputParams': fields.String
}
)
+
+
+class DmsLcmNfDeploymentDTO:
+ NfDeployment_get = api_dms_lcm_v1.model(
+ "NfDeploymentGetDto",
+ {
+ 'id': fields.String(
+ required=True,
+ description='NfDeployment ID'),
+ 'name': fields.String,
+ 'description': fields.String,
+ 'descriptorId': fields.String,
+ 'parentDeploymentId': fields.String,
+ 'status': fields.Integer
+ }
+ )
+
+ NfDeployment_create = api_dms_lcm_v1.model(
+ "NfDeploymentCreateDto",
+ {
+ 'name': fields.String,
+ 'description': fields.String,
+ 'descriptorId': fields.String,
+ 'parentDeploymentId': fields.String
+ }
+ )
+
+ NfDeployment_create_post_resp = api_dms_lcm_v1.model(
+ "NfDeploymentCreateRespDto",
+ {
+ 'id': fields.String(
+ required=True, description='NfDeployment ID'),
+ }
+ )
+
+ NfDeployment_update = api_dms_lcm_v1.model(
+ "NfDeploymentUpdateDto",
+ {
+ 'name': fields.String,
+ 'description': fields.String,
+ 'descriptorId': fields.String,
+ 'parentDeploymentId': fields.String
+ }
+ )
+
+
+class DmsLcmNfOCloudVResourceDTO:
+ NfOCloudVResource_get = api_dms_lcm_v1.model(
+ "NfOCloudVResourceGetDto",
+ {
+ 'id': fields.String(
+ required=True,
+ description='NfOCloudVResource ID'),
+ 'name': fields.String,
+ 'description': fields.String,
+ 'descriptorId': fields.String,
+ 'vresourceType': fields.String,
+ 'status': fields.Integer,
+ 'metadata': fields.String
+ }
+ )
import uuid\r
from o2common.service import unit_of_work\r
from o2ims.adapter.orm import deploymentmanager\r
-from o2dms.adapter.orm import nfDeploymentDesc\r
+from o2dms.adapter.orm import nfDeploymentDesc, nfDeployment, nfOCloudVResource\r
from o2dms.views.dms_dto import DmsLcmNfDeploymentDescriptorDTO\r
-from o2dms.domain.dms import NfDeploymentDesc\r
+from o2dms.views.dms_dto import DmsLcmNfDeploymentDTO\r
+from o2dms.domain.dms import NfDeploymentDesc, NfDeployment\r
\r
\r
def deployment_managers(uow: unit_of_work.AbstractUnitOfWork):\r
uow.nfdeployment_descs.delete(nfdeploymentdescriptorid)\r
uow.commit()\r
return True\r
+\r
+\r
+def lcm_nfdeployment_list(\r
+ deploymentManagerID: str, uow: unit_of_work.AbstractUnitOfWork):\r
+ with uow:\r
+ res = uow.session.execute(select(nfDeployment).where(\r
+ nfDeployment.c.deploymentManagerId == deploymentManagerID))\r
+ return [dict(r) for r in res]\r
+\r
+\r
+def lcm_nfdeployment_one(\r
+ nfdeploymentid: str, uow: unit_of_work.AbstractUnitOfWork):\r
+ with uow:\r
+ res = uow.session.execute(select(nfDeployment).where(\r
+ nfDeployment.c.id == nfdeploymentid))\r
+ first = res.first()\r
+ return None if first is None else dict(first)\r
+\r
+\r
+def lcm_nfdeployment_create(\r
+ deploymentManagerId: str,\r
+ input: DmsLcmNfDeploymentDTO.\r
+ NfDeployment_create,\r
+ uow: unit_of_work.AbstractUnitOfWork):\r
+\r
+ id = str(uuid.uuid4())\r
+ entity = NfDeployment(\r
+ id, input['name'], deploymentManagerId, input['description'],\r
+ input['descriptorId'], input['parentDeploymentId'])\r
+ with uow:\r
+ uow.nfdeployments.add(entity)\r
+ uow.commit()\r
+ return id\r
+\r
+\r
+def lcm_nfdeployment_update(\r
+ nfdeploymentdescriptorid: str,\r
+ input: DmsLcmNfDeploymentDTO.NfDeployment_update,\r
+ uow: unit_of_work.AbstractUnitOfWork):\r
+\r
+ with uow:\r
+ entity = uow.nfdeployments.get(nfdeploymentdescriptorid)\r
+ entity.name = input['name']\r
+ entity.description = input['description']\r
+ entity.inputParams = input['descriptorId']\r
+ entity.outputParams = input['parentDeploymentId']\r
+ uow.commit()\r
+ return True\r
+\r
+\r
+def lcm_nfdeployment_delete(\r
+ nfdeploymentdescriptorid: str, uow: unit_of_work.AbstractUnitOfWork):\r
+\r
+ with uow:\r
+ uow.nfdeployments.delete(nfdeploymentdescriptorid)\r
+ uow.commit()\r
+ return True\r
+\r
+\r
+def lcm_nfocloudvresource_list(\r
+ nfDeploymentId: str, uow: unit_of_work.AbstractUnitOfWork):\r
+ with uow:\r
+ res = uow.session.execute(select(nfOCloudVResource).where(\r
+ nfOCloudVResource.c.nfDeploymentId == nfDeploymentId))\r
+ return [dict(r) for r in res]\r
+\r
+\r
+def lcm_nfocloudvresource_one(\r
+ ocloudvresourceId: str, uow: unit_of_work.AbstractUnitOfWork):\r
+ with uow:\r
+ res = uow.session.execute(select(nfOCloudVResource).where(\r
+ nfOCloudVResource.c.id == ocloudvresourceId))\r
+ first = res.first()\r
+ return None if first is None else dict(first)\r
from o2common.config import config
from o2dms.views.dms_dto import DmsDTO, DmsLcmNfDeploymentDescriptorDTO
+from o2dms.views.dms_dto import DmsLcmNfDeploymentDTO
+from o2dms.views.dms_dto import DmsLcmNfOCloudVResourceDTO
from o2dms.views import dms_lcm_view, api_dms_lcm_v1
apibase = config.get_o2dms_api_base()
@api_dms_lcm_v1.response(404, 'DMS LCM not found')
class DmsLcmNfDeploymentDescListRouter(Resource):
- model = DmsLcmNfDeploymentDescriptorDTO.dmslcm_NfDeploymentDescriptor_get
+ model = DmsLcmNfDeploymentDescriptorDTO.NfDeploymentDescriptor_get
createdto = DmsLcmNfDeploymentDescriptorDTO.NfDeploymentDescriptor_create
post_resp = DmsLcmNfDeploymentDescriptorDTO.\
@api_dms_lcm_v1.response(404, 'DMS LCM not found')
class DmsLcmNfDeploymentDescGetRouter(Resource):
- model = DmsLcmNfDeploymentDescriptorDTO.dmslcm_NfDeploymentDescriptor_get
+ model = DmsLcmNfDeploymentDescriptorDTO.NfDeploymentDescriptor_get
updatedto = DmsLcmNfDeploymentDescriptorDTO.\
NfDeploymentDescriptor_update
return '', 204
+# LCM services #
+@api_dms_lcm_v1\
+ .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
+ "NfDeployment")
+@api_dms_lcm_v1\
+ .param('deploymentManagerID', 'ID of the deployment manager')
+@api_dms_lcm_v1.response(404, 'DMS LCM not found')
+class DmsLcmNfDeploymentListRouter(Resource):
+
+ model = DmsLcmNfDeploymentDTO.NfDeployment_get
+
+ createdto = DmsLcmNfDeploymentDTO.NfDeployment_create
+ post_resp = DmsLcmNfDeploymentDTO.\
+ NfDeployment_create_post_resp
+
+ @api_dms_lcm_v1.doc('Get a list of NfDeployment')
+ @api_dms_lcm_v1.marshal_list_with(model)
+ def get(self, deploymentManagerID):
+ return dms_lcm_view.lcm_nfdeployment_list(
+ deploymentManagerID, bus.uow)
+
+ @api_dms_lcm_v1.doc('Create a NfDeployment')
+ @api_dms_lcm_v1.expect(createdto)
+ @api_dms_lcm_v1.marshal_with(post_resp, code=201)
+ def post(self, deploymentManagerID):
+ data = api_dms_lcm_v1.payload
+ id = dms_lcm_view.lcm_nfdeployment_create(
+ deploymentManagerID, data, bus.uow)
+ return {"id": id}, 201
+
+
+@api_dms_lcm_v1\
+ .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
+ "NfDeployment/<nfDeploymentId>")
+@api_dms_lcm_v1\
+ .param('deploymentManagerID', 'ID of the deployment manager')
+@api_dms_lcm_v1.param('nfDeploymentId',
+ 'ID of the NfDeployment')
+@api_dms_lcm_v1.response(404, 'DMS LCM not found')
+class DmsLcmNfDeploymentGetRouter(Resource):
+
+ model = DmsLcmNfDeploymentDTO.NfDeployment_get
+ updatedto = DmsLcmNfDeploymentDTO.\
+ NfDeployment_update
+
+ @api_dms_lcm_v1.doc('Get a NfDeploymentDescriptor')
+ @api_dms_lcm_v1.marshal_with(model)
+ def get(self, nfDeploymentId, deploymentManagerID):
+ result = dms_lcm_view\
+ .lcm_nfdeployment_one(nfDeploymentId, bus.uow)
+ if result is not None:
+ return result
+ api_dms_lcm_v1.abort(
+ 404, "NfDeploymentDescriptor {} doesn't exist".format(
+ nfDeploymentId))
+
+ @api_dms_lcm_v1.doc('Update a NfDeployment')
+ @api_dms_lcm_v1.expect(updatedto)
+ def put(self, nfDeploymentId, deploymentManagerID):
+ data = api_dms_lcm_v1.payload
+ dms_lcm_view.lcm_nfdeployment_update(
+ nfDeploymentId, data, bus.uow)
+ return {}, 201
+
+ @api_dms_lcm_v1.doc('Delete NfDeployment by ID')
+ @api_dms_lcm_v1.response(204, 'NfDeployment deleted')
+ def delete(self, nfDeploymentId, deploymentManagerID):
+ with bus.uow:
+ bus.uow.nfdeployments.delete(nfDeploymentId)
+ bus.uow.commit()
+ return '', 204
+
+
+# LCM services #
+@api_dms_lcm_v1\
+ .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
+ "NfDeployment/<nfDeploymentId>/NfOCloudVirtualResource")
+@api_dms_lcm_v1\
+ .param('deploymentManagerID', 'ID of the Deployment Manager')
+@api_dms_lcm_v1.param('nfDeploymentId',
+ 'ID of the NfDeployment')
+@api_dms_lcm_v1.response(404, 'DMS LCM not found')
+class DmsLcmNfOCloudVResListRouter(Resource):
+
+ model = DmsLcmNfOCloudVResourceDTO.NfOCloudVResource_get
+
+ @api_dms_lcm_v1.doc('Get a list of NfOCloudVirtualResource')
+ @api_dms_lcm_v1.marshal_list_with(model)
+ def get(self, nfDeploymentId, deploymentManagerID):
+ return dms_lcm_view.lcm_nfocloudvresource_list(
+ nfDeploymentId, bus.uow)
+
+
+@api_dms_lcm_v1\
+ .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
+ "NfDeployment/<nfDeploymentId>"
+ "NfOCloudVirtualResource/<nfOCloudVirtualResourceId>")
+@api_dms_lcm_v1\
+ .param('deploymentManagerID', 'ID of the deployment manager')
+@api_dms_lcm_v1.param('nfDeploymentId',
+ 'ID of the NfDeployment')
+@api_dms_lcm_v1.param('nfOCloudVirtualResourceId',
+ 'ID of the NfOCloudVirtualResource')
+@api_dms_lcm_v1.response(404, 'DMS LCM not found')
+class DmsLcmNfOCloudVResGetRouter(Resource):
+
+ model = DmsLcmNfOCloudVResourceDTO.NfOCloudVResource_get
+
+ @api_dms_lcm_v1.doc('Get a NfOCloudVirtualResource')
+ @api_dms_lcm_v1.marshal_with(model)
+ def get(self, nfOCloudVirtualResourceId,
+ nfDeploymentId, deploymentManagerID):
+ result = dms_lcm_view\
+ .lcm_nfocloudvresource_one(nfOCloudVirtualResourceId, bus.uow)
+ if result is not None:
+ return result
+ api_dms_lcm_v1.abort(
+ 404, "NfOCloudVirtualResource {} doesn't exist".format(
+ nfOCloudVirtualResourceId))
+
+
def configure_namespace(app, bus_new):
app.add_namespace(api_dms_lcm_v1, path=apibase)