blob: acc4726f568c7cabb85f869a57996ab6b487aefa [file] [log] [blame]
class OsmUtil():
@staticmethod
def remove_node(descriptor_type, descriptor, node_type, element_id, args):
if descriptor_type == 'nsd':
if 'nsd-catalog' in descriptor:
nsd = descriptor['nsd-catalog']['nsd'][0]
elif 'nsd:nsd-catalog' in descriptor:
nsd = descriptor['nsd:nsd-catalog']['nsd'][0]
if node_type == 'ns_vl':
for k, v in enumerate(nsd['vld']):
if v['id'] == args['id']:
nsd['vld'].pop(k)
elif node_type == 'vnf':
for k, v in enumerate(nsd['constituent-vnfd']):
if str(v['member-vnf-index']) == str(args['member-vnf-index']) and str(v['vnfd-id-ref']) == str(
args['vnfd-id-ref']):
nsd['constituent-vnfd'].pop(k)
for j, vld in enumerate(nsd['vld']):
vld['vnfd-connection-point-ref'] = [item for item in vld['vnfd-connection-point-ref'] if
str(item['member-vnf-index-ref']) != str(
args['member-vnf-index']) or str(
item['vnfd-id-ref']) != str(args['vnfd-id-ref'])]
elif node_type == 'ns_cp':
for vld in nsd['vld']:
if vld['id'] == args['vld_id']:
vld['vnfd-connection-point-ref'] = [item for item in vld['vnfd-connection-point-ref'] if
str(item['member-vnf-index-ref']) != str(
args['member-vnf-index-ref']) or str(
item['vnfd-id-ref']) != str(args['vnfd-id-ref'])]
elif descriptor_type == 'vnfd':
if 'vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd-catalog']['vnfd'][0]
elif 'vnfd:vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd:vnfd-catalog']['vnfd'][0]
if node_type == 'vnf_vl':
vnfd['internal-vld'] = [item for item in vnfd['internal-vld'] if item['id'] != element_id]
if node_type == 'cp':
vnfd['connection-point'] = [item for item in vnfd['connection-point'] if item['name'] != args['name']]
if vnfd['mgmt-interface']['cp'] == args['name']:
del vnfd['mgmt-interface']['cp']
for vdu in vnfd['vdu']:
if 'interface' in vdu:
vdu['interface'] = [item for item in vdu['interface'] if 'external-connection-point-ref' not in item
or ('external-connection-point-ref'in item and item['external-connection-point-ref'] != args['name'])]
if node_type == 'vdu':
vdus = []
for vdu in vnfd['vdu']:
if vdu['name'] != element_id:
vdus.append(vdu)
else:
for intcp in vdu['internal-connection-point']:
for intVld in vnfd['internal-vld']:
intVld['internal-connection-point'] = [item for item in intVld['internal-connection-point']
if item['id-ref'] != intcp['id']]
vnfd['vdu'] = vdus
if node_type == 'int_cp':
OsmUtil.remove_int_cp(element_id, vnfd)
return descriptor
@staticmethod
def update_node(descriptor_type, descriptor, node_type, old, updated):
if descriptor_type == 'nsd':
if 'nsd-catalog' in descriptor:
nsd = descriptor['nsd-catalog']['nsd'][0]
elif 'nsd:nsd-catalog' in descriptor:
nsd = descriptor['nsd:nsd-catalog']['nsd'][0]
if node_type == 'ns_vl':
for k, v in enumerate(nsd['vld']):
if v['id'] == old['id']:
nsd['vld'][k].update(updated)
elif node_type == 'vnf':
for k, v in enumerate(nsd['constituent-vnfd']):
if str(v['member-vnf-index']) == str(old['member-vnf-index']) and str(v['vnfd-id-ref']) == str(
old['vnfd-id-ref']):
print 'update here'
elif descriptor_type == 'vnfd':
if 'vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd-catalog']['vnfd'][0]
elif 'vnfd:vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd:vnfd-catalog']['vnfd'][0]
if node_type == 'vnf_vl':
for k, v in enumerate(vnfd['internal-vld']):
if v['id'] == old['id']:
vnfd['internal-vld'][k].update(updated)
if node_type == 'cp':
for k, v in enumerate(vnfd['connection-point']):
if v['name'] == old['name']:
vnfd['connection-point'][k].update(updated)
for vdu in vnfd['vdu']:
if 'interface' in vdu:
for intf in vdu['interface']:
if 'external-connection-point-ref' in intf and intf['external-connection-point-ref'] == old['name']:
intf['external-connection-point-ref'] = updated['name']
if node_type == 'vdu':
for k, v in enumerate(vnfd['vdu']):
if v['name'] == old['name']:
vnfd['vdu'][k].update(updated)
return descriptor
@staticmethod
def add_base_node(descriptor_type, descriptor, node_type, element_id, args):
if descriptor_type == 'nsd':
if 'nsd-catalog' in descriptor:
nsd = descriptor['nsd-catalog']['nsd'][0]
elif 'nsd:nsd-catalog' in descriptor:
nsd = descriptor['nsd:nsd-catalog']['nsd'][0]
if node_type == 'ns_vl':
nsd['vld'].append({
"vim-network-name": "PUBLIC",
"name": element_id,
"vnfd-connection-point-ref": [],
"mgmt-network": "true",
"type": "ELAN",
"id": element_id
})
if node_type == 'vnf':
indexes = []
for cvnfd in nsd['constituent-vnfd']:
indexes.append(int(cvnfd["member-vnf-index"]))
memberindex = max(indexes) + 1 if len(indexes) > 0 else 1
nsd['constituent-vnfd'].append({
"member-vnf-index": memberindex,
"vnfd-id-ref": element_id
})
if node_type == 'cp':
for vld in nsd['vld']:
if vld['id'] == args['vld_id']:
if 'vnfd-connection-point-ref' not in vld:
vld['vnfd-connection-point-ref'] = []
vld['vnfd-connection-point-ref'].append(
{
"vnfd-connection-point-ref": args['vnfd-connection-point-ref'],
"member-vnf-index-ref": args['member-vnf-index-ref'],
"vnfd-id-ref": args['vnfd-id-ref']
},
)
elif descriptor_type == 'vnfd':
if 'vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd-catalog']['vnfd'][0]
elif 'vnfd:vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd:vnfd-catalog']['vnfd'][0]
if node_type == 'vdu':
if 'vdu' not in vnfd:
vnfd['vdu'] = []
vnfd['vdu'].append({
"count": "1",
"description": "",
"monitoring-param": [],
"internal-connection-point": [],
"image": "ubuntu",
#"cloud-init-file": "",
"vm-flavor": {},
"interface": [],
"id": element_id,
"name": element_id
})
if node_type == 'cp':
if 'connection-point' not in vnfd:
vnfd['connection-point'] = []
vnfd['connection-point'].append({
"type": "VPORT",
"name": element_id
})
if node_type == 'vnf_vl':
if 'internal-vld' not in vnfd:
vnfd['internal-vld'] = []
vnfd['internal-vld'].append({
"short-name": element_id,
"name": element_id,
"internal-connection-point": [],
"type": "ELAN",
"ip-profile-ref": "",
"id": element_id
})
if node_type == 'interface':
for vdu in vnfd['vdu']:
if vdu['id'] == args['vdu_id']:
vdu['interface'].append({
"virtual-interface": {
"type": "VIRTIO"
},
"name": args["name"],
"mgmt-interface": True,
"type": "EXTERNAL",
"external-connection-point-ref": args["external-connection-point-ref"]
})
if node_type == 'int_cp':
for vdu in vnfd['vdu']:
if vdu['id'] == args['vdu_id']:
if 'internal-connection-point' not in vdu:
vdu['internal-connection-point'] = []
vdu['internal-connection-point'].append({
"short-name": element_id,
"type": "VPORT",
"id": element_id,
"name": element_id
})
if 'interface' not in vdu:
vdu['interface'] = []
vdu['interface'].append({
"virtual-interface": {
"type": "VIRTIO"
},
"name": "int_"+element_id,
"type": "INTERNAL",
"internal-connection-point-ref": element_id
})
for int_vld in vnfd['internal-vld']:
if int_vld['id'] == args['vld_id']:
if 'internal-connection-point' not in int_vld:
int_vld['internal-connection-point'] = []
int_vld['internal-connection-point'].append({
'id-ref': element_id
})
return descriptor
@staticmethod
def update_graph_params(descriptor_type, descriptor, updated):
if descriptor_type == 'nsd':
if 'nsd-catalog' in descriptor:
nsd = descriptor['nsd-catalog']['nsd'][0]
elif 'nsd:nsd-catalog' in descriptor:
nsd = descriptor['nsd:nsd-catalog']['nsd'][0]
nsd.update(updated)
elif descriptor_type == 'vnfd':
if 'vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd-catalog']['vnfd'][0]
elif 'vnfd:vnfd-catalog' in descriptor:
vnfd = descriptor['vnfd:vnfd-catalog']['vnfd'][0]
vnfd.update(updated)
return descriptor
@staticmethod
def remove_int_cp(element_id, vnfd):
for vdu in vnfd['vdu']:
if 'interface' in vdu:
vdu['interface'] = [item for item in vdu['interface'] if 'internal-connection-point-ref' not in item
or ('internal-connection-point-ref' in item and item[
'internal-connection-point-ref'] != element_id)]
if 'internal-connection-point' in vdu:
vdu['internal-connection-point'] = [item for item in vdu['internal-connection-point'] if
item['id'] != element_id]
for intVld in vnfd['internal-vld']:
intVld['internal-connection-point'] = [item for item in intVld['internal-connection-point'] if
item['id-ref'] != element_id]
return vnfd