# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
import json
import logging
-from lcm.ns.const import OWNER_TYPE
-from lcm.pub.database.models import NSInstModel, NfInstModel, VLInstModel, CPInstModel, VNFFGInstModel
+from lcm.ns.const import NS_INSTANCE_BASE_URI
+from lcm.ns.enum import OWNER_TYPE
+from lcm.pub.database.models import NSInstModel
+from lcm.pub.database.models import NfInstModel
+from lcm.pub.database.models import VLInstModel
+from lcm.pub.database.models import CPInstModel
+from lcm.pub.database.models import VNFFGInstModel
+from lcm.pub.database.models import PNFInstModel
logger = logging.getLogger(__name__)
def __init__(self, ns_filter=None):
self.ns_filter = ns_filter
- def get_ns_info(self):
+ def get_ns_info(self, is_sol=False):
ns_insts = None
if self.ns_filter and "ns_inst_id" in self.ns_filter:
ns_inst_id = self.ns_filter["ns_inst_id"]
ns_insts = NSInstModel.objects.filter(id=ns_inst_id)
else:
ns_insts = NSInstModel.objects.all()
+ return [self.get_single_ns_info(ns_inst, is_sol) for ns_inst in ns_insts]
- return [self.get_single_ns_info(ns_inst) for ns_inst in ns_insts]
-
- def get_single_ns_info(self, ns_inst):
+ def get_single_ns_info(self, ns_inst, is_sol=False):
+ if is_sol:
+ nsInstance = {}
+ nsInstance['id'] = ns_inst.id
+ if ns_inst.name:
+ nsInstance['nsInstanceName'] = ns_inst.name
+ if ns_inst.description:
+ nsInstance['nsInstanceDescription'] = ns_inst.description
+ if ns_inst.nsd_id:
+ nsInstance['nsdId'] = ns_inst.nsd_id
+ if ns_inst.nsd_invariant_id:
+ nsInstance['nsdInvariantId'] = ns_inst.nsd_invariant_id
+ if ns_inst.nspackage_id:
+ nsInstance['nsdInfoId'] = ns_inst.nspackage_id
+ if ns_inst.flavour_id:
+ nsInstance['flavourId'] = ns_inst.flavour_id
+ if ns_inst.status:
+ nsInstance['nsState'] = ns_inst.status
+ # todo 'nsScaleStatus':{}
+ # todo 'additionalAffinityOrAntiAffinityRule':{}
+ logger.debug(" test ")
+ vnf_instance_list = self.get_vnf_infos(ns_inst.id, is_sol)
+ if vnf_instance_list:
+ nsInstance['vnfInstance'] = vnf_instance_list
+ # todo 'pnfInfo': self.get_pnf_infos(ns_inst.id,is_sol),
+ vl_list = self.get_vl_infos(ns_inst.id, is_sol)
+ if vl_list:
+ nsInstance['virtualLinkInfo'] = vl_list
+ # todo 'vnffgInfo': self.get_vnffg_infos(ns_inst.id, ns_inst.nsd_model),
+ # todo 'sapInfo':{},
+ # todo nestedNsInstanceId
+ logger.debug(" test ")
+ nsInstance['_links'] = {
+ 'self': {'href': NS_INSTANCE_BASE_URI % ns_inst.id},
+ 'instantiate': {'href': NS_INSTANCE_BASE_URI % ns_inst.id + '/instantiate'},
+ 'terminate': {'href': NS_INSTANCE_BASE_URI % ns_inst.id + '/terminate'},
+ 'update': {'href': NS_INSTANCE_BASE_URI % ns_inst.id + '/update'},
+ 'scale': {'href': NS_INSTANCE_BASE_URI % ns_inst.id + '/scale'},
+ 'heal': {'href': NS_INSTANCE_BASE_URI % ns_inst.id + '/heal'}
+ }
+ logger.debug(" test ")
+ return nsInstance
return {
'nsInstanceId': ns_inst.id,
'nsName': ns_inst.name,
'description': ns_inst.description,
'nsdId': ns_inst.nsd_id,
'nsdInvariantId': ns_inst.nsd_invariant_id,
- 'vnfInfo': self.get_vnf_infos(ns_inst.id),
- 'vlInfo': self.get_vl_infos(ns_inst.id),
- 'vnffgInfo': self.get_vnffg_infos(ns_inst.id, ns_inst.nsd_model),
+ 'vnfInfo': self.get_vnf_infos(ns_inst.id, is_sol),
+ 'pnfInfo': self.get_pnf_infos(ns_inst.id),
+ 'vlInfo': self.get_vl_infos(ns_inst.id, is_sol),
+ 'vnffgInfo': self.get_vnffg_infos(ns_inst.id, ns_inst.nsd_model, is_sol),
'nsState': ns_inst.status}
@staticmethod
- def get_vnf_infos(ns_inst_id):
+ def get_vnf_infos(ns_inst_id, is_sol):
vnfs = NfInstModel.objects.filter(ns_inst_id=ns_inst_id)
+ if is_sol:
+ return [{
+ 'id': vnf.nfinstid,
+ 'vnfInstanceName': vnf.nf_name,
+ 'vnfdId': vnf.template_id,
+ 'vnfProvider': vnf.vendor,
+ 'vnfSoftwareVersion': vnf.version,
+ 'vnfProductName': vnf.nf_name, # todo
+ 'vnfdVersion': vnf.version, # todo
+ 'vnfPkgId': vnf.package_id,
+ 'instantiationState': vnf.status
+ } for vnf in vnfs]
return [{
'vnfInstanceId': vnf.nfinstid,
'vnfInstanceName': vnf.nf_name,
'vnfProfileId': vnf.vnf_id} for vnf in vnfs]
- def get_vl_infos(self, ns_inst_id):
+ def get_vl_infos(self, ns_inst_id, is_sol):
vls = VLInstModel.objects.filter(ownertype=OWNER_TYPE.NS, ownerid=ns_inst_id)
+ if is_sol:
+ return [
+ {
+ 'id': vl.vlinstanceid,
+ 'nsVirtualLinkDescId': vl.vldid,
+ 'nsVirtualLinkProfileId': vl.vldid,
+ 'vlInstanceName': vl.vlinstancename,
+ 'resourceHandle': {
+ 'vimId': vl.vimId,
+ 'resourceId': vl.relatednetworkid,
+ 'vimLevelResourceType': vl.vltype
+ },
+ # todo 'linkPort': self.get_cp_infos(vl.vlinstanceid,is_sol),
+ 'networkId': vl.relatednetworkid,
+ 'subNetworkid': vl.relatedsubnetworkid
+ } for vl in vls]
+
return [{
'vlInstanceId': vl.vlinstanceid,
'vlInstanceName': vl.vlinstancename,
'cpInstanceName': cp.cpname,
'cpdId': cp.cpdid} for cp in cps]
- def get_vnffg_infos(self, ns_inst_id, nsd_model):
+ def get_vnffg_infos(self, ns_inst_id, nsd_model, is_sol):
vnffgs = VNFFGInstModel.objects.filter(nsinstid=ns_inst_id)
return [{
'vnffgInstanceId': vnffg.vnffginstid,
'vnfId': self.convert_string_to_list(vnffg.vnflist),
- 'pnfId': self.get_pnf_infos(nsd_model),
+ 'pnfId': self.get_pnf_ids(nsd_model),
'virtualLinkId': self.convert_string_to_list(vnffg.vllist),
'cpId': self.convert_string_to_list(vnffg.cplist),
'nfp': self.convert_string_to_list(vnffg.fplist)} for vnffg in vnffgs]
@staticmethod
- def get_pnf_infos(nsd_model):
+ def get_pnf_ids(nsd_model):
context = json.loads(nsd_model)
pnfs = context['pnfs']
return [pnf['pnf_id'] for pnf in pnfs]
if not detail_id_string:
return None
return detail_id_string.split(',')
+
+ @staticmethod
+ def get_pnf_infos(ns_instance_id):
+ pnfs = PNFInstModel.objects.filter(nsInstances__contains=ns_instance_id)
+ return [pnf.__dict__ for pnf in pnfs]