Merge branch 'branchfrom--descriptor-packages'
authorAdmin <Admin@etsi.org>
Fri, 23 Jun 2017 08:36:52 +0000 (10:36 +0200)
committerAdmin <Admin@etsi.org>
Fri, 23 Jun 2017 08:36:52 +0000 (10:36 +0200)
44 files changed:
descriptor-packages/Makefile [new file with mode: 0644]
descriptor-packages/README [new file with mode: 0644]
descriptor-packages/src/gen_nsd_pkg.sh [new file with mode: 0755]
descriptor-packages/src/gen_vnfd_pkg.sh [new file with mode: 0755]
descriptor-packages/src/generate_descriptor_pkg.sh [new file with mode: 0755]
descriptor-packages/src/nsd/VyOS_ns/VyOS_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/VyOS_ns/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/cirros_2vnf_ns/cirros_2vnf_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/cirros_2vnf_ns/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/cirros_ns/cirros_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/cirros_ns/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/ims_allin1_corpa/IMS-corpA__nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ims_allin1_corpa/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/ims_allin1_corpa/vnf_config/IMS-ALLIN1_2p__1.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ping_pong_ns/icons/rift_logo.png [new file with mode: 0644]
descriptor-packages/src/nsd/ping_pong_ns/ping_pong_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ping_pong_ns/scripts/start_traffic.py [new file with mode: 0755]
descriptor-packages/src/nsd/ref1_ns/ref1_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ref2_ns/ref2_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/ubuntu_cirros_multidisk_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/nsd/ubuntu_xenial_ns/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/nsd/ubuntu_xenial_ns/ubuntu_xenial_nsd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/VyOS_vnf/VyOS__vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/VyOS_vnf/icons/osm_2x.png [new file with mode: 0644]
descriptor-packages/src/vnfd/cirros_vnf/cirros_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/cirros_vnf/icons/cirros-64.png [new file with mode: 0644]
descriptor-packages/src/vnfd/ims_allin1_2p_vnf/IMS-ALLIN1__vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ims_allin1_2p_vnf/icons/metaswitch_2x.png [new file with mode: 0644]
descriptor-packages/src/vnfd/ping_vnf/cloud_init/ping_cloud_init.cfg [new file with mode: 0644]
descriptor-packages/src/vnfd/ping_vnf/icons/rift_logo.png [new file with mode: 0644]
descriptor-packages/src/vnfd/ping_vnf/ping_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/pong_vnf/cloud_init/pong_cloud_init.cfg [new file with mode: 0644]
descriptor-packages/src/vnfd/pong_vnf/icons/rift_logo.png [new file with mode: 0644]
descriptor-packages/src/vnfd/pong_vnf/pong_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ref11_vnf/ref11_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ref12_vnf/ref12_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ref21_vnf/ref21_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ref22_vnf/ref22_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/cloud_init/cloud_init.cfg [new file with mode: 0644]
descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/ubuntu_cirros_multidisk_vnfd.yaml [new file with mode: 0644]
descriptor-packages/src/vnfd/ubuntu_xenial_vnf/cloud_init/cloud_init.cfg [new file with mode: 0644]
descriptor-packages/src/vnfd/ubuntu_xenial_vnf/icons/ubuntu-logo14.png [new file with mode: 0644]
descriptor-packages/src/vnfd/ubuntu_xenial_vnf/ubuntu_xenial_vnfd.yaml [new file with mode: 0644]

diff --git a/descriptor-packages/Makefile b/descriptor-packages/Makefile
new file mode 100644 (file)
index 0000000..793f30c
--- /dev/null
@@ -0,0 +1,149 @@
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+# Author(s): Austin Cormier
+# Creation Date: 2016/05/23
+#
+BUILD_DIR = build
+
+NSDS := \
+    gw_corpa_ns \
+    ims_allin1_corpa \
+    mwc16_gen_ns \
+    mwc16_pe_ns \
+    VyOS_ns \
+    cirros_ns \
+    cirros_2vnf_ns \
+    ubuntu_xenial_ns \
+    ping_pong_ns \
+    knt_flownac_ns \
+    knt_flownac-us_ns \
+    sandvine_pts_ns \
+    sonussbc_ns \
+    ref1_ns \
+    ref2_ns \
+    ubuntu_cirros_multidisk_ns
+
+NSD_SRC_DIR := src/nsd
+NSD_BUILD_DIR := $(BUILD_DIR)/nsd
+
+NSD_SRC_DIRS := $(addprefix $(NSD_SRC_DIR)/, $(NSDS))
+NSD_BUILD_DIRS := $(addprefix $(NSD_BUILD_DIR)/, $(NSDS))
+NSD_PKGS := $(addsuffix .tar.gz, $(NSDS))
+NSD_BUILD_PKGS := $(addprefix $(NSD_BUILD_DIR)_pkgs/, $(NSD_PKGS))
+
+VNFDS := \
+    6wind_vnf \
+    gw_corpa_pe1_vnf \
+    gw_corpa_pe2_vnf \
+    ims_allin1_2p_vnf \
+    tidgen_mwc16_vnf \
+    VyOS_vnf \
+    cirros_vnf \
+    ubuntu_xenial_vnf \
+    ping_vnf \
+    pong_vnf \
+    knt_fnc_vnf \
+    knt_fne_vnf \
+    knt_fnu_vnf \
+    knt_fnd_vnf \
+    sandvine_pts_vnf \
+    sonus_sbc_vnf \
+    sonus_test_vnf \
+    ref11_vnf \
+    ref21_vnf \
+    ref12_vnf \
+    ref22_vnf \
+    ubuntu_cirros_multidisk_vnf
+
+VNFD_SRC_DIR := src/vnfd
+VNFD_BUILD_DIR := $(BUILD_DIR)/vnfd
+
+VNFD_SRC_DIRS := $(addprefix $(VNFD_SRC_DIR)/, $(VNFDS))
+VNFD_BUILD_DIRS := $(addprefix $(VNFD_BUILD_DIR)/, $(VNFDS))
+VNFD_PKGS := $(addsuffix .tar.gz, $(VNFDS))
+VNFD_BUILD_PKGS := $(addprefix $(VNFD_BUILD_DIR)_pkgs/, $(VNFD_PKGS))
+
+IMS_GITHUB="https://github.com/Metaswitch/clearwater-juju.git"
+CHARM_REPO="https://osm.etsi.org/gerrit/osm/juju-charms.git"
+
+all: $(VNFD_BUILD_PKGS) ${NSD_BUILD_PKGS}
+       echo $@
+
+clean:
+       -@ $(RM) -rf $(BUILD_DIR)
+
+$(VNFD_BUILD_DIR)/%: $(VNFD_SRC_DIR)/%
+       mkdir -p $(VNFD_BUILD_DIR)
+       cp -rf $< $(VNFD_BUILD_DIR)
+
+       src/gen_vnfd_pkg.sh $< $@
+
+$(BUILD_DIR)/clearwater-juju:
+       mkdir -p $(BUILD_DIR)
+       -cd $(BUILD_DIR) && (test -e clearwater-juju || git clone $(IMS_GITHUB))
+
+$(BUILD_DIR)/juju-charms:
+       mkdir -p $(BUILD_DIR)
+       -cd $(BUILD_DIR) && (test -e juju-charms || git clone $(CHARM_REPO))
+       -cd $(BUILD_DIR)/juju-charms && make
+
+$(NSD_BUILD_DIR)/%: $(NSD_SRC_DIR)/%
+       mkdir -p $(NSD_BUILD_DIR)
+       cp -rf $< $(NSD_BUILD_DIR)
+
+       src/gen_nsd_pkg.sh $< $@
+
+$(BUILD_DIR)/nsd_pkgs/%.tar.gz: $(NSD_BUILD_DIR)/%
+       src/generate_descriptor_pkg.sh -d $(BUILD_DIR)/nsd_pkgs $<
+
+$(VNFD_BUILD_DIR)/ims_allin1_2p_vnf/charms/clearwater-aio-proxy: $(VNFD_BUILD_DIR)/ims_allin1_2p_vnf $(BUILD_DIR)/clearwater-juju
+       # Copy the IMS Charm into the IMS vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/clearwater-juju/charms/trusty/clearwater-aio-proxy $(VNFD_BUILD_DIR)/ims_allin1_2p_vnf/charms
+
+$(VNFD_BUILD_DIR)/6wind_vnf/charms/vpe-router: $(VNFD_BUILD_DIR)/6wind_vnf $(BUILD_DIR)/juju-charms
+       # Copy the PE Charm into the PE vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/vpe-router $(VNFD_BUILD_DIR)/6wind_vnf/charms
+
+$(VNFD_BUILD_DIR)/VyOS_vnf/charms/vyos-proxy: $(VNFD_BUILD_DIR)/VyOS_vnf $(BUILD_DIR)/juju-charms
+       # Copy the PE Charm into the PE vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/vyos-proxy $(VNFD_BUILD_DIR)/VyOS_vnf/charms
+
+$(VNFD_BUILD_DIR)/ping_vnf/charms/pingpong: $(VNFD_BUILD_DIR)/ping_vnf $(BUILD_DIR)/juju-charms
+       # Copy the pingpong Charm into the ping vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/pingpong $(VNFD_BUILD_DIR)/ping_vnf/charms
+
+$(VNFD_BUILD_DIR)/pong_vnf/charms/pingpong: $(VNFD_BUILD_DIR)/pong_vnf $(BUILD_DIR)/juju-charms
+       # Copy the pingpong Charm into the pong vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/pingpong $(VNFD_BUILD_DIR)/pong_vnf/charms
+
+$(VNFD_BUILD_DIR)/knt_fnc_vnf/charms/flownac: $(VNFD_BUILD_DIR)/knt_fnc_vnf $(BUILD_DIR)/juju-charms
+       # Copy the FlowNAC Charm into the FNC vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/flownac $(VNFD_BUILD_DIR)/knt_fnc_vnf/charms
+
+$(VNFD_BUILD_DIR)/knt_fne_vnf/charms/flownac: $(VNFD_BUILD_DIR)/knt_fne_vnf $(BUILD_DIR)/juju-charms
+       # Copy the FlowNAC Charm into the FNE vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/flownac $(VNFD_BUILD_DIR)/knt_fne_vnf/charms
+
+$(VNFD_BUILD_DIR)/knt_fnd_vnf/charms/flownac: $(VNFD_BUILD_DIR)/knt_fnd_vnf $(BUILD_DIR)/juju-charms
+       # Copy the FlowNAC Charm into the FND vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/flownac $(VNFD_BUILD_DIR)/knt_fnd_vnf/charms
+
+$(VNFD_BUILD_DIR)/knt_fnu_vnf/charms/flownac: $(VNFD_BUILD_DIR)/knt_fnu_vnf $(BUILD_DIR)/juju-charms
+       # Copy the FlowNAC Charm into the FNU vnf package directory before packaging
+       cp -rf $(BUILD_DIR)/juju-charms/builds/flownac $(VNFD_BUILD_DIR)/knt_fnu_vnf/charms
+
+$(BUILD_DIR)/vnfd_pkgs/%.tar.gz: $(VNFD_BUILD_DIR)/% $(VNFD_BUILD_DIR)/ims_allin1_2p_vnf/charms/clearwater-aio-proxy $(VNFD_BUILD_DIR)/6wind_vnf/charms/vpe-router $(VNFD_BUILD_DIR)/VyOS_vnf/charms/vyos-proxy $(VNFD_BUILD_DIR)/ping_vnf/charms/pingpong $(VNFD_BUILD_DIR)/pong_vnf/charms/pingpong $(VNFD_BUILD_DIR)/knt_fnc_vnf/charms/flownac $(VNFD_BUILD_DIR)/knt_fne_vnf/charms/flownac $(VNFD_BUILD_DIR)/knt_fnd_vnf/charms/flownac $(VNFD_BUILD_DIR)/knt_fnu_vnf/charms/flownac
+       src/generate_descriptor_pkg.sh -d $(BUILD_DIR)/vnfd_pkgs $<
diff --git a/descriptor-packages/README b/descriptor-packages/README
new file mode 100644 (file)
index 0000000..9d3482d
--- /dev/null
@@ -0,0 +1,34 @@
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+# Author(s): Austin Cormier
+# Creation Date: 2016/05/23
+
+
+Generates the MWC16 NSD and VNFD descriptor packages from source.
+
+To generate the packages type "make". The VNF and NSD packages will be located
+build/vnfd_pkgs and build/nsd_pkgs.
+
+To clean, type 'make clean'.
+
+You need to install charm tools to compile the charms required for the packages.
+On Fedora, install using: pip install charm-tools
+On Ubuntu, install using: apt install charm-tools
+For other platforms, check https://jujucharms.com/docs/2.0/tools-charm-tools
+
+Due to license issues, for the IMS VNFD package, the IMS charm is fetched
+extracted from the respective git repository prior to packaging.  Because of
+this, internet access is required to reach github.
diff --git a/descriptor-packages/src/gen_nsd_pkg.sh b/descriptor-packages/src/gen_nsd_pkg.sh
new file mode 100755 (executable)
index 0000000..07761d2
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+# Author(s): Austin Cormier
+# Creation Date: 2016/05/23
+#
+
+# Generates a NSD descriptor package from a source directory
+# Usage:
+# gen_nsd_pkg.sh <pkg_src_dir> <pkg_dest_dir>
+
+set -o nounset
+
+if [ $# -ne 2 ]; then
+       echo "Error: Must provide 2 parameters" >@2
+       exit 1
+fi
+
+pkg_src_dir="$1"
+pkg_dest_dir="$2"
+
+if [ ! -e ${pkg_src_dir} ]; then
+    echo "Error: ${pkg_src_dir} does not exist"
+    exit 1
+fi
+
+if [ ! -e ${pkg_dest_dir} ]; then
+    echo "Error: ${pkg_src_dir} does not exist"
+    exit 1
+fi
+
+echo "Generating package in directory: ${pkg_dest_dir}"
+
+# Create any missing directories/files so each package has
+# a complete hierachy
+nsd_dirs=( ns_config vnf_config icons scripts )
+nsd_files=( README )
+
+nsd_dir="${pkg_src_dir}"
+echo $(pwd)
+
+mkdir -p "${pkg_dest_dir}"
+cp -rf ${nsd_dir}/* "${pkg_dest_dir}"
+for sub_dir in ${nsd_dirs[@]}; do
+    dir_path=${pkg_dest_dir}/${sub_dir}
+    mkdir -p ${dir_path}
+done
+
+for file in ${nsd_files[@]}; do
+    file_path=${pkg_dest_dir}/${file}
+    touch ${file_path}
+done
diff --git a/descriptor-packages/src/gen_vnfd_pkg.sh b/descriptor-packages/src/gen_vnfd_pkg.sh
new file mode 100755 (executable)
index 0000000..81a655c
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+# Author(s): Austin Cormier
+# Creation Date: 2016/05/23
+#
+
+# Generates a NSD descriptor package from a source directory
+# Usage:
+# gen_vnfd_pkg.sh <pkg_src_dir> <pkg_dest_dir>
+
+set -o nounset
+
+if [ $# -ne 2 ]; then
+       echo "Error: Must provide 2 parameters" >@2
+       exit 1
+fi
+
+pkg_src_dir="$1"
+pkg_dest_dir="$2"
+
+if [ ! -e ${pkg_src_dir} ]; then
+    echo "Error: ${pkg_src_dir} does not exist"
+    exit 1
+fi
+
+if [ ! -e ${pkg_dest_dir} ]; then
+    echo "Error: ${pkg_src_dir} does not exist"
+    exit 1
+fi
+
+echo "Generating package in directory: ${pkg_dest_dir}"
+
+# Create any missing directories/files so each package has
+# a complete hierachy
+vnfd_dirs=( charms icons scripts images )
+vnfd_files=( README )
+
+vnfd_dir="${pkg_src_dir}"
+echo $(pwd)
+
+mkdir -p "${pkg_dest_dir}"
+cp -rf ${vnfd_dir}/* "${pkg_dest_dir}"
+for sub_dir in ${vnfd_dirs[@]}; do
+    dir_path=${pkg_dest_dir}/${sub_dir}
+    mkdir -p ${dir_path}
+done
+
+for file in ${vnfd_files[@]}; do
+    file_path=${pkg_dest_dir}/${file}
+    touch ${file_path}
+done
diff --git a/descriptor-packages/src/generate_descriptor_pkg.sh b/descriptor-packages/src/generate_descriptor_pkg.sh
new file mode 100755 (executable)
index 0000000..a09fb6a
--- /dev/null
@@ -0,0 +1,828 @@
+#!/bin/bash
+
+############################################################################
+# Copyright 2016 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.         #
+# You may obtain a copy of the License at                                  #
+#                                                                          #
+#     http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                          #
+# Unless required by applicable law or agreed to in writing, software      #
+# distributed under the License is distributed on an "AS IS" BASIS,        #
+# 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.                                           #
+############################################################################
+
+#
+# This shell script is used to create a descriptor package
+# The main functions of this script include:
+# - Generate checksums.txt file
+# - Generate a tar.gz file
+# This script can be used to create the required folders for
+# a descriptor package and a template descriptor
+
+# Usage: generate_descriptor_pkg.sh <base-directory> <package-directory>
+
+# Descriptor names should be
+#   - (nsd|vnfd).(yaml|yml|json|xml)
+#   - *_(nsd|vnfd).(yaml|yml|json|xml)
+#   - *_(nsd|vnfd)_*.(yaml|yml|json|xml)
+#   - (nsd|vnfd)/*.(yaml|yml|json|xml)
+#
+
+SCRIPTNAME=`basename $0`
+
+# From https://osm.etsi.org/wikipub/index.php/Release_0_Data_Model_Details
+# Supported folders for VNFD
+# cloud_init - Rel 4.3, not yet part of OSM
+VNFD_FOLDERS=(images scripts icons charms cloud_init)
+
+# Supported folders for NSD
+# OSM document specifies (ns|vnf)-config folder, while Rel 4.3
+# is using (ns|vnf)_config.
+NSD_FOLDERS=(scripts icons ns_config vnf_config)
+
+# Other files allowed in the descriptor base directory
+ALLOWED_FILES=(README)
+
+DESC_TYPES=(vnfd nsd)
+DESC_EXTN=(yml yaml json xml)
+CHKSUM='checksums.txt'
+
+VERBOSE=false
+DRY_RUN=false
+CREATE=false
+RM="--remove-files"
+DEBUG=false
+
+ARCHIVE=false
+CREATE_NSD=false
+VENDOR='OSM'
+INTF_TYPE='VIRTIO'
+VCPU=2
+MEMORY=4096
+STORAGE=10
+INTERFACES=1
+
+function usage() {
+    cat <<EOF
+Usage:
+     $SCRIPTNAME [-t <type>] [-N] [-c] [base-directory] <package-name>
+
+        -h|--help : show this message
+
+        -t|--package-type <nsd|vnfd> : Descriptor package type
+                                       is NSD or VNFD. Script will try to
+                                       determine the type if not provided.
+                                       Default is vnfd for create-folders.
+
+        -d|--destination-dir <destination directory>: Directory to create the
+                                                      archived file.
+                                                      Default is base-directory
+
+        -N|--no-remove-files : Do not remove the package files after creating
+                               archive
+
+        Options specifc for create descriptor:
+
+            -c|--create-folder : Create folder with the structure for the
+                                 package type using the base-dir and package-dir
+                                 and a descriptor template
+
+            -a|--archive: Create package for the descriptor
+
+            --nsd : Generate NSD descriptor package also.
+
+            --vendor : Vendor name for descriptor. Default OSM
+
+            --interface-type : Interface type [VIRTIO|SR-IOV|PCI-PASSTHROUGH|E1000]
+                               Default VIRTIO
+
+          VM Flavour options:
+
+            --vcpu : Virtual CPU count. Default 2
+
+            --memory : Memory for VM in MB. Default 4096MB
+
+            --storage : Storage size for VM in GB. Default 10GB
+
+          VDU Parameters:
+
+            --image : Location URI of the image
+
+            --cloud-init-file : Cloud init file
+
+            --cloud-init : Cloud init script. Will be ignored if
+                           cloud-init-file is specified
+
+            --interfaces : Number of external interfaces in additon to OM-MGMT. Default 1.
+
+        End of create descriptor specific options
+
+        -v| --verbose : Generate progress details
+
+        -n| --dry-run : Validate the package dir
+
+        base-dir : Directory where the archive file or folders are created,
+                   if destination directory is not specified.
+                   Default is current directory
+
+        package-name : The descriptor name (full path if base-dir not specified)
+EOF
+}
+
+CP_TYPE='VPORT'
+function get_cp_type() {
+    case ${INTF_TYPE} in
+        VIRTIO ) CP_TYPE='VPORT';;
+        SR-IOV ) CP_TYPE='VPORT';;
+        PCI-PASSTHROUGH ) CP_TYPE='VPORT';;
+        OM-MGMT ) CP_TYPE='VPORT';;
+        E1000 ) CP_TYPE='VPORT';;
+        * ) echo "ERROR: Unknown interface type ${INTF_TYPE}"; exit 1;;
+    esac
+}
+
+# Get pci number starting from 0x0a
+get_pci() {
+   printf '%02x' $((10 + $1)) | tr '[:upper:]' '[:lower:]'
+}
+
+function write_readme() {
+    dir=$1
+    file=${dir}/README
+    date=$(date)
+
+    cat >$file <<EOF
+Descriptor created by OSM descriptor package generated
+Created on $date
+EOF
+
+}
+
+function write_vnfd_tmpl() {
+    name=$(basename $1)
+    desc_file="${name}.yaml"
+
+    cat >$desc_file <<EOF
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: ${name}
+        name: ${name}
+        short-name: ${name}
+        description: Generated by OSM pacakage generator
+        vendor: ${VENDOR}
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        # logo: <update, optional>
+
+        # Management interface
+        mgmt-interface:
+            vdu-id: ${name}-VM
+
+        # Atleast one VDU need to be specified
+        vdu:
+        # Additional VDUs can be created by copying the
+        # VDU descriptor below
+        -   id: ${name}-VM
+            name: ${name}-VM
+            description: ${name}-VM
+            count: 1
+
+            # Flavour of the VM to be instantiated for the VDU
+            vm-flavor:
+                vcpu-count: ${VCPU}
+                memory-mb: ${MEMORY}
+                storage-gb: ${STORAGE}
+
+            # Image including the full path
+            image: '${IMAGE}'
+
+EOF
+
+    # Add the cloud init file or script
+    if [[ -n ${CLOUD_INIT_FILE} ]]; then
+        cif=$(basename ${CLOUD_INIT_FILE})
+        cat >>$desc_file <<EOF
+            # Cloud init file
+            cloud-init-file: '${cif}'
+EOF
+    elif [[ -n ${CLOUD_INIT} ]]; then
+        cat >>$desc_file <<EOF
+            # Cloud init to use
+            cloud-init: '${CLOUD_INIT}'
+EOF
+    fi
+
+    # Add external interfaces
+    cat >>$desc_file <<EOF
+            external-interface:
+            # Specify the external interfaces
+            # There can be multiple interfaces defined
+EOF
+
+    # Add mgmt interface
+    cat >>$desc_file <<EOF
+            -   name: eth0
+                virtual-interface:
+                    type: VIRTIO
+                    bandwidth: '0'
+                    vpci: '0000:00:0a.0'
+                vnfd-connection-point-ref: eth0
+EOF
+
+    # Add external interfaces
+    for i in `seq 1 ${INTERFACES}`; do
+        eth=$(($i))
+        pci=$(get_pci $eth)
+        cat >>$desc_file <<EOF
+            -   name: eth${eth}
+                virtual-interface:
+                    type: ${INTF_TYPE}
+                    bandwidth: '0'
+                    vpci: '0000:00:${pci}.0'
+                vnfd-connection-point-ref: eth${eth}
+EOF
+    done
+
+    # Add connection points
+    cat >>$desc_file <<EOF
+
+        connection-point:
+EOF
+
+    for i in `seq 0 ${INTERFACES}`; do
+        eth=$(($i))
+        cat >>$desc_file <<EOF
+            -   name: eth${eth}
+                type: ${CP_TYPE}
+EOF
+    done
+
+    cat >>$desc_file <<EOF
+
+        # Uncomment and update below to enable juju
+        # charm configuration for the VNF
+        # vnf-configuration:
+        #     juju:
+        #         charm: <charm name>
+        #     service-primitive:
+        #     -   name: config
+        #         parameter:
+        #         -   name: <config parameter>
+        #             data-type: [STRING|INTEGER]
+        #             mandatory: [true|false]
+        #             default-value: <value>
+        #     -   name: <action name>
+        #         parameter:
+        #         -   name: <action parameter>
+        #             data-type: [STRING|INTEGER]
+        #             mandatory: [true|false]
+        #             default-value: <value>
+        #     initial-config-primitive:
+        #     -   name: config
+        #         parameter:
+        #         -   name: <config name>
+        #             value: <value>
+        #     -   name: <action name>
+        #         parameter:
+        #         -   name: <action parameter>
+        #             value: <value>
+EOF
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Created $desc_file"
+    fi
+}
+
+function write_nsd_tmpl() {
+    name=$(basename $1)
+    vnfd=$2
+    desc_file="${name}.yaml"
+
+    cat >$desc_file <<EOF
+nsd:nsd-catalog:
+    nsd:
+    -   id: ${name}
+        name: ${name}
+        short-name: ${name}
+        description: Generated by OSM pacakage generator
+        vendor: ${VENDOR}
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        # logo: <update, optional>
+
+        # Specify the VNFDs that are part of this NSD
+        constituent-vnfd:
+            # The member-vnf-index needs to be unique, starting from 1
+            # vnfd-id-ref is the id of the VNFD
+            # Multiple constituent VNFDs can be specified
+        -   member-vnf-index: 1
+            vnfd-id-ref: ${vnfd}
+
+EOF
+
+    cat >>$desc_file <<EOF
+        vld:
+        # Networks for the VNFs
+EOF
+
+    # Add management VLD
+    cat >>$desc_file <<EOF
+            -   id: ${name}_vld0
+                name: management
+                short-name: management
+                type: ELAN
+                mgmt-network: 'true'
+                # vim-network-name: <update>
+                # provider-network:
+                #     overlay-type: VLAN
+                #     segmentation_id: <update>
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                # member-vnf-index-ref - entry from constituent vnf
+                # vnfd-id-ref - VNFD id
+                # vnfd-connection-point-ref - connection point name in the VNFD
+                -   nsd:member-vnf-index-ref: 1
+                    nsd:vnfd-id-ref: ${vnfd}
+                    # NOTE: Validate the entry below
+                    nsd:vnfd-connection-point-ref: eth0
+EOF
+
+    # Add rest of VLDs
+    for i in `seq 1 ${INTERFACES}`; do
+        eth=$(($i))
+        cat >>$desc_file <<EOF
+            -   id: ${name}_vld${i}
+                name: ${name}_vld${i}
+                short-name: ${name}_vld${i}
+                type: ELAN
+                # vim-network-name: <update>
+                # provider-network:
+                #     overlay-type: VLAN
+                #     segmentation_id: <update>
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                # member-vnf-index-ref - entry from constituent vnf
+                # vnfd-id-ref - VNFD id
+                # vnfd-connection-point-ref - connection point name in the VNFD
+                -   nsd:member-vnf-index-ref: 1
+                    nsd:vnfd-id-ref: ${vnfd}
+                    # NOTE: Validate the entry below
+                    nsd:vnfd-connection-point-ref: eth${eth}
+EOF
+        done
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Created $desc_file"
+    fi
+}
+
+function write_nsd_config_tmpl() {
+    name=$(basename $1)
+    cfg_file="ns_config/$name.yaml"
+
+    cat >$cfg_file <<EOF
+
+EOF
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Created $cfg_file"
+    fi
+}
+
+cur_dir=`pwd`
+
+# Check if the array contains a specific value
+# Taken from
+# http://stackoverflow.com/questions/3685970/check-if-an-array-contains-a-value
+function contains() {
+    local n=$#
+    local value=${!n}
+    for ((i=1;i < $#;i++)); do
+        if [ "${!i}" == "${value}" ]; then
+            echo "y"
+            return 0
+        fi
+    done
+    echo "n"
+    return 1
+}
+
+function check_type() {
+    type=$1
+    if [ $(contains "${DESC_TYPES[@]}" $type) == "y" ]; then
+        TYPE=$type
+    else
+        echo "ERROR: Unknown descriptor type $type!" >&2
+        exit 1
+    fi
+}
+
+function get_expr(){
+    # First argument is to specify if this is a negative match or not
+    # Rest are filename expressions without extension
+
+    local regex=" "
+    local n=$#
+    local neg="${1}"
+    local first="true"
+    for ((i=2;i <= $#;i++)); do
+        for extn in "${DESC_EXTN[@]}"; do
+            if [ $first == true ]; then
+                if [ $neg == true ]; then
+                    subexpr='! -name'
+                else
+                    subexpr='-name'
+                fi
+                first=false
+            else
+                if [ $neg == true ]; then
+                    subexpr=' -a ! -name'
+                else
+                    subexpr=' -o -name'
+                fi
+            fi
+
+            regex="$regex $subexpr ${!i}.$extn"
+        done
+    done
+
+    echo "$regex"
+}
+
+function generate_package(){
+    type=$1
+    name="${2}_${type}"
+    vnfd="${2}_vnfd" # Required for NSD
+    dest_dir=$3
+
+    dir="${dest_dir}/${name}"
+
+    # Create the folders for the descriptor
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Creating folders for $PKG in $dest_dir"
+    fi
+
+    # Remove any existing directory
+    if [ -d $dir ]; then
+        rm -rf $dir >/dev/null 2>&1
+    fi
+
+    mkdir -p $dir && cd $dir
+    if [ $? -ne 0 ]; then
+        rc=$?
+        echo "ERROR: creating directory $dir ($rc)" >&2
+        exit $rc
+    fi
+
+    if [ $type == 'nsd' ]; then
+        folders=("${NSD_FOLDERS[@]}")
+    else
+        folders=("${VNFD_FOLDERS[@]}")
+    fi
+
+    for d in ${folders[@]}; do
+        mkdir -p $dir/$d
+        if [ $? -ne 0 ]; then
+            rc=$?
+            echo "ERROR: creating directory $dir/$d ($rc)" >&2
+            exit $rc
+        fi
+        if [ $VERBOSE == true ]; then
+            echo "Created folder $d in $dir"
+        fi
+    done
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Created folders for in $dir"
+    fi
+
+    # Write a descriptor template file
+    if [ $type == 'vnfd' ]; then
+
+        # Copy cloud init file to correct folder
+        if [[ -n ${CLOUD_INIT_FILE} ]]; then
+            if [[ -e ${CLOUD_INIT_FILE} ]]; then
+                cp ${CLOUD_INIT_FILE} $dir/cloud_init
+            else
+                echo "ERROR: Unable to find cloud-init-file ${CLOUD_INIT_FILE}"
+                exit 1
+            fi
+        fi
+
+        write_vnfd_tmpl $dir
+    else
+        write_nsd_tmpl $dir $vnfd
+    fi
+
+    write_readme $dir
+
+    if [ $ARCHIVE == true ]; then
+        # Create archive of the package
+        cd $dest_dir
+        if [ $VERBOSE == true ]; then
+            tar zcvf ${name}.tar.gz ${name}
+            echo "Created package ${name}.tar.gz in $dest_dir"
+        else
+            tar zcvf ${name}.tar.gz ${name} >/dev/null 2>&1
+        fi
+
+        if [ $? -ne 0 ]; then
+            echo "ERROR: Creating archive for ${name} in $dest_dir" >&2
+            exit 1
+        fi
+
+        echo "$dest_dir/${name}.tar.gz" >&2
+
+        if [ $RM == true ]; then
+            rm -rf ${name}
+        fi
+    fi
+}
+
+OPTS=`getopt -o vhnt:d:caN --long verbose,dry-run,help,package-type:,destination-dir,create-folder,no-remove-files,archive,nsd,vendor:,interface-type:,vcpu:,memory:,storage:,image:,cloud-init-file:,cloud-init:,interfaces:,debug -n $SCRIPTNAME -- "$@"`
+
+if [ $? != 0 ] ; then
+    echo "ERROR: Failed parsing options ($?)." >&2
+    usage
+    exit 1
+fi
+
+echo "$OPTS"
+eval set -- "$OPTS >/dev/null 2>&1"
+
+while true; do
+    case "$1" in
+        -v | --verbose ) VERBOSE=true; shift ;;
+        -h | --help )    usage; exit 0; shift ;;
+        -n | --dry-run ) DRY_RUN=true; shift ;;
+        -t | --package-type ) check_type "$2"; shift; shift ;;
+        -d | --destination-dir ) DEST_DIR=$2; shift; shift;;
+        -c | --create-folder ) CREATE=true; shift;;
+        -N | --no-remove-files ) RM=''; shift;;
+        -a | --archive ) ARCHIVE=true; shift;;
+        --nsd ) CREATE_NSD=true; shift;;
+        --vendor ) VENDOR=$2; shift; shift;;
+        --interface-type ) INTF_TYPE=$2; shift; shift;;
+        --vcpu ) VCPU=$2; shift; shift;;
+        --memory ) MEMORY=$2; shift; shift;;
+        --storage ) STORAGE=$2; shift; shift;;
+        --image ) IMAGE=$2; shift; shift;;
+        --cloud-init ) CLOUD_INIT=$2; shift; shift;;
+        --cloud-init-file ) CLOUD_INIT_FILE=$2; shift; shift;;
+        --interfaces ) INTERFACES=$2; shift; shift;;
+        --debug ) DEBUG=true; shift;;
+        -- ) shift; break ;;
+        * ) break ;;
+    esac
+done
+
+if [ $DEBUG == true ]; then
+    echo "INFO: Debugging ON"
+    set -x
+fi
+
+if [ $VERBOSE == true ]; then
+    echo "INFO: Descriptor type: $TYPE"
+fi
+
+# Dry run is to validate existing descriptor folders
+if [ $DRY_RUN == true ] && [ $CREATE == true ]; then
+    echo "ERROR: Option dry-run with create-folders not supported!" >&2
+    exit 1
+fi
+
+if [ $# -gt 1 ]; then
+    BASE_DIR=$1
+    PKG=$(basename $2)
+else
+    BASE_DIR=$(dirname $1)
+    PKG=$(basename $1)
+fi
+
+if [ $VERBOSE == true ]; then
+    echo "INFO: Using base dir: $BASE_DIR"
+fi
+
+if [ $VERBOSE == true ]; then
+    echo "INFO: Using package: $PKG"
+fi
+
+if [[ -z "$PKG" ]]; then
+    echo "ERROR: Need to specify the package name" >&2
+    usage >&2
+    exit 1
+fi
+
+if [[ ! -d $BASE_DIR ]]; then
+    if [ $CREATE == true ]; then
+        mkdir -p $BASE_DIR
+        if [ $? -ne 0 ]; then
+            echo "ERROR: Unable to create base directory $BASE_DIR" >&2
+            exit 1
+        fi
+    fi
+fi
+cd $BASE_DIR
+if [ $? -ne 0 ]; then
+    echo "ERROR: Unable to change to base directory $BASE_DIR!" >&2
+    exit 1
+fi
+
+# Get full base dir path
+BASE_DIR=`pwd`
+cd $cur_dir
+
+if [[ -z $DEST_DIR ]]; then
+    DEST_DIR=$BASE_DIR # Default to base directory
+fi
+
+mkdir -p $DEST_DIR
+
+cd $DEST_DIR
+if [ $? -ne 0 ]; then
+    echo "ERROR: Not able to access destination directory $DEST_DIR!" >&2
+    exit 1
+fi
+
+# Get the full destination dir path
+DEST_DIR=`pwd`
+cd $cur_dir
+
+dir=${BASE_DIR}/${PKG}
+
+function add_chksum() {
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Add file $1 to $CHKSUM"
+    fi
+
+    md5sum $1 >> $CHKSUM
+}
+
+if [ $CREATE == false ]; then
+    if [ ! -d $dir ]; then
+        echo "INFO: Package folder $dir not found!" >&2
+        exit 1
+    fi
+
+    cd $dir
+    if [ $? -ne 0 ]; then
+        rc=$?
+        echo "ERROR: changing directory to $dir ($rc)" >&2
+        exit $rc
+    fi
+
+    # Remove checksum file, if present
+    rm -f $CHKSUM
+
+    # Check if the descriptor file is present
+    if [[ -z $TYPE ]]; then
+        # Desc type not specified, look for the desc file and guess the type
+        # Required for backward compatibility
+        for ty in ${DESC_TYPES[@]}; do
+            re=$(get_expr false "$ty" "*_$ty" "*_${ty}_*")
+            desc=$(find * -maxdepth 0 -type f $re 2>/dev/null)
+
+            if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
+                # Check the vnfd|nsd folder
+                if [ ! -d $ty ]; then
+                    continue
+                fi
+                re=$(get_expr false "*")
+                desc=$(find $ty/* -maxdepth 0 -type f $re 2>/dev/null)
+                if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
+                    continue
+                elif [ ${#desc[@]} -gt 1 ]; then
+                    echo "ERROR: Found multiple descriptor files: ${desc[@]}" >&2
+                    exit 1
+                fi
+                # Descriptor sub directory
+                desc_sub_dir=$ty
+            fi
+
+            TYPE=$ty
+            if [ $TYPE == 'nsd' ]; then
+                folders=("${NSD_FOLDERS[@]}")
+            else
+                folders=("${VNFD_FOLDERS[@]}")
+            fi
+
+            if [ $VERBOSE == true ]; then
+                echo "INFO: Determined descriptor is of type $TYPE"
+            fi
+            break
+        done
+
+        if [[ -z $TYPE ]]; then
+            echo "ERROR: Unable to determine the descriptor type!" >&2
+            exit 1
+        fi
+    else
+        if [ $TYPE == 'nsd' ]; then
+            folders=("${NSD_FOLDERS[@]}")
+        else
+            folders=("${VNFD_FOLDERS[@]}")
+        fi
+
+        # Check for descriptor of type provided on command line
+        re=$(get_expr false "$TYPE" "*_${TYPE}" "*_${TYPE}_*")
+        desc=$(find * -maxdepth 0 -type f $re 2>/dev/null)
+
+        if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
+            # Check if it is under vnfd/nsd subdirectory
+            # Backward compatibility support
+            re=$(get_expr false "*")
+            desc=$(find $TYPE/* -maxdepth 0 -type f $re 2>/dev/null)
+            if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
+                echo "ERROR: Did not find descriptor file of type $TYPE" \
+                     " in $dir" >&2
+                exit 1
+            fi
+            desc_sub_dir=$ty
+        fi
+    fi
+
+    if [ ${#desc[@]} -gt 1 ]; then
+        echo "ERROR: Found multiple files of type $TYPE in $dir: $desc" >&2
+        exit 1
+    fi
+
+    descriptor=${desc[0]}
+
+    # Check if there are files not supported
+    files=$(find * -maxdepth 0 -type f ! -name $descriptor 2>/dev/null)
+
+    for f in ${files[@]}; do
+        if [ $(contains "${ALLOWED_FILES[@]}" $f)  == "n" ]; then
+            echo "WARN: Unsupported file $f found"
+        fi
+    done
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Found descriptor package: ${desc_sub_dir} ${descriptor}"
+    fi
+
+    if [ $DRY_RUN == false ]; then
+        add_chksum ${descriptor}
+    fi
+
+    # Check the folders are supported ones
+    dirs=$( find * -maxdepth 0 -type d )
+
+    for d in ${dirs[@]}; do
+        if [ $(contains "${folders[@]}" $d) == "y" ]; then
+            if [ $DRY_RUN == false ]; then
+                find $d/* -type f  2>/dev/null|
+                    while read file; do
+                        add_chksum $file
+                    done
+            fi
+        elif [[ -z $desc_sub_dir ]] || [ $d != $desc_sub_dir ]; then
+            echo "WARN: $d is not part of standard folders " \
+                 "for descriptor type $TYPE in $PKG"
+        fi
+    done
+
+    if [ $VERBOSE == true ]; then
+        echo "INFO: Creating archive for $PKG"
+    fi
+
+    cd $BASE_DIR
+    if [ $DRY_RUN == false ]; then
+        tar zcvf "$DEST_DIR/$PKG.tar.gz" "${PKG}" ${RM}
+        if [ $? -ne 0 ]; then
+            rc=$?
+            echo "ERROR: creating archive for $PKG ($rc)" >&2
+            exit $rc
+        fi
+    fi
+else
+    # Create, default to VNFD if no type is defined
+    if [[ -z $TYPE ]]; then
+        TYPE=vnfd
+        if [ $VERBOSE == true ]; then
+            echo "WARNING: Defaulting to descriptor type $TYPE"
+        fi
+    fi
+
+    if [ $TYPE == 'vnfd' ]; then
+        if [[ -z $IMAGE ]]; then
+            echo "ERROR: Image file need to be specified for VNF"
+            exit 1
+        fi
+        generate_package vnfd $PKG $DEST_DIR
+    fi
+
+    if [ $TYPE == 'nsd' -o  $CREATE_NSD == true ]; then
+        generate_package nsd $PKG $DEST_DIR
+    fi
+
+fi
+
+cd $cur_dir
diff --git a/descriptor-packages/src/nsd/VyOS_ns/VyOS_nsd.yaml b/descriptor-packages/src/nsd/VyOS_ns/VyOS_nsd.yaml
new file mode 100644 (file)
index 0000000..4b833fe
--- /dev/null
@@ -0,0 +1,50 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: VyOS
+        name: VyOS
+        short-name: VyOS
+        description: VyOS NS Example NS
+        logo: osm_2x.png
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: VyOS
+        vld:
+        -   id: data
+            name: data
+            short-name: data
+            type: ELAN
+            vim-network-name: net-corp
+            provider-network:
+                overlay-type: VLAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: eth1
+                vnfd-id-ref: VyOS
+        -   id: management
+            name: management
+            short-name: management
+            type: ELAN
+            vim-network-name: net-mgmtOS
+            provider-network:
+                overlay-type: VLAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: eth0
+                vnfd-id-ref: VyOS
+        service-primitive:
+        -   name: Config VyOS
+            vnf-primitive-group:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: VyOS
+                vnfd-name: VyOS
+                primitive:
+                -   index: '1'
+                    name: config
+        -   name: ping
+            vnf-primitive-group:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: VyOS
+                vnfd-name: VyOS
+                primitive:
+                -   index: '1'
+                    name: ping
diff --git a/descriptor-packages/src/nsd/VyOS_ns/icons/osm_2x.png b/descriptor-packages/src/nsd/VyOS_ns/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/VyOS_ns/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/cirros_2vnf_ns/cirros_2vnf_nsd.yaml b/descriptor-packages/src/nsd/cirros_2vnf_ns/cirros_2vnf_nsd.yaml
new file mode 100644 (file)
index 0000000..ed9433f
--- /dev/null
@@ -0,0 +1,44 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: cirros_2vnf_nsd
+        name: cirros_2vnf_ns
+        short-name: cirros_2vnf_ns
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: osm_2x.png
+
+        # Specify the VNFDs that are part of this NSD
+        constituent-vnfd:
+            # The member-vnf-index needs to be unique, starting from 1
+            # vnfd-id-ref is the id of the VNFD
+            # Multiple constituent VNFDs can be specified
+        -   member-vnf-index: 1
+            vnfd-id-ref: cirros_vnfd
+        -   member-vnf-index: 2
+            vnfd-id-ref: cirros_vnfd
+
+
+        vld:
+        # Networks for the VNFs
+            -   id: cirros_2vnf_nsd_vld1
+                name: cirros_2vnf_nsd_vld1
+                short-name: cirros_2vnf_nsd_vld1
+                type: ELAN
+                # vim-network-name: <update>
+                # provider-network:
+                #     overlay-type: VLAN
+                #     segmentation_id: <update>
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                # member-vnf-index-ref - entry from constituent vnf
+                # vnfd-id-ref - VNFD id
+                # vnfd-connection-point-ref - connection point name in the VNFD
+                -   nsd:member-vnf-index-ref: 1
+                    nsd:vnfd-id-ref: cirros_vnfd
+                    nsd:vnfd-connection-point-ref: eth0
+                -   nsd:member-vnf-index-ref: 2
+                    nsd:vnfd-id-ref: cirros_vnfd
+                    nsd:vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/src/nsd/cirros_2vnf_ns/icons/osm_2x.png b/descriptor-packages/src/nsd/cirros_2vnf_ns/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/cirros_2vnf_ns/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/cirros_ns/cirros_nsd.yaml b/descriptor-packages/src/nsd/cirros_ns/cirros_nsd.yaml
new file mode 100644 (file)
index 0000000..9ec4e27
--- /dev/null
@@ -0,0 +1,49 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: cirros_nsd
+        name: cirros_ns
+        short-name: cirros_ns
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: osm_2x.png
+
+        # Specify the VNFDs that are part of this NSD
+        constituent-vnfd:
+            # The member-vnf-index needs to be unique, starting from 1
+            # vnfd-id-ref is the id of the VNFD
+            # Multiple constituent VNFDs can be specified
+        -   member-vnf-index: 1
+            vnfd-id-ref: cirros_vnfd
+        scaling-group-descriptor:
+        -   name: "scaling_cirros"
+            vnfd-member:
+            -   count: 1
+                member-vnf-index-ref: 1
+            min-instance-count: 0
+            max-instance-count: 10
+            scaling-policy:
+            -   scaling-type: "manual"
+                cooldown-time: 10
+                threshold-time: 10
+                name: manual_scale
+        vld:
+        # Networks for the VNFs
+            -   id: cirros_nsd_vld1
+                name: cirros_nsd_vld1
+                type: ELAN
+                # vim-network-name: <update>
+                # provider-network:
+                #     overlay-type: VLAN
+                #     segmentation_id: <update>
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                # member-vnf-index-ref - entry from constituent vnf
+                # vnfd-id-ref - VNFD id
+                # vnfd-connection-point-ref - connection point name in the VNFD
+                -   nsd:member-vnf-index-ref: 1
+                    nsd:vnfd-id-ref: cirros_vnfd
+                    # NOTE: Validate the entry below
+                    nsd:vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/src/nsd/cirros_ns/icons/osm_2x.png b/descriptor-packages/src/nsd/cirros_ns/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/cirros_ns/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/ims_allin1_corpa/IMS-corpA__nsd.yaml b/descriptor-packages/src/nsd/ims_allin1_corpa/IMS-corpA__nsd.yaml
new file mode 100644 (file)
index 0000000..cc613b3
--- /dev/null
@@ -0,0 +1,60 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: IMS-corpA
+        name: IMS-corpA
+        short-name: IMS-corpA
+        description: All in one Clearwater IMS for corporation A in MWC16
+        logo: osm_2x.png
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: IMS-ALLIN1_2p
+        vld:
+        -   id: data
+            name: data
+            short-name: data
+            type: ELAN
+            vim-network-name: net-corp:108
+            provider-network:
+                overlay-type: VLAN
+                physical-network: net-corp
+                segmentation_id: '108'
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: eth0
+                vnfd-id-ref: IMS-ALLIN1_2p
+        -   id: management
+            name: management
+            short-name: management
+            type: ELAN
+            vim-network-name: net-mgmtOS
+            provider-network:
+                overlay-type: VLAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: eth1
+                vnfd-id-ref: IMS-ALLIN1_2p
+        service-primitive:
+        -   name: Update Domain
+            vnf-primitive-group:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: IMS-ALLIN1_2p
+                vnfd-name: cwims_vnfd
+                primitive:
+                -   index: '1'
+                    name: config
+        -   name: Add User
+            vnf-primitive-group:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: IMS-ALLIN1_2p
+                vnfd-name: cwims_vnfd
+                primitive:
+                -   index: '1'
+                    name: create-update-user
+        -   name: Delete User
+            vnf-primitive-group:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: IMS-ALLIN1_2p
+                vnfd-name: cwims_vnfd
+                primitive:
+                -   index: '1'
+                    name: delete-user
diff --git a/descriptor-packages/src/nsd/ims_allin1_corpa/icons/osm_2x.png b/descriptor-packages/src/nsd/ims_allin1_corpa/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/ims_allin1_corpa/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/ims_allin1_corpa/vnf_config/IMS-ALLIN1_2p__1.yaml b/descriptor-packages/src/nsd/ims_allin1_corpa/vnf_config/IMS-ALLIN1_2p__1.yaml
new file mode 100644 (file)
index 0000000..33c5ef9
--- /dev/null
@@ -0,0 +1,4 @@
+initial_config_primitive:
+- name: config
+  parameter:
+    proxied_ip: <rw_mgmt_ip>
diff --git a/descriptor-packages/src/nsd/ping_pong_ns/icons/rift_logo.png b/descriptor-packages/src/nsd/ping_pong_ns/icons/rift_logo.png
new file mode 100644 (file)
index 0000000..09b47c7
Binary files /dev/null and b/descriptor-packages/src/nsd/ping_pong_ns/icons/rift_logo.png differ
diff --git a/descriptor-packages/src/nsd/ping_pong_ns/ping_pong_nsd.yaml b/descriptor-packages/src/nsd/ping_pong_ns/ping_pong_nsd.yaml
new file mode 100644 (file)
index 0000000..268504c
--- /dev/null
@@ -0,0 +1,102 @@
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+#
+
+nsd:nsd-catalog:
+    nsd:nsd:
+     -  nsd:id: rift_ping_pong_ns
+        nsd:logo: rift_logo.png
+        nsd:name: ping_pong_ns
+        nsd:short-name: ping_pong_ns
+        nsd:vendor: RIFT.io
+        nsd:version: '1.1'
+        nsd:description: RIFT.io sample ping pong network service
+        nsd:constituent-vnfd:
+        -   nsd:member-vnf-index: '1'
+            nsd:vnfd-id-ref: rift_ping_vnf
+        -   nsd:member-vnf-index: '2'
+            nsd:vnfd-id-ref: rift_pong_vnf
+        nsd:initial-config-primitive:
+        -   nsd:name: start traffic
+            nsd:parameter:
+            -   nsd:name: port
+                nsd:value: 5555
+            -   nsd:name: ssh-username
+                nsd:value: fedora
+            -   nsd:name: ssh-password
+                nsd:value: fedora
+            nsd:seq: '1'
+            nsd:user-defined-script: start_traffic.py
+        nsd:input-parameter-xpath:
+        -   nsd:xpath: /nsd:nsd-catalog/nsd:nsd/nsd:vendor
+        nsd:ip-profiles:
+        -   nsd:description: Inter VNF Link
+            nsd:ip-profile-params:
+                nsd:gateway-address: 31.31.31.210
+                nsd:ip-version: ipv4
+                nsd:subnet-address: 31.31.31.0/24
+                nsd:dhcp-params:
+                  nsd:count: 200
+                  nsd:start-address: 31.31.31.2
+            nsd:name: InterVNFLink
+        nsd:placement-groups:
+        -   nsd:member-vnfd:
+            -   nsd:member-vnf-index-ref: '1'
+                nsd:vnfd-id-ref: rift_ping_vnf
+            -   nsd:member-vnf-index-ref: '2'
+                nsd:vnfd-id-ref: rift_pong_vnf
+            nsd:name: Orcus
+            nsd:requirement: Place this VM on the Kuiper belt object Orcus
+            nsd:strategy: COLOCATION
+        -   nsd:member-vnfd:
+            -   nsd:member-vnf-index-ref: '1'
+                nsd:vnfd-id-ref: rift_ping_vnf
+            -   nsd:member-vnf-index-ref: '2'
+                nsd:vnfd-id-ref: rift_pong_vnf
+            nsd:name: Quaoar
+            nsd:requirement: Place this VM on the Kuiper belt object Quaoar
+            nsd:strategy: COLOCATION
+        nsd:vld:
+        -   nsd:id: mgmt_vl
+            nsd:description: Management VL
+            nsd:name: mgmt_vl
+            nsd:short-name: mgmt_vl
+            nsd:type: ELAN
+            nsd:vendor: RIFT.io
+            nsd:version: '1.0'
+            nsd:mgmt-network: 'true'
+            nsd:vnfd-connection-point-ref:
+            -   nsd:member-vnf-index-ref: '1'
+                nsd:vnfd-connection-point-ref: ping_vnfd/cp0
+                nsd:vnfd-id-ref: rift_ping_vnf
+            -   nsd:member-vnf-index-ref: '2'
+                nsd:vnfd-connection-point-ref: pong_vnfd/cp0
+                nsd:vnfd-id-ref: rift_pong_vnf
+        -   nsd:id: ping_pong_vl1
+            nsd:description: Data VL
+            nsd:ip-profile-ref: InterVNFLink
+            nsd:name: data_vl
+            nsd:short-name: data_vl
+            nsd:type: ELAN
+            nsd:vendor: RIFT.io
+            nsd:version: '1.0'
+            nsd:vnfd-connection-point-ref:
+            -   nsd:member-vnf-index-ref: '1'
+                nsd:vnfd-connection-point-ref: ping_vnfd/cp1
+                nsd:vnfd-id-ref: rift_ping_vnf
+            -   nsd:member-vnf-index-ref: '2'
+                nsd:vnfd-connection-point-ref: pong_vnfd/cp1
+                nsd:vnfd-id-ref: rift_pong_vnf
diff --git a/descriptor-packages/src/nsd/ping_pong_ns/scripts/start_traffic.py b/descriptor-packages/src/nsd/ping_pong_ns/scripts/start_traffic.py
new file mode 100755 (executable)
index 0000000..87c309f
--- /dev/null
@@ -0,0 +1,223 @@
+#!/usr/bin/env python3
+
+############################################################################
+# Copyright 2016 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.         #
+# You may obtain a copy of the License at                                  #
+#                                                                          #
+#     http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                          #
+# Unless required by applicable law or agreed to in writing, software      #
+# distributed under the License is distributed on an "AS IS" BASIS,        #
+# 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 argparse
+import logging
+import paramiko
+import os
+import subprocess
+import sys
+import time
+
+import yaml
+
+
+def ssh(cmd, host, user, password):
+    """ Run an arbitrary command over SSH. """
+
+    client = paramiko.SSHClient()
+    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+
+    client.connect(host, port=22, username=user, password=password)
+
+    stdin, stdout, stderr = client.exec_command(cmd, get_pty=True)
+    retcode = stdout.channel.recv_exit_status()
+    client.close()
+
+    return (
+        retcode,
+        stdout.read().decode('utf-8').strip(),
+        stderr.read().decode('utf-8').strip()
+    )
+
+
+def start_traffic(yaml_cfg, logger):
+    '''Use curl and set admin status to enable on pong and ping vnfs'''
+
+    curl_fmt = 'curl -D /dev/stdout -H "Accept: application/vnd.yang.data' \
+                   '+xml" -H "Content-Type: application/vnd.yang.data+json" ' \
+                   '-X POST -d "{{ {data} }}" http://127.0.0.1:' \
+                   '{mgmt_port}/api/v1/{vnf_type}/{url}'
+
+    # Get userid and password for the VNF
+    user = yaml_cfg['parameter']['ssh-username']
+    passwd = yaml_cfg['parameter']['ssh-password']
+
+    # Get port from user parameter
+    service_port = yaml_cfg['parameter']['port']
+
+    service_ip = None
+
+    def exec_cmd(vnf_type, mgmt_ip, port, url, data):
+        curl_cmd = curl_fmt.format(
+            mgmt_port=port,
+            vnf_type=vnf_type,
+            data=data,
+            url=url
+        )
+
+        logger.debug("Executing cmd: %s", curl_cmd)
+        rc, out, err = ssh(curl_cmd, mgmt_ip, user, passwd)
+
+        if rc != 0:
+            logger.error("cmd={}, rc={}, stderr={}, stdout={}".
+                         format(curl_cmd, rc, err, out))
+        else:
+            logger.debug("cmd={}, rc={}, stderr={}, stdout={}".
+                         format(curl_cmd, rc, err, out))
+
+        return rc
+
+    def setup_service(mgmt_ip, port, vnf_type):
+        data = '\\"ip\\":\\"{}\\", \\"port\\":5555'.format(service_ip)
+        return exec_cmd(vnf_type, mgmt_ip, port, 'server', data)
+
+    def enable_service(mgmt_ip, port, vnf_type):
+        data='\\"enable\\":true'
+        url='adminstatus/state'
+        return exec_cmd(vnf_type, mgmt_ip, port, url, data)
+
+    # Enable pong service first
+    for index, vnfr in yaml_cfg['vnfr'].items():
+        logger.debug("VNFR {}: {}".format(index, vnfr))
+
+        def get_cp_ip(cp_name):
+            for cp in vnfr['connection_point']:
+                if cp['name'].endswith(cp_name):
+                    return cp['ip_address']
+
+        # Check if it is pong vnf
+        if 'pong_vnf' in vnfr['name']:
+            vnf_type = 'pong'
+            mgmt_ip = vnfr['mgmt_ip_address']
+            port = vnfr['mgmt_port']
+            service_ip = get_cp_ip('cp1')
+
+            max_tries = 60
+            tries = 0
+            while tries < max_tries:
+                rc = setup_service(mgmt_ip, port, vnf_type)
+                tries += 1
+                if rc != 0:
+                    logger.error("Setup service for pong failed ({}): {}".
+                                 format(tries, rc))
+                    if rc != 7:
+                        return rc
+                    else:
+                        time.sleep(1) # Sleep for 1 seconds
+                else:
+                    break
+
+            rc = enable_service(mgmt_ip, port, vnf_type)
+            if rc != 0:
+                logger.error("Enable service for pong failed: {}".
+                             format(rc))
+                return rc
+
+    # Add a delay to provide pong port to come up
+    time.sleep(1)
+
+    # Enable ping service next
+    for index, vnfr in yaml_cfg['vnfr'].items():
+        logger.debug("VNFR {}: {}".format(index, vnfr))
+
+        # Check if it is pong vnf
+        if 'ping_vnf' in vnfr['name']:
+            vnf_type = 'ping'
+            mgmt_ip = vnfr['mgmt_ip_address']
+            port = vnfr['mgmt_port']
+            if service_ip is None:
+                logger.error("Did not find pong ip!!")
+                return 1
+
+            max_tries = 30
+            tries = 0
+            while tries < max_tries:
+                rc = setup_service(mgmt_ip, port, vnf_type)
+                tries += 1
+                if rc != 0:
+                    logger.error("Setup service for ping failed ({}): {}".
+                                 format(tries, rc))
+                    if rc != 7:
+                        return rc
+                    else:
+                        time.sleep(1) # Sleep for 1 seconds
+                else:
+                    break
+
+            rc = enable_service(mgmt_ip, port, vnf_type)
+            if rc != 0:
+                logger.error("Enable service for ping failed: {}".
+                             format(rc))
+
+    return rc
+
+
+def main(argv=sys.argv[1:]):
+    try:
+        parser = argparse.ArgumentParser()
+        parser.add_argument("yaml_cfg_file", type=argparse.FileType('r'))
+        parser.add_argument("-q", "--quiet", dest="verbose", action="store_false")
+        args = parser.parse_args()
+
+        run_dir = os.path.join(os.environ['RIFT_INSTALL'], "var/run/rift")
+        if not os.path.exists(run_dir):
+            os.makedirs(run_dir)
+        log_file = "{}/ping_pong_start_traffic-{}.log".format(run_dir, time.strftime("%Y%m%d%H%M%S"))
+
+        # logging.basicConfig(filename=log_file, level=logging.DEBUG)
+        logger = logging.getLogger('ping-pong-start-traffic')
+        logger.setLevel(logging.DEBUG)
+
+        fh = logging.FileHandler(log_file)
+        fh.setLevel(logging.DEBUG)
+
+        ch = logging.StreamHandler()
+        if args.verbose:
+            ch.setLevel(logging.DEBUG)
+        else:
+            ch.setLevel(logging.INFO)
+
+        # create formatter and add it to the handlers
+        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+        fh.setFormatter(formatter)
+        ch.setFormatter(formatter)
+        logger.addHandler(fh)
+        logger.addHandler(ch)
+
+    except Exception as e:
+        logger.exception("Exception in {}: {}".format(__file__, e))
+        sys.exit(1)
+
+    try:
+        logger.debug("Input file: {}".format(args.yaml_cfg_file.name))
+        yaml_str = args.yaml_cfg_file.read()
+        yaml_cfg = yaml.load(yaml_str)
+        logger.debug("Input YAML: {}".format(yaml_cfg))
+
+        rc = start_traffic(yaml_cfg, logger)
+        logger.info("Return code: {}".format(rc))
+        sys.exit(rc)
+
+    except Exception as e:
+        logger.exception("Exception in {}: {}".format(__file__, e))
+        sys.exit(1)
+
+if __name__ == "__main__":
+    main()
diff --git a/descriptor-packages/src/nsd/ref1_ns/ref1_nsd.yaml b/descriptor-packages/src/nsd/ref1_ns/ref1_nsd.yaml
new file mode 100644 (file)
index 0000000..465537c
--- /dev/null
@@ -0,0 +1,39 @@
+nsd:nsd-catalog:
+    nsd:
+    -   constituent-vnfd:
+        -   member-vnf-index: '1'
+            start-by-default: 'true'
+            vnfd-id-ref: Ref_Vnf_11
+        -   member-vnf-index: '2'
+            vnfd-id-ref: Ref_Vnf_21
+        description: Reference NS 1
+        id: Ref_NS_1
+        name: Ref_NS_1
+        vendor: ETSI
+        vld:
+        -   description: Mgmt VL
+            id: 54c04
+            name: VL1
+            short-name: VL1
+            type: ELAN
+            vendor: ETSI
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-id-ref: Ref_Vnf_11
+                vnfd-connection-point-ref: mgmt0
+            -   member-vnf-index-ref: '2'
+                vnfd-id-ref: Ref_Vnf_21
+                vnfd-connection-point-ref: mgmt
+        -   description: Data VL
+            id: 54c03
+            name: VL2
+            short-name: VL2
+            type: ELAN
+            vendor: ETSI
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: west
+                vnfd-id-ref: Ref_Vnf_11
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: data
+                vnfd-id-ref: Ref_Vnf_21
diff --git a/descriptor-packages/src/nsd/ref2_ns/ref2_nsd.yaml b/descriptor-packages/src/nsd/ref2_ns/ref2_nsd.yaml
new file mode 100644 (file)
index 0000000..281fdee
--- /dev/null
@@ -0,0 +1,40 @@
+nsd:nsd-catalog:
+    nsd:
+    -   constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: Ref_Vnf_12
+        -   member-vnf-index: '2'
+            vnfd-id-ref: Ref_Vnf_22
+        description: Reference NS2
+        id: Ref_NS_2
+        name: Ref_NS_2
+        vendor: ETSI
+        vld:
+        -   id: '97465'
+            name: VL1
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: mgmt0
+                vnfd-id-ref: Ref_Vnf_12
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: mgmt
+                vnfd-id-ref: Ref_Vnf_22
+        -   id: f66e6
+            name: VL2
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: east
+                vnfd-id-ref: Ref_Vnf_12
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: east
+                vnfd-id-ref: Ref_Vnf_22
+        -   id: b72e9
+            name: VL3
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: west
+                vnfd-id-ref: Ref_Vnf_12
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: west
+                vnfd-id-ref: Ref_Vnf_22
+
diff --git a/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/icons/osm_2x.png b/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/ubuntu_cirros_multidisk_nsd.yaml b/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/ubuntu_cirros_multidisk_nsd.yaml
new file mode 100644 (file)
index 0000000..cbbe6a2
--- /dev/null
@@ -0,0 +1,32 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: ubuntu_cirros_multidisk_nsd
+        name: ubuntu_cirros_multidisk_nsd
+        short-name: ubuntu_cirros_multidisk_nsd
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: osm_2x.png
+
+        # Specify the VNFDs that are part of this NSD
+        constituent-vnfd:
+            # The member-vnf-index needs to be unique, starting from 1
+            # vnfd-id-ref is the id of the VNFD
+            # Multiple constituent VNFDs can be specified
+        -   member-vnf-index: 1
+            vnfd-id-ref: ubuntu_cirros_multidisk_vnfd
+
+        vld:
+        # Networks for the VNFs
+            -   id: ubuntu_cirros_multidisk_nsd_vld1
+                name: management
+                short-name: management
+                type: ELAN
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                -   member-vnf-index-ref: 1
+                    vnfd-id-ref: ubuntu_cirros_multidisk_vnfd
+                    # NOTE: Validate the entry below
+                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/src/nsd/ubuntu_xenial_ns/icons/osm_2x.png b/descriptor-packages/src/nsd/ubuntu_xenial_ns/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/nsd/ubuntu_xenial_ns/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/nsd/ubuntu_xenial_ns/ubuntu_xenial_nsd.yaml b/descriptor-packages/src/nsd/ubuntu_xenial_ns/ubuntu_xenial_nsd.yaml
new file mode 100644 (file)
index 0000000..7f91d43
--- /dev/null
@@ -0,0 +1,40 @@
+nsd:nsd-catalog:
+    nsd:
+    -   id: ubuntu_xenial_nsd
+        name: ubuntu_xenial_ns
+        short-name: ubuntu_xenial_ns
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: osm_2x.png
+
+        # Specify the VNFDs that are part of this NSD
+        constituent-vnfd:
+            # The member-vnf-index needs to be unique, starting from 1
+            # vnfd-id-ref is the id of the VNFD
+            # Multiple constituent VNFDs can be specified
+        -   member-vnf-index: 1
+            vnfd-id-ref: ubuntu_xenial_vnfd
+
+        vld:
+        # Networks for the VNFs
+            -   id: ubuntu_xenial_nsd_vld1
+                name: management
+                short-name: management
+                type: ELAN
+                vim-network-name: net-mgmtOS
+                # vim-network-name: <update>
+                # provider-network:
+                #     overlay-type: VLAN
+                #     segmentation_id: <update>
+                vnfd-connection-point-ref:
+                # Specify the constituent VNFs
+                # member-vnf-index-ref - entry from constituent vnf
+                # vnfd-id-ref - VNFD id
+                # vnfd-connection-point-ref - connection point name in the VNFD
+                -   nsd:member-vnf-index-ref: 1
+                    nsd:vnfd-id-ref: ubuntu_xenial_vnfd
+                    # NOTE: Validate the entry below
+                    nsd:vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/src/vnfd/VyOS_vnf/VyOS__vnfd.yaml b/descriptor-packages/src/vnfd/VyOS_vnf/VyOS__vnfd.yaml
new file mode 100644 (file)
index 0000000..0ac926f
--- /dev/null
@@ -0,0 +1,106 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: VyOS
+        name: VyOS
+        short-name: VyOS
+        description: VyOS Router
+        logo: osm_2x.png
+        mgmt-interface:
+            vdu-id: VyOS-VM
+        vnf-configuration:
+            config-attributes:
+                config-delay: '0'
+                config-priority: '1'
+            service-primitive:
+            -   name: config
+                parameter:
+                -   name: user
+                    data-type: STRING
+                    mandatory: 'true'
+                    default-value: vyos
+                -   name: pass
+                    data-type: STRING
+                    mandatory: 'true'
+                    default-value: vyos
+            -   name: ping
+                parameter:
+                -   name: destination
+                    data-type: STRING
+                    mandatory: 'true'
+                -   name: count
+                    data-type: INTEGER
+                    mandatory: 'false'
+                    default-value: 5
+            initial-config-primitive:
+            -   name: config
+                parameter:
+                -   name: hostname
+                    value: <rw_mgmt_ip>
+                -   name: pass
+                    value: vyos
+                seq: '1'
+            juju:
+                charm: vyos-proxy
+        connection-point:
+        -   name: eth0
+            type: VPORT
+        -   name: eth1
+            type: VPORT
+        -   name: eth2
+            type: VPORT
+        -   name: eth3
+            type: VPORT
+        -   name: eth4
+            type: VPORT
+        vdu:
+        -   id: VyOS-VM
+            name: VyOS-VM
+            description: VyOS-VM
+            image: /mnt/powervault/virtualization/osm/VyOS/VyOS-1.1.7-signed-disk1.qcow2
+            vm-flavor:
+                memory-mb: '1024'
+                storage-gb: '40'
+                vcpu-count: '1'
+            mgmt-vpci: 0000:00:0a.0
+            external-interface:
+            -   name: eth0
+                virtual-interface:
+                    bandwidth: '0'
+                    type: OM-MGMT
+                    vpci: 0000:00:0a.0
+                vnfd-connection-point-ref: eth0
+            -   name: eth1
+                virtual-interface:
+                    bandwidth: '0'
+                    type: VIRTIO
+                    vpci: 0000:00:0b.0
+                vnfd-connection-point-ref: eth1
+            -   name: eth2
+                virtual-interface:
+                    bandwidth: '0'
+                    type: VIRTIO
+                    vpci: 0000:00:0c.0
+                vnfd-connection-point-ref: eth2
+            -   name: eth3
+                virtual-interface:
+                    bandwidth: '0'
+                    type: VIRTIO
+                    vpci: 0000:00:0d.0
+                vnfd-connection-point-ref: eth3
+            -   name: eth4
+                virtual-interface:
+                    bandwidth: '0'
+                    type: VIRTIO
+                    vpci: 0000:00:0e.0
+                vnfd-connection-point-ref: eth4
+            guest-epa:
+                cpu-pinning-policy: DEDICATED
+                cpu-thread-pinning-policy: PREFER
+                mempage-size: LARGE
+                numa-node-policy:
+                    mem-policy: STRICT
+                    node:
+                    -   id: '0'
+                        paired-threads:
+                            num-paired-threads: '1'
+                    node-cnt: '1'
diff --git a/descriptor-packages/src/vnfd/VyOS_vnf/icons/osm_2x.png b/descriptor-packages/src/vnfd/VyOS_vnf/icons/osm_2x.png
new file mode 100644 (file)
index 0000000..62012d2
Binary files /dev/null and b/descriptor-packages/src/vnfd/VyOS_vnf/icons/osm_2x.png differ
diff --git a/descriptor-packages/src/vnfd/cirros_vnf/cirros_vnfd.yaml b/descriptor-packages/src/vnfd/cirros_vnf/cirros_vnfd.yaml
new file mode 100644 (file)
index 0000000..e643b38
--- /dev/null
@@ -0,0 +1,47 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: cirros_vnfd
+        name: cirros_vnf
+        short-name: cirros_vnf
+        description: Simple VNF example with a cirros 
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: cirros-64.png
+
+        # Management interface
+        mgmt-interface:
+            vdu-id: cirros_vnfd-VM
+
+        # Atleast one VDU need to be specified
+        vdu:
+        -   id: cirros_vnfd-VM
+            name: cirros_vnfd-VM
+            description: cirros_vnfd-VM
+            count: 1
+
+            # Flavour of the VM to be instantiated for the VDU
+            # flavor below can fit into m1.micro
+            vm-flavor:
+                vcpu-count: 1
+                memory-mb: 256
+                storage-gb: 2
+
+            # Image/checksum or image including the full path
+            image: 'CirrOS 0.3.4 64-bit'
+            #checksum: 
+
+            external-interface:
+            # Specify the external interfaces
+            # There can be multiple interfaces defined
+            -   name: eth0
+                virtual-interface:
+                    type: OM-MGMT
+                    bandwidth: '0'
+                    vpci: 0000:00:0a.0
+                vnfd-connection-point-ref: eth0
+
+        connection-point:
+            -   name: eth0
+                type: VPORT
diff --git a/descriptor-packages/src/vnfd/cirros_vnf/icons/cirros-64.png b/descriptor-packages/src/vnfd/cirros_vnf/icons/cirros-64.png
new file mode 100644 (file)
index 0000000..5725d29
Binary files /dev/null and b/descriptor-packages/src/vnfd/cirros_vnf/icons/cirros-64.png differ
diff --git a/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/IMS-ALLIN1__vnfd.yaml b/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/IMS-ALLIN1__vnfd.yaml
new file mode 100644 (file)
index 0000000..b73e110
--- /dev/null
@@ -0,0 +1,84 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: IMS-ALLIN1_2p
+        name: IMS-ALLIN1_2p
+        short-name: IMS-ALLIN1_2p
+        description: IMS-ALLIN1_2p
+        logo: metaswitch_2x.png
+        mgmt-interface:
+            vdu-id: IMS-ALLIN1_2p-VM
+        vnf-configuration:
+            config-attributes:
+                config-delay: '0'
+                config-priority: '1'
+            service-primitive:
+            -   name: config
+                parameter:
+                -   name: home_domain
+                    data-type: STRING
+                    mandatory: 'true'
+                    default-value: ims.com
+                -   name: password
+                    data-type: string
+                    mandatory: 'true'
+                    default-value: cw-aio
+            -   name: create-update-user
+                parameter:
+                -   name: number
+                    data-type: STRING
+                    mandatory: 'true'
+                -   name: password
+                    data-type: STRING
+                    mandatory: 'true'
+            -   name: delete-user
+                parameter:
+                -   name: number
+                    data-type: STRING
+                    mandatory: 'true'
+            initial-config-primitive:
+            -   name: config
+                parameter:
+                -   name: proxied_ip
+                    value: <rw_mgmt_ip>
+                seq: '1'
+            juju:
+                charm: clearwater-aio-proxy
+        connection-point:
+        -   name: eth0
+            type: VPORT
+        -   name: eth1
+            type: VPORT
+        vdu:
+        -   id: IMS-ALLIN1_2p-VM
+            name: IMS-ALLIN1_2p-VM
+            description: IMS-ALLIN1_2p-VM
+            image: /mnt/powervault/virtualization/vnfs/demos/mwc2016/allin1.qcow2
+            vm-flavor:
+                memory-mb: '4096'
+                storage-gb: '10'
+                vcpu-count: '2'
+            mgmt-vpci: 0000:00:0a.0
+            external-interface:
+            -   name: eth0
+                virtual-interface:
+                    bandwidth: '0'
+                    type: VIRTIO
+                    vpci: 0000:00:0a.0
+                vnfd-connection-point-ref: eth0
+            -   name: eth1
+                virtual-interface:
+                    bandwidth: '0'
+                    type: OM-MGMT
+                    vpci: 0000:00:0b.0
+                vnfd-connection-point-ref: eth1
+            guest-epa:
+                cpu-pinning-policy: DEDICATED
+                cpu-thread-pinning-policy: PREFER
+                mempage-size: LARGE
+                numa-node-policy:
+                    mem-policy: STRICT
+                    node:
+                    -   id: '0'
+                        paired-threads:
+                            num-paired-threads: '1'
+                    node-cnt: '1'
diff --git a/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/icons/metaswitch_2x.png b/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/icons/metaswitch_2x.png
new file mode 100644 (file)
index 0000000..a899bc8
Binary files /dev/null and b/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/icons/metaswitch_2x.png differ
diff --git a/descriptor-packages/src/vnfd/ping_vnf/cloud_init/ping_cloud_init.cfg b/descriptor-packages/src/vnfd/ping_vnf/cloud_init/ping_cloud_init.cfg
new file mode 100644 (file)
index 0000000..81a13ed
--- /dev/null
@@ -0,0 +1,4 @@
+#cloud-config
+password: fedora
+chpasswd: { expire: False }
+ssh_pwauth: True
diff --git a/descriptor-packages/src/vnfd/ping_vnf/icons/rift_logo.png b/descriptor-packages/src/vnfd/ping_vnf/icons/rift_logo.png
new file mode 100644 (file)
index 0000000..09b47c7
Binary files /dev/null and b/descriptor-packages/src/vnfd/ping_vnf/icons/rift_logo.png differ
diff --git a/descriptor-packages/src/vnfd/ping_vnf/ping_vnfd.yaml b/descriptor-packages/src/vnfd/ping_vnf/ping_vnfd.yaml
new file mode 100644 (file)
index 0000000..60f00cf
--- /dev/null
@@ -0,0 +1,119 @@
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+#
+
+vnfd:vnfd-catalog:
+    vnfd:vnfd:
+     -  id: rift_ping_vnf
+        name: ping_vnf
+        short-name: ping_vnf
+        logo: rift_logo.png
+        vendor: RIFT.io
+        version: '1.1'
+        description: This is an example RIFT.ware VNF
+        connection-point:
+        -   name: ping_vnfd/cp0
+            type: VPORT
+        -   name: ping_vnfd/cp1
+            type: VPORT
+        http-endpoint:
+        -   path: api/v1/ping/stats
+            polling_interval_secs: '2'
+            port: '18888'
+        mgmt-interface:
+            dashboard-params:
+                path: api/v1/ping/stats
+                port: '18888'
+            port: '18888'
+            vdu-id: iovdu_0
+        placement-groups:
+        -   member-vdus:
+            -   member-vdu-ref: iovdu_0
+            name: Eris
+            requirement: Place this VM on the Kuiper belt object Eris
+            strategy: COLOCATION
+        vdu:
+        -   cloud-init-file: ping_cloud_init.cfg
+            count: '1'
+            external-interface:
+            -   name: eth0
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: ping_vnfd/cp0
+            -   name: eth1
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: ping_vnfd/cp1
+            id: iovdu_0
+            image: Fedora-x86_64-20-20131211.1-sda-ping.qcow2
+            name: iovdu_0
+            vm-flavor:
+                memory-mb: '512'
+                storage-gb: '4'
+                vcpu-count: '1'
+        vnf-configuration:
+            config-attributes:
+                config-delay: 10
+            service-primitive:
+            -   name: start
+            -   name: stop
+            -   name: restart
+            -   name: config
+                parameter:
+                -   data-type: STRING
+                    default-value: <rw_mgmt_ip>
+                    name: ssh-hostname
+                -   data-type: STRING
+                    default-value: fedora
+                    name: ssh-username
+                -   data-type: STRING
+                    default-value: fedora
+                    name: ssh-password
+                -   data-type: STRING
+                    name: ssh-private-key
+                -   data-type: STRING
+                    default-value: ping
+                    name: mode
+                    read-only: 'true'
+            -   name: set-server
+                parameter:
+                -   data-type: STRING
+                    name: server-ip
+                -   data-type: INTEGER
+                    name: server-port
+            -   name: set-rate
+                parameter:
+                -   data-type: INTEGER
+                    default-value: '5'
+                    name: rate
+            -   name: start-traffic
+            -   name: stop-traffic
+            initial-config-primitive:
+            -   name: config
+                parameter:
+                -   name: ssh-hostname
+                    value: <rw_mgmt_ip>
+                -   name: ssh-username
+                    value: fedora
+                -   name: ssh-password
+                    value: fedora
+                -   name: mode
+                    value: ping
+                seq: '1'
+            -   name: start
+                seq: '2'
+            juju:
+                charm: pingpong
diff --git a/descriptor-packages/src/vnfd/pong_vnf/cloud_init/pong_cloud_init.cfg b/descriptor-packages/src/vnfd/pong_vnf/cloud_init/pong_cloud_init.cfg
new file mode 100644 (file)
index 0000000..81a13ed
--- /dev/null
@@ -0,0 +1,4 @@
+#cloud-config
+password: fedora
+chpasswd: { expire: False }
+ssh_pwauth: True
diff --git a/descriptor-packages/src/vnfd/pong_vnf/icons/rift_logo.png b/descriptor-packages/src/vnfd/pong_vnf/icons/rift_logo.png
new file mode 100644 (file)
index 0000000..09b47c7
Binary files /dev/null and b/descriptor-packages/src/vnfd/pong_vnf/icons/rift_logo.png differ
diff --git a/descriptor-packages/src/vnfd/pong_vnf/pong_vnfd.yaml b/descriptor-packages/src/vnfd/pong_vnf/pong_vnfd.yaml
new file mode 100644 (file)
index 0000000..b6bc9a1
--- /dev/null
@@ -0,0 +1,114 @@
+#
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   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.
+#
+#
+
+vnfd:vnfd-catalog:
+    vnfd:
+     -  id: rift_pong_vnf
+        name: pong_vnf
+        short-name: pong_vnf
+        logo: rift_logo.png
+        vendor: RIFT.io
+        version: '1.1'
+        description: This is an example RIFT.ware VNF
+        connection-point:
+        -   name: pong_vnfd/cp0
+            type: VPORT
+        -   name: pong_vnfd/cp1
+            type: VPORT
+        http-endpoint:
+        -   path: api/v1/pong/stats
+            polling_interval_secs: '2'
+            port: '18889'
+        mgmt-interface:
+            dashboard-params:
+                path: api/v1/pong/stats
+                port: '18889'
+            port: '18889'
+            vdu-id: iovdu_0
+        placement-groups:
+        -   member-vdus:
+            -   member-vdu-ref: iovdu_0
+            name: Weywot
+            requirement: Place this VM on the Kuiper belt object Weywot
+            strategy: COLOCATION
+        vdu:
+        -   cloud-init-file: pong_cloud_init.cfg
+            count: '1'
+            external-interface:
+            -   name: eth0
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: pong_vnfd/cp0
+            -   name: eth1
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: pong_vnfd/cp1
+            id: iovdu_0
+            image: Fedora-x86_64-20-20131211.1-sda-pong.qcow2
+            name: iovdu_0
+            vm-flavor:
+                memory-mb: '512'
+                storage-gb: '4'
+                vcpu-count: '1'
+        vnf-configuration:
+            config-attributes:
+                config-delay: 10
+            service-primitive:
+            -   name: start
+            -   name: stop
+            -   name: restart
+            -   name: config
+                parameter:
+                -   data-type: STRING
+                    default-value: <rw_mgmt_ip>
+                    name: ssh-hostname
+                -   data-type: STRING
+                    default-value: fedora
+                    name: ssh-username
+                -   data-type: STRING
+                    default-value: fedora
+                    name: ssh-password
+                -   data-type: STRING
+                    name: ssh-private-key
+                -   data-type: STRING
+                    default-value: pong
+                    name: mode
+                    read-only: 'true'
+            -   name: set-server
+                parameter:
+                -   data-type: STRING
+                    name: server-ip
+                -   data-type: INTEGER
+                    name: server-port
+            -   name: start-traffic
+            -   name: stop-traffic
+            initial-config-primitive:
+            -   name: config
+                parameter:
+                -   name: ssh-hostname
+                    value: <rw_mgmt_ip>
+                -   name: ssh-username
+                    value: fedora
+                -   name: ssh-password
+                    value: fedora
+                -   name: mode
+                    value: pong
+                seq: '1'
+            -   name: start
+                seq: '2'
+            juju:
+                charm: pingpong
diff --git a/descriptor-packages/src/vnfd/ref11_vnf/ref11_vnfd.yaml b/descriptor-packages/src/vnfd/ref11_vnf/ref11_vnfd.yaml
new file mode 100644 (file)
index 0000000..f308282
--- /dev/null
@@ -0,0 +1,66 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   connection-point:
+        -   name: mgmt0
+            type: VPORT
+        -   name: west
+            type: VPORT
+        description: A simple VNF descriptor w/ VM1 and VM2
+        id: Ref_Vnf_11
+        name: Ref_VNF_11
+        short-name: Ref_VNF_11
+        internal-vld:
+        -   description: Internal VL
+            id: VL12
+            name: VL12
+            short-name: VL12
+            type: ELAN
+            vendor: ETSI
+            internal-connection-point:
+            -   id-ref: 'iface11'
+            -   id-ref: 'iface21'
+        vdu:
+        -   external-interface:
+            -   name: iface10
+                virtual-interface:
+                    type: OM-MGMT
+                vnfd-connection-point-ref: mgmt0
+            internal-interface:
+            -   name: iface11
+                virtual-interface:
+                    type: VIRTIO
+                vdu-internal-connection-point-ref: iface11
+            internal-connection-point:
+            -   name: iface11
+                id: iface11
+                type: VPORT
+            id: Ref_VM1
+            image: ref_vm1.qcow2
+            name: Ref_VM1
+            vm-flavor:
+                memory-mb: '2048'
+                storage-gb: '8'
+                vcpu-count: '2'
+        -   external-interface:
+            -   name: iface22
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: west
+            internal-interface:
+            -   name: iface21
+                virtual-interface:
+                    type: VIRTIO
+                vdu-internal-connection-point-ref: iface21
+            internal-connection-point:
+            -   name: iface21
+                id: iface21
+                type: VPORT
+            id: Ref_VM2
+            image: ref_vm2.qcow2
+            name: Ref_VM2
+            vm-flavor:
+                memory-mb: '4096'
+                storage-gb: '16'
+                vcpu-count: '2'
+        vendor: ETSI
+        version: '1.0'
diff --git a/descriptor-packages/src/vnfd/ref12_vnf/ref12_vnfd.yaml b/descriptor-packages/src/vnfd/ref12_vnf/ref12_vnfd.yaml
new file mode 100644 (file)
index 0000000..2901c4a
--- /dev/null
@@ -0,0 +1,73 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   connection-point:
+        -   name: mgmt0
+            type: VPORT
+        -   name: west
+            type: VPORT
+        -   name: east
+            type: VPORT
+        description: A simple VNF descriptor w/ two VDU
+        id: Ref_Vnf_12
+        name: Ref_Vnf_12
+        short-name: Ref_Vnf_12
+        internal-vld:
+        -   description: Internal VL
+            id: VL34
+            name: VL34
+            short-name: VL34
+            type: ELAN
+            vendor: ETSI
+            internal-connection-point:
+            -   id-ref: 'iface31'
+            -   id-ref: 'iface41'
+        vdu:
+        -   description: Middlepoint
+            external-interface:
+            -   name: iface30
+                virtual-interface:
+                    type: OM-MGMT
+                vnfd-connection-point-ref: mgmt0
+            guest-epa:
+                cpu-pinning-policy: DEDICATED
+                mempage-size: "LARGE"
+            id: a3a2f
+            image: ref_vm3.qcow2
+            internal-connection-point:
+            -   id: iface31
+                name: iface31
+                type: VPORT
+            internal-interface:
+            -   name: iface31
+                vdu-internal-connection-point-ref: iface31
+                virtual-interface:
+                    type: VIRTIO
+            name: Ref_VM3
+            vm-flavor:
+                memory-mb: '2048'
+                storage-gb: '8'
+                vcpu-count: '2'
+        -   external-interface:
+            -   name: iface42
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                vnfd-connection-point-ref: west
+            -   name: iface43
+                virtual-interface:
+                    type: SR-IOV
+                vnfd-connection-point-ref: east
+            guest-epa:
+                cpu-pinning-policy: DEDICATED
+            id: e526e
+            internal-connection-point:
+            -   id: iface41
+                name: iface41
+                type: VPORT
+            name: Ref_VM4
+            internal-interface:
+            -   name: iface41
+                vdu-internal-connection-point-ref: iface41
+                virtual-interface:
+                    type: VIRTIO
+        vendor: ETSI
+        version: '1.0'
diff --git a/descriptor-packages/src/vnfd/ref21_vnf/ref21_vnfd.yaml b/descriptor-packages/src/vnfd/ref21_vnf/ref21_vnfd.yaml
new file mode 100644 (file)
index 0000000..390ab9d
--- /dev/null
@@ -0,0 +1,30 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   connection-point:
+        -   name: mgmt
+            type: VPORT
+        -   name: data
+            type: VPORT
+        description: A simple VNF descriptor w/ one VDU
+        id: Ref_Vnf_21
+        name: Ref_Vnf_21
+        short-name: Ref_Vnf_21
+        vdu:
+        -   external-interface:
+            -   name: iface50
+                virtual-interface:
+                    type: OM-MGMT
+                vnfd-connection-point-ref: mgmt
+            -   name: iface51
+                virtual-interface:
+                    type: VIRTIO
+                vnfd-connection-point-ref: data
+            id: ref_vm21
+            image: ref_vm21.qcow2
+            name: Ref_VM_5
+            vm-flavor:
+                memory-mb: '1024'
+                storage-gb: '16'
+                vcpu-count: '1'
+        vendor: ETSI
+        version: '1.0'
diff --git a/descriptor-packages/src/vnfd/ref22_vnf/ref22_vnfd.yaml b/descriptor-packages/src/vnfd/ref22_vnf/ref22_vnfd.yaml
new file mode 100644 (file)
index 0000000..7dddc6f
--- /dev/null
@@ -0,0 +1,39 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   connection-point:
+        -   name: mgmt
+            type: VPORT
+        -   name: west
+            type: VPORT
+        -   name: east
+            type: VPORT
+        description: A simple VNF descriptor w/ one VDU
+        id: Ref_Vnf_22
+        name: Ref_VNF_22
+        short-name: Ref_VNF_22
+        vdu:
+        -   external-interface:
+            -   name: iface60
+                virtual-interface:
+                    type: OM-MGMT
+                vnfd-connection-point-ref: mgmt
+            -   name: iface61
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                vnfd-connection-point-ref: west
+            -   name: iface62
+                virtual-interface:
+                    type: SR-IOV
+                vnfd-connection-point-ref: east
+            id: abd6831e-f811-4580-9aad-1de9c6424180
+            image: ref_vm22.qcow2
+            name: Ref_VM6
+            guest-epa:
+                cpu-pinning-policy: DEDICATED
+                mempage-size: "LARGE"
+            vm-flavor:
+                memory-mb: '1024'
+                storage-gb: '16'
+                vcpu-count: '1'
+        vendor: ETSI
+        version: '1.0'
diff --git a/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/cloud_init/cloud_init.cfg b/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/cloud_init/cloud_init.cfg
new file mode 100644 (file)
index 0000000..d1c2188
--- /dev/null
@@ -0,0 +1,5 @@
+#cloud-config
+password: ubuntu
+chpasswd: { expire: False }
+ssh_pwauth: True
+
diff --git a/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/ubuntu_cirros_multidisk_vnfd.yaml b/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/ubuntu_cirros_multidisk_vnfd.yaml
new file mode 100644 (file)
index 0000000..da037b1
--- /dev/null
@@ -0,0 +1,53 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: ubuntu_cirros_multidisk_vnfd
+        name: ubuntu_cirros_multidisk_vnfd
+        short-name: ubuntu_cirros_multidisk_vnfd
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Management interface
+        mgmt-interface:
+            vdu-id: ubuntu_cirros_multidisk_vnfd-VM
+
+        # Atleast one VDU need to be specified
+        vdu:
+        -   id: ubuntu_cirros_multidisk_vnfd-VM
+            name: ubuntu_cirros_multidisk_vnfd-VM
+            description: ubuntu_cirros_multidisk_vnfd-VM
+            count: 1
+
+            # Flavour of the VM to be instantiated for the VDU
+            vm-flavor:
+                vcpu-count: 2
+                memory-mb: 4096
+                storage-gb: 10
+
+            # User-data injection
+            cloud-init-file: cloud_init.cfg
+
+            external-interface:
+            # Specify the external interfaces
+            # There can be multiple interfaces defined
+            -   name: eth0
+                virtual-interface:
+                    type: OM-MGMT
+                vnfd-connection-point-ref: eth0
+            # Specify the volume
+            # There can be multiple interfaces defined
+            volumes:
+            -   name: vda
+                device-type: disk
+                image: UbuntuXenial
+                image-checksum: 4a293322f18827af81a9450e3792947c
+                size: 10
+            -   name: vdb
+                device-type: disk
+                image: cirros-0.3.4-x86_64-disk.img
+                image-checksum: ee1eca47dc88f4879d8a229cc70a07c6
+                size: 8
+
+        connection-point:
+            -   name: eth0
+                type: VPORT
diff --git a/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/cloud_init/cloud_init.cfg b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/cloud_init/cloud_init.cfg
new file mode 100644 (file)
index 0000000..d1c2188
--- /dev/null
@@ -0,0 +1,5 @@
+#cloud-config
+password: ubuntu
+chpasswd: { expire: False }
+ssh_pwauth: True
+
diff --git a/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/icons/ubuntu-logo14.png b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/icons/ubuntu-logo14.png
new file mode 100644 (file)
index 0000000..e966783
Binary files /dev/null and b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/icons/ubuntu-logo14.png differ
diff --git a/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/ubuntu_xenial_vnfd.yaml b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/ubuntu_xenial_vnfd.yaml
new file mode 100644 (file)
index 0000000..ee6a3ac
--- /dev/null
@@ -0,0 +1,48 @@
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: ubuntu_xenial_vnfd
+        name: ubuntu_xenial_vnf
+        short-name: ubuntu_xenial_vnf
+        description: Generated by OSM pacakage generator
+        vendor: OSM
+        version: '1.0'
+
+        # Place the logo as png in icons directory and provide the name here
+        logo: ubuntu-logo14.png
+
+        # Management interface
+        mgmt-interface:
+            vdu-id: ubuntu_xenial_vnfd-VM
+
+        # Atleast one VDU need to be specified
+        vdu:
+        -   id: ubuntu_xenial_vnfd-VM
+            name: ubuntu_xenial_vnfd-VM
+            description: ubuntu_xenial_vnfd-VM
+            count: 1
+
+            # Flavour of the VM to be instantiated for the VDU
+            vm-flavor:
+                vcpu-count: 2
+                memory-mb: 4096
+                storage-gb: 10
+
+            # Image including the full path
+            image: '/mnt/powervault/virtualization/vnfs/demos/ubuntu/ubuntu-16.04.img'
+
+            # User-data injection
+            cloud-init-file: cloud_init.cfg
+
+            external-interface:
+            # Specify the external interfaces
+            # There can be multiple interfaces defined
+            -   name: eth0
+                virtual-interface:
+                    type: OM-MGMT
+                    bandwidth: '0'
+                    vpci: 0000:00:0a.0
+                vnfd-connection-point-ref: eth0
+
+        connection-point:
+            -   name: eth0
+                type: VPORT