import json
import logging
-from lcm.pub.database.models import NfInstModel, VmInstModel
+from lcm.pub.database.models import NfInstModel
from lcm.pub.msapi.gvnfmdriver import apply_grant_to_nfvo
+from lcm.pub.utils.values import ignore_case_get
+from lcm.nf.const import GRANT_TYPE
logger = logging.getLogger(__name__)
-def grant_resource(nf_inst_id, job_id):
+def grant_resource(data, nf_inst_id, job_id, grant_type, vdus):
logger.info("Grant resource begin")
+
content_args = {
'vnfInstanceId': nf_inst_id,
- 'vnfDescriptorId': '',
- 'lifecycleOperation': 'Terminate',
'vnfLcmOpOccId': job_id,
- 'addResource': [],
- 'removeResource': [],
- 'placementConstraint': [],
- 'additionalParam': {}
+ 'vnfdId': None, # TODO
+ 'flavourId': None, # TODO
+ 'operate': grant_type,
+ 'isAutomaticInvocation': True, # TODO
+ 'instantiationLevelId': None, # TODO
+ 'addResources': [],
+ 'tmpResources': [],
+ 'updateResources': [],
+ 'removeResources': [],
+ 'placementConstraints': [],
+ 'vimConstraints': [],
+ 'additionalParams': {},
+ '_links': None # TODO
}
- vdus = VmInstModel.objects.filter(instid=nf_inst_id, is_predefined=1)
- res_index = 1
- for vdu in vdus:
- res_def = {
- 'type': 'VDU',
- 'resDefId': str(res_index),
- 'resDesId': vdu.resouceid}
- content_args['removeResource'].append(res_def)
- res_index += 1
+ if grant_type == GRANT_TYPE.TERMINATE:
+ res_index = 1
+ for vdu in vdus:
+ res_def = {
+ 'id': str(res_index),
+ 'type': 'COMPUTE',
+ 'vduId': None,
+ 'resourceTemplateId': None,
+ 'resource': {
+ 'vimConnectionId': None,
+ 'resourceProviderId': None,
+ 'resourceid': vdu.resourceid,
+ 'vimLevelResourceType': None
+ }
+ }
+ content_args['removeResources'].append(res_def)
+ res_index += 1
+ content_args['additionalParams']['vimid'] = vdus[0].vimid
+ elif grant_type == GRANT_TYPE.INSTANTIATE:
+ vim_id = ignore_case_get(ignore_case_get(data, "additionalParams"), "vimId")
+ res_index = 1
+ for vdu in vdus:
+ res_def = {
+ 'id': str(res_index),
+ 'type': 'COMPUTE',
+ 'vduId': None,
+ 'resourceTemplateId': None, # TODO: shall be present for the planned creation of new resources.
+ 'resource': None
+ }
+ content_args['addResources'].append(res_def)
+ res_index += 1
+ content_args['additionalParams']['vimid'] = vim_id
+ elif grant_type == GRANT_TYPE.OPERATE:
+ res_index = 1
+ for vdu in vdus:
+ res_def = {
+ 'id': str(res_index),
+ 'type': 'COMPUTE',
+ 'vduId': None,
+ 'resourceTemplateId': None,
+ 'resource': {
+ 'vimConnectionId': None,
+ 'resourceProviderId': None,
+ 'resourceid': vdu.resourceid,
+ 'vimLevelResourceType': None
+ }
+ }
+ content_args['updateResources'].append(res_def)
+ res_index += 1
+ content_args['additionalParams']['vimid'] = vdus[0].vimid
vnfInsts = NfInstModel.objects.filter(nfinstid=nf_inst_id)
- content_args['additionalParam']['vnfmid'] = vnfInsts[0].vnfminstid
- content_args['additionalParam']['vimid'] = vdus[0].vimid
+ content_args['additionalParams']['vnfmid'] = vnfInsts[0].vnfminstid
logger.info('Grant request data=%s' % content_args)
apply_result = apply_grant_to_nfvo(json.dumps(content_args))
- logger.info("Grant resource end, response: %s" % apply_result)
+ return apply_result