#!/usr/bin/env python3
#
-# Copyright 2016 RIFT.IO Inc
+# Copyright 2016-2017 RIFT.IO Inc
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
import argparse
+import simplejson
import os
+import yaml
import shutil
import sys
import uuid
+from xml.dom.minidom import parseString
+
import gi
gi.require_version('RwYang', '1.0')
gi.require_version('RwVnfdYang', '1.0')
gi.require_version('VnfdYang', '1.0')
+gi.require_version('RwVnfdYang', '1.0')
gi.require_version('RwNsdYang', '1.0')
-gi.require_version('NsdYang', '1.0')
-
from gi.repository import (
- RwNsdYang,
- NsdYang,
- RwVnfdYang,
- VnfdYang,
+ RwNsdYang as RwNsdYang,
+ NsdYang as NsdYang,
+ RwVnfdYang as RwVnfdYang,
+ VnfdYang as VnfdYang,
RwYang,
)
self.vnfd = None
self.instance_count = instance_count
self._placement_groups = []
+ self.use_vnf_init_conf = False
super(VirtualNetworkFunction, self).__init__(name)
def add_placement_group(self, group):
internal_cp.name = cp_name + "/icp{}".format(i)
internal_cp.id = cp_name + "/icp{}".format(i)
internal_cp.type_yang = 'VPORT'
- ivld_cp = internal_vlds[i].internal_connection_point_ref.add()
+ ivld_cp = internal_vlds[i].internal_connection_point.add()
ivld_cp.id_ref = internal_cp.id
internal_interface = vdu.internal_interface.add()
with open(script_file, "w") as f:
f.write("{}".format(cfg))
+ # Copy the vnf_init_config script
+ if self.use_vnf_init_conf and ('ping' in self.name):
+ script_name = 'ping_set_rate.py'
+
+ src_path = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
+ script_src = os.path.join(src_path, script_name)
+ if not os.path.exists(script_src):
+ src_path = os.path.join(os.environ['RIFT_ROOT'],
+ 'modules/core/mano/examples/ping_pong_ns/rift/mano/examples')
+ script_src = os.path.join(src_path, script_name)
+
+ dest_path = os.path.join(outdir, self.name, 'scripts')
+ os.makedirs(dest_path, exist_ok=True)
+
+ shutil.copy2(script_src, dest_path)
+
class NetworkService(ManoDescriptor):
def __init__(self, name):
self.vnfd_config = {}
self._placement_groups = []
- def ping_config(self, mano_ut, use_ns_init_conf):
+ def ping_config(self, mano_ut, use_ns_init_conf, use_vnf_init_conf):
suffix = ''
if mano_ut:
ping_cfg = r'''
echo "Failed to set server info for ping!"
exit $rc
fi
+''' % suffix
+ if use_vnf_init_conf is False:
+ ping_cfg +='''
curl -D /dev/stdout \
-H "Accept: application/vnd.yang.data+xml" \
-H "Content-Type: application/vnd.yang.data+json" \
exit $rc
fi
-''' % suffix
+'''
if use_ns_init_conf:
ping_cfg += "exit 0\n"
else:
})
vnf_config.service_primitive.append(config)
- def default_config(self, const_vnfd, vnfd, mano_ut, use_ns_init_conf):
+ def default_config(self, const_vnfd, vnfd, mano_ut,
+ use_ns_init_conf,
+ use_vnf_init_conf):
vnf_config = vnfd.vnfd.vnf_configuration
vnf_config.config_attributes.config_priority = 0
if vnfd.name == 'ping_vnfd' or vnfd.name == 'ping_vnfd_with_epa' or vnfd.name == 'ping_vnfd_aws':
vnf_config.config_attributes.config_priority = 2
- vnf_config.config_template = self.ping_config(mano_ut, use_ns_init_conf)
+ vnf_config.config_template = self.ping_config(mano_ut,
+ use_ns_init_conf,
+ use_vnf_init_conf)
+ if use_vnf_init_conf:
+ vnf_config.initial_config_primitive.add().from_dict(
+ {
+ "seq": 1,
+ "name": "set ping rate",
+ "user_defined_script": "ping_set_rate.py",
+ "parameter": [
+ {
+ 'name': 'rate',
+ 'value': '5',
+ },
+ ],
+ }
+ )
def ns_config(self, nsd, vnfd_list, mano_ut):
# Used by scale group
- def compose(self, vnfd_list, cpgroup_list, mano_ut, use_ns_init_conf=True):
+ def compose(self, vnfd_list, cpgroup_list, mano_ut,
+ use_ns_init_conf=True,
+ use_vnf_init_conf=True,):
if mano_ut:
# Disable NS initial config primitive
- use_ns_init_conf=False
+ use_ns_init_conf = False
+ use_vnf_init_conf = False
self.descriptor = RwNsdYang.YangData_Nsd_NsdCatalog()
self.id = str(uuid.uuid1())
nsd.version = '1.0'
nsd.input_parameter_xpath.append(
NsdYang.YangData_Nsd_NsdCatalog_Nsd_InputParameterXpath(
- xpath="/nsd:nsd-catalog/nsd:nsd/nsd:vendor",
+ xpath="/nsd-catalog/nsd/vendor",
)
)
constituent_vnfd.vnfd_id_ref = vnfd.descriptor.vnfd[0].id
self.default_config(constituent_vnfd, vnfd, mano_ut,
- use_ns_init_conf,)
+ use_ns_init_conf, use_vnf_init_conf)
member_vnf_index += 1
# Enable config primitives if either mano_ut or
member.vnfd_id_ref = member_vnfd.descriptor.vnfd[0].id
member.member_vnf_index_ref = vnfd_index_map[member_vnfd]
- # self.create_mon_params(vnfd_list)
+ self.create_mon_params(vnfd_list)
def write_config(self, outdir, vnfds):
ex_pong_userdata=None,
use_placement_group=True,
use_ns_init_conf=True,
+ use_vnf_init_conf=True,
):
# List of connection point groups
# Each connection point group refers to a virtual link
suffix = ''
ping = VirtualNetworkFunction("ping_vnfd%s" % (suffix), pingcount)
+ ping.use_vnf_init_conf = use_vnf_init_conf
if use_placement_group:
### Add group name Eris
nsd_catalog.compose(vnfd_list,
cpgroup_list,
mano_ut,
- use_ns_init_conf=use_ns_init_conf,)
+ use_ns_init_conf=use_ns_init_conf,
+ use_vnf_init_conf=use_vnf_init_conf,)
if write_to_file:
ping.write_to_file(out_dir, ping_fmt if ping_fmt is not None else fmt)