From: Admin Date: Fri, 23 Jun 2017 08:36:52 +0000 (+0200) Subject: Merge branch 'branchfrom--descriptor-packages' X-Git-Tag: v2.0.2~6 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=8f83069696a74f3fc9272a5c65d5e75e923e7ff9;hp=c7a82d0be7c72183e6db9e0fb522b484f9c8df84;p=osm%2Fdevops.git Merge branch 'branchfrom--descriptor-packages' --- diff --git a/descriptor-packages/Makefile b/descriptor-packages/Makefile new file mode 100644 index 00000000..793f30c0 --- /dev/null +++ b/descriptor-packages/Makefile @@ -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 index 00000000..9d3482d5 --- /dev/null +++ b/descriptor-packages/README @@ -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 index 00000000..07761d2f --- /dev/null +++ b/descriptor-packages/src/gen_nsd_pkg.sh @@ -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 + +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 index 00000000..81a655c9 --- /dev/null +++ b/descriptor-packages/src/gen_vnfd_pkg.sh @@ -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 + +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 index 00000000..a09fb6af --- /dev/null +++ b/descriptor-packages/src/generate_descriptor_pkg.sh @@ -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 + +# 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 <] [-N] [-c] [base-directory] + + -h|--help : show this message + + -t|--package-type : 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 : 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 <$desc_file < + + # 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 <>$desc_file <>$desc_file <>$desc_file <>$desc_file <>$desc_file <>$desc_file <>$desc_file < + # service-primitive: + # - name: config + # parameter: + # - name: + # data-type: [STRING|INTEGER] + # mandatory: [true|false] + # default-value: + # - name: + # parameter: + # - name: + # data-type: [STRING|INTEGER] + # mandatory: [true|false] + # default-value: + # initial-config-primitive: + # - name: config + # parameter: + # - name: + # value: + # - name: + # parameter: + # - name: + # 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 < + + # 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 <>$desc_file < + # provider-network: + # overlay-type: VLAN + # segmentation_id: + 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 < + # provider-network: + # overlay-type: VLAN + # segmentation_id: + 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 <&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 index 00000000..4b833fed --- /dev/null +++ b/descriptor-packages/src/nsd/VyOS_ns/VyOS_nsd.yaml @@ -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 index 00000000..62012d2a 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 index 00000000..ed9433f4 --- /dev/null +++ b/descriptor-packages/src/nsd/cirros_2vnf_ns/cirros_2vnf_nsd.yaml @@ -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: + # provider-network: + # overlay-type: VLAN + # segmentation_id: + 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 index 00000000..62012d2a 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 index 00000000..9ec4e27f --- /dev/null +++ b/descriptor-packages/src/nsd/cirros_ns/cirros_nsd.yaml @@ -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: + # provider-network: + # overlay-type: VLAN + # segmentation_id: + 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 index 00000000..62012d2a 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 index 00000000..cc613b3d --- /dev/null +++ b/descriptor-packages/src/nsd/ims_allin1_corpa/IMS-corpA__nsd.yaml @@ -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 index 00000000..62012d2a 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 index 00000000..33c5ef96 --- /dev/null +++ b/descriptor-packages/src/nsd/ims_allin1_corpa/vnf_config/IMS-ALLIN1_2p__1.yaml @@ -0,0 +1,4 @@ +initial_config_primitive: +- name: config + parameter: + proxied_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 index 00000000..09b47c7b 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 index 00000000..268504cc --- /dev/null +++ b/descriptor-packages/src/nsd/ping_pong_ns/ping_pong_nsd.yaml @@ -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 index 00000000..87c309fd --- /dev/null +++ b/descriptor-packages/src/nsd/ping_pong_ns/scripts/start_traffic.py @@ -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 index 00000000..465537ca --- /dev/null +++ b/descriptor-packages/src/nsd/ref1_ns/ref1_nsd.yaml @@ -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 index 00000000..281fdee2 --- /dev/null +++ b/descriptor-packages/src/nsd/ref2_ns/ref2_nsd.yaml @@ -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 index 00000000..62012d2a 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 index 00000000..cbbe6a20 --- /dev/null +++ b/descriptor-packages/src/nsd/ubuntu_cirros_multidisk_ns/ubuntu_cirros_multidisk_nsd.yaml @@ -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 index 00000000..62012d2a 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 index 00000000..7f91d439 --- /dev/null +++ b/descriptor-packages/src/nsd/ubuntu_xenial_ns/ubuntu_xenial_nsd.yaml @@ -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: + # provider-network: + # overlay-type: VLAN + # segmentation_id: + 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 index 00000000..0ac926f5 --- /dev/null +++ b/descriptor-packages/src/vnfd/VyOS_vnf/VyOS__vnfd.yaml @@ -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: + - 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 index 00000000..62012d2a 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 index 00000000..e643b385 --- /dev/null +++ b/descriptor-packages/src/vnfd/cirros_vnf/cirros_vnfd.yaml @@ -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 index 00000000..5725d299 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 index 00000000..b73e1101 --- /dev/null +++ b/descriptor-packages/src/vnfd/ims_allin1_2p_vnf/IMS-ALLIN1__vnfd.yaml @@ -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: + 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 index 00000000..a899bc8e 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 index 00000000..81a13edd --- /dev/null +++ b/descriptor-packages/src/vnfd/ping_vnf/cloud_init/ping_cloud_init.cfg @@ -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 index 00000000..09b47c7b 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 index 00000000..60f00cfe --- /dev/null +++ b/descriptor-packages/src/vnfd/ping_vnf/ping_vnfd.yaml @@ -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: + 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: + - 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 index 00000000..81a13edd --- /dev/null +++ b/descriptor-packages/src/vnfd/pong_vnf/cloud_init/pong_cloud_init.cfg @@ -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 index 00000000..09b47c7b 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 index 00000000..b6bc9a19 --- /dev/null +++ b/descriptor-packages/src/vnfd/pong_vnf/pong_vnfd.yaml @@ -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: + 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: + - 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 index 00000000..f308282b --- /dev/null +++ b/descriptor-packages/src/vnfd/ref11_vnf/ref11_vnfd.yaml @@ -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 index 00000000..2901c4aa --- /dev/null +++ b/descriptor-packages/src/vnfd/ref12_vnf/ref12_vnfd.yaml @@ -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 index 00000000..390ab9d3 --- /dev/null +++ b/descriptor-packages/src/vnfd/ref21_vnf/ref21_vnfd.yaml @@ -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 index 00000000..7dddc6f0 --- /dev/null +++ b/descriptor-packages/src/vnfd/ref22_vnf/ref22_vnfd.yaml @@ -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 index 00000000..d1c21884 --- /dev/null +++ b/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/cloud_init/cloud_init.cfg @@ -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 index 00000000..da037b18 --- /dev/null +++ b/descriptor-packages/src/vnfd/ubuntu_cirros_multidisk_vnf/ubuntu_cirros_multidisk_vnfd.yaml @@ -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 index 00000000..d1c21884 --- /dev/null +++ b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/cloud_init/cloud_init.cfg @@ -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 index 00000000..e9667839 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 index 00000000..ee6a3ac7 --- /dev/null +++ b/descriptor-packages/src/vnfd/ubuntu_xenial_vnf/ubuntu_xenial_vnfd.yaml @@ -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