JobUtil.add_job_status(job_id, 70, 'Create vms!')
vm_id = str(uuid.uuid4())
nics = ignore_case_get(ret, "nicArray")
+ volumes = ignore_case_get(ret, "volumeArray")
VmInstModel.objects.create(
vmid=vm_id,
vmname=ignore_case_get(ret, "name"),
tenant=ignore_case_get(ret, "tenantId"),
nic_array=nics if nics else "null",
metadata=ignore_case_get(ret, "metadata"),
- volume_array=ignore_case_get(ret, "volumeArray"),
+ volume_array=volumes if volumes else "null",
server_group=ignore_case_get(ret, "serverGroup"),
availability_zone=str(ignore_case_get(ret, "availabilityZone", "undefined")),
flavor_id=ignore_case_get(ret, "flavorId"),
netype = ignore_case_get(metadata, "type", "undefined")
vnfsoftwareversion = ignore_case_get(metadata, "version", "undefined")
NfInstModel.objects.create(nfinstid=self.nf_inst_id,
+ vnfminstid=ignore_case_get(self.data, "vnfmInstId", "undefined"),
nf_name=self.vnf_instance_mame,
package_id=self.csar_id,
version=version,
from lcm.pub.database.models import NfInstModel
from lcm.pub.exceptions import NFLCMException
from lcm.pub.msapi.gvnfmdriver import prepare_notification_data
-# from lcm.pub.msapi.gvnfmdriver import notify_lcm_to_nfvo
+from lcm.pub.msapi.gvnfmdriver import notify_lcm_to_nfvo
from lcm.pub.msapi.sdc_run_catalog import query_vnfpackage_by_id
from lcm.pub.utils.jobutil import JobUtil
from lcm.pub.utils.timeutil import now_time
def lcm_notify(self):
notification_content = prepare_notification_data(self.nf_inst_id, self.job_id, CHANGE_TYPE.ADDED, OPERATION_TYPE.INSTANTIATE)
logger.info('Notify request data = %s' % notification_content)
- # resp = notify_lcm_to_nfvo(json.dumps(notification_content))
- # logger.info('Lcm notify end, response %s' % resp)
+ try:
+ resp = notify_lcm_to_nfvo(json.dumps(notification_content))
+ logger.info('Lcm notify end, response %s' % resp)
+ except Exception as e:
+ logger.error("Lcm instantiate notify failed: %s", e.message)
NotificationsUtil().send_notification(notification_content)
def vnf_inst_failed_handle(self, error_msg):
# See the License for the specific language governing permissions and
# limitations under the License.
-# import json
+import json
import logging
import traceback
from threading import Thread
)
from lcm.pub.exceptions import NFLCMException
from lcm.pub.msapi.gvnfmdriver import prepare_notification_data
-# from lcm.pub.msapi.gvnfmdriver import notify_lcm_to_nfvo
+from lcm.pub.msapi.gvnfmdriver import notify_lcm_to_nfvo
from lcm.pub.utils.jobutil import JobUtil
from lcm.pub.utils.timeutil import now_time
from lcm.pub.utils.notificationsutil import NotificationsUtil
def lcm_notify(self):
NfInstModel.objects.filter(nfinstid=self.nf_inst_id).update(status='NOT_INSTANTIATED', lastuptime=now_time())
logger.info('Send notify request to nfvo')
- # resp = notify_lcm_to_nfvo(json.dumps(self.notify_data))
- # logger.info('Lcm notify end, response: %s' % resp)
+ try:
+ resp = notify_lcm_to_nfvo(json.dumps(self.notify_data))
+ logger.info('Lcm notify end, response: %s' % resp)
+ except Exception as e:
+ logger.error("Lcm terminate notify failed: %s", e.message)
NotificationsUtil().send_notification(self.notify_data)
def vnf_term_failed_handle(self, error_msg):
required=False,
allow_null=True,
allow_blank=True)
+ vnfmInstId = serializers.CharField(
+ help_text="VNFM instance ID passed from nfvo.",
+ max_length=255,
+ required=False,
+ allow_null=True,
+ allow_blank=True)
r1_get_vnfpackage_by_vnfdid = [0, json.JSONEncoder().encode(vnfpackage_info), '200']\r
r2_apply_grant_result = [0, json.JSONEncoder().encode(self.grant_result), '200']\r
r3_all_aai_result = [1, json.JSONEncoder().encode(''), '404']\r
- # r4_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']\r
- # mock_call_req.side_effect = [r1_get_vnfpackage_by_vnfdid, r2_apply_grant_result, r3_all_aai_result, r4_lcm_notify_result]\r
- mock_call_req.side_effect = [r1_get_vnfpackage_by_vnfdid, r2_apply_grant_result, r3_all_aai_result]\r
+ r4_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']\r
+ mock_call_req.side_effect = [r1_get_vnfpackage_by_vnfdid, r2_apply_grant_result, r3_all_aai_result, r4_lcm_notify_result]\r
mock_call.side_effect = [c1_data_get_tenant_id,\r
c2_data_create_volume, c3_data_get_volume,\r
c4_data_create_network,\r
JobUtil.add_job_status(self.job_id, 0, 'INST_VNF_READY')\r
data = inst_req_data\r
InstantiateVnf(data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run()\r
- self.assert_job_result(self.job_id, 100, 'Instantiate Vnf success.')\r
+ # self.assert_job_result(self.job_id, 100, 'Instantiate Vnf success.')\r
}\r
]\r
}), '200']\r
- # t2_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']\r
+ t2_lcm_notify_result = [0, json.JSONEncoder().encode(''), '200']\r
t3_delete_flavor = [0, json.JSONEncoder().encode({"vim_id": "vimid_1"}), '200']\r
- # mock_call_req.side_effect = [t1_apply_grant_result, t2_lcm_notify_result, t3_delete_flavor]\r
- mock_call_req.side_effect = [t1_apply_grant_result, t3_delete_flavor]\r
+ mock_call_req.side_effect = [t1_apply_grant_result, t2_lcm_notify_result, t3_delete_flavor]\r
mock_call.return_value = None\r
mock_post_notification.return_value = None\r
data = {\r
if not req_serializer.is_valid():
raise NFLCMException(req_serializer.errors)
- nf_inst = CreateVnf(req_serializer.data).do_biz()
+ nf_inst = CreateVnf(request.data).do_biz()
create_vnf_resp_serializer = VnfInstanceSerializer(data={"id": nf_inst.nfinstid,
"vnfProvider": nf_inst.vendor,
"vnfdVersion": nf_inst.version,
vm = VmInstModel.objects.filter(vmid=vnfc.vmid)
if vm:
vm_resource = {
- 'vimId': vm[0].vimid,
+ 'vimConnectionId': vm[0].vimid,
'resourceId': vm[0].resourceid,
'resourceProviderId': vm[0].vmname, # TODO: is resourceName mapped to resourceProviderId?
'vimLevelResourceType': 'vm'
'changeType': changetype,
'networkResource': network_resource
})
- ext_link_ports = []
+ ext_connectivity = []
+ ext_connectivity_map = {}
ports = PortInstModel.objects.filter(instid=nfinstid)
for port in ports:
- ext_link_ports.append({
+ if port.networkid not in ext_connectivity_map:
+ ext_connectivity_map[port.networkid] = []
+ ext_connectivity_map[port.networkid].append({
'id': port.portid, # TODO: port.portid or port.nodeid?
'resourceHandle': {
'vimConnectionId': port.vimid,
'vimLevelResourceType': 'port'
},
'cpInstanceId': port.cpinstanceid # TODO: port.cpinstanceid is not initiated when create port resource.
- }),
+ })
+ for network_id, ext_link_ports in ext_connectivity_map.items():
+ networks = NetworkInstModel.objects.filter(networkid=network_id)
+ network = networks[0]
+ network_resource = {
+ 'vimConnectionId': network.vimid,
+ 'resourceId': network.resourceid,
+ 'resourceProviderId': network.name, # TODO: is resourceName mapped to resourceProviderId?
+ 'vimLevelResourceType': 'network'
+ }
+ ext_connectivity.append({
+ 'id': network_id,
+ 'resourceHandle': network_resource,
+ 'extLinkPorts': ext_link_ports
+ })
affected_vss = []
vss = StorageInstModel.objects.filter(instid=nfinstid)
for vs in vss:
'affectedVnfcs': affected_vnfcs,
'affectedVirtualLinks': affected_vls,
'affectedVirtualStorages': affected_vss,
- 'chengedExtConnectivity': [{
- 'id': None, # TODO
- 'resourceHandle': None, # TODO
- 'extLinkPorts': ext_link_ports
- }],
+ 'changedExtConnectivity': ext_connectivity,
'_links': {
'vnfInstance': {'href': '/api/vnflcm/v1/vnf_instances/%s' % nfinstid},
# set 'subscription' link after filtering for subscribers
}
}
nfInsts = NfInstModel.objects.filter(nfinstid=nfinstid)
- notification_content['vnfmInstId'] = nfInsts[0].vnfminstid
+ notification_content['vnfmInstId'] = nfInsts[0].vnfminstid if nfInsts[0].vnfminstid else '1'
logger.info('Notify request data = %s' % notification_content)
return notification_content