osm_im/nst.py
osm_im/nsi.py
osm_im/osm.yaml
+osm_im/etsi-nfv-nsd.py
+osm_im/etsi-nfv-vnfd.py
#Pyang and other tools' folders
pyangbind
# License for the specific language governing permissions and limitations
# under the License.
-FROM ubuntu:16.04
+FROM ubuntu:18.04
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -y install git make wget python \
debhelper tox python-setuptools \
python3-setuptools build-essential dh-make \
openjdk-8-jdk maven && \
+ update-java-alternatives --set /usr/lib/jvm/java-1.8.0-openjdk-amd64 && \
DEBIAN_FRONTEND=noninteractive pip3 install pip==9.0.3 && \
DEBIAN_FRONTEND=noninteractive pip3 install -U pyang pyangbind && \
DEBIAN_FRONTEND=noninteractive pip3 install -U stdeb && \
PYBINDPLUGIN:=$(shell /usr/bin/env python3 -c \
'import pyangbind; import os; print("{}/plugin".format(os.path.dirname(pyangbind.__file__)))')
-YANG_DESC_MODELS := vnfd nsd nst nsi
+YANG_DESC_MODELS := vnfd nsd nst nsi etsi-nfv-vnfd etsi-nfv-nsd
YANG_RECORD_MODELS := vnfr nsr
PYTHON_MODELS := $(addsuffix .py, $(YANG_DESC_MODELS))
YANG_DESC_TREES := $(addsuffix .tree.txt, $(YANG_DESC_MODELS))
OUT_DIR := osm_im
TREES_DIR := osm_im_trees
MODEL_DIR := models/yang
+SOL006_MODEL_DIR := sol006_model/src/yang
+SOL006_AUGMENTS_DIR := models/augments/*
+
Q?=@
PYANG_OPTIONS := -Werror
-all: $(PYTHON_MODELS) trees openapi_schemas
+all: models trees openapi_schemas
$(MAKE) package
+models: sol006_deps $(PYTHON_MODELS)
+
trees: $(YANG_DESC_TREES) $(YANG_DESC_JSTREES) $(YANG_RECORD_TREES) $(YANG_RECORD_JSTREES)
openapi_schemas: $(OPENAPI_SCHEMAS)
%.py: yang-ietf
$(Q)echo generating $@ from $*.yang
- $(Q)pyang $(PYANG_OPTIONS) --path $(MODEL_DIR) --plugindir $(PYBINDPLUGIN) -f pybind -o $(OUT_DIR)/$@ $(MODEL_DIR)/$*.yang
+ $(if $(findstring etsi,$@), $(eval DIR=$(SOL006_MODEL_DIR)),$(eval DIR=$(MODEL_DIR)))
+ $(if $(findstring etsi,$@), $(eval AUGMENTS_DIR=$(SOL006_AUGMENTS_DIR)),$(eval AUGMENTS_DIR=))
+ $(Q)pyang $(PYANG_OPTIONS) --path $(DIR) --plugindir $(PYBINDPLUGIN) -f pybind -o $(OUT_DIR)/$@ $(AUGMENTS_DIR) $(DIR)/$*.yang
%.tree.txt: $(TREES_DIR) yang-ietf
$(Q)echo generating $@ from $*.yang
- $(Q)pyang $(PYANG_OPTIONS) --path $(MODEL_DIR) -f tree -o $(TREES_DIR)/$@ $(MODEL_DIR)/$*.yang
+ $(if $(findstring etsi,$@), $(eval DIR=$(SOL006_MODEL_DIR)),$(eval DIR = $(MODEL_DIR)))
+ $(Q)pyang $(PYANG_OPTIONS) --path $(DIR) -f tree -o $(TREES_DIR)/$@ $(DIR)/$*.yang
%.html: $(TREES_DIR) yang-ietf
$(Q)echo generating $@ from $*.yang
- $(Q)pyang $(PYANG_OPTIONS) --path $(MODEL_DIR) -f jstree -o $(TREES_DIR)/$@ $(MODEL_DIR)/$*.yang
+ $(if $(findstring etsi,$@), $(eval DIR=$(SOL006_MODEL_DIR)),$(eval DIR = $(MODEL_DIR)))
+ $(Q)pyang $(PYANG_OPTIONS) --path $(DIR) -f jstree -o $(TREES_DIR)/$@ $(DIR)/$*.yang
$(Q)sed -r -i 's|data\:image/gif\;base64,R0lGODlhS.*RCAA7|https://osm.etsi.org/images/OSM-logo.png\" width=\"175\" height=\"60|g' $(TREES_DIR)/$@
$(Q)sed -r -i 's|<a href=\"http://www.tail-f.com">|<a href="http://osm.etsi.org">|g' $(TREES_DIR)/$@
%.rec.tree.txt: $(TREES_DIR) yang-ietf
$(Q)echo generating $@ from $*.yang
- $(Q)pyang $(PYANG_OPTIONS) --path $(MODEL_DIR) -f tree -o $(TREES_DIR)/$@ $(MODEL_DIR)/$*.yang
+ $(if $(findstring etsi,$@), $(eval DIR=$(SOL006_MODEL_DIR)),$(eval DIR=$(MODEL_DIR)))
+ $(Q)pyang $(PYANG_OPTIONS) --path $(DIR) -f tree -o $(TREES_DIR)/$@ $(DIR)/$*.yang
$(Q)mv $(TREES_DIR)/$@ $(TREES_DIR)/$*.tree.txt
%.rec.html: $(TREES_DIR) yang-ietf
$(Q)echo generating $@ from $*.yang
- $(Q)pyang $(PYANG_OPTIONS) --path $(MODEL_DIR) -f jstree -o $(TREES_DIR)/$@ $(MODEL_DIR)/osm-project.yang $(MODEL_DIR)/$*.yang
+ $(if $(findstring etsi,$@), $(eval DIR=$(SOL006_MODEL_DIR)),$(eval DIR=$(MODEL_DIR)))
+ $(Q)pyang $(PYANG_OPTIONS) --path $(DIR) -f jstree -o $(TREES_DIR)/$@ $(DIR)/osm-project.yang $(DIR)/$*.yang
$(Q)sed -r -i 's|data\:image/gif\;base64,R0lGODlhS.*RCAA7|https://osm.etsi.org/images/OSM-logo.png\" width=\"175\" height=\"60|g' $(TREES_DIR)/$@
$(Q)sed -r -i 's|<a href=\"http://www.tail-f.com">|<a href="http://osm.etsi.org">|g' $(TREES_DIR)/$@
$(Q)mv $(TREES_DIR)/$@ $(TREES_DIR)/$*.html
$(Q)$(JAVA) -jar ${HOME}/.m2/repository/com/mrv/yangtools/swagger-generator-cli/1.1.11/swagger-generator-cli-1.1.11-executable.jar -yang-dir $(MODEL_DIR) -output $(OUT_DIR)/$@
yang-ietf:
- $(Q)wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-yang-types%402013-07-15.yang -O models/yang/ietf-yang-types.yang
- $(Q)wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang -O models/yang/ietf-inet-types.yang
+ $(Q)wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-yang-types%402013-07-15.yang -O $(MODEL_DIR)/ietf-yang-types.yang
+ $(Q)wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang -O $(MODEL_DIR)/ietf-inet-types.yang
+ $(Q)cp $(MODEL_DIR)/ietf-yang-types.yang $(SOL006_MODEL_DIR)/ietf-yang-types.yang
+ $(Q)cp $(MODEL_DIR)/ietf-inet-types.yang $(SOL006_MODEL_DIR)/ietf-inet-types.yang
yang2swagger:
$(Q)mkdir -p ${HOME}/.m2
$(Q)mkdir -p ~/.m2
$(Q)cp -n ~/.m2/settings.xml ~/.m2/settings.xml.orig ; wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml
+sol006_deps:
+ $(Q)git clone --single-branch --branch v2.6.1 https://forge.etsi.org/rep/nfv/SOL006.git sol006_model
+ $(Q)patch -p2 < patch/deref_warnings.patch
+ $(Q)patch -p2 < patch/nested_workaround.patch
+
clean:
- $(Q)rm -rf dist osm_im.egg-info deb deb_dist *.gz osm-imdocs* yang2swagger $(TREES_DIR)
+ $(Q)rm -rf dist sol006_model osm_im.egg-info deb deb_dist *.gz osm-imdocs* yang2swagger $(TREES_DIR)
#!/bin/sh
+
+# Copyright 2017 Sandvine
+# Copyright 2017-2018 Telefonica
+# All Rights Reserved.
+#
+# 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.
+
+make clean
+make models
+tox
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module additional-info {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:additional-info";
+ prefix "additional-info";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ augment "/vnfd:vnfd" {
+ uses common:description;
+ }
+
+ augment "/vnfd:vnfd/vnfd:df/vnfd:virtual-link-profile/vnfd:virtual-link-protocol-data/vnfd:l3-protocol-data" {
+ uses common:description;
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-storage-desc" {
+ uses common:description;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module alarm {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:alarm";
+ prefix "alarm";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-alarm {
+ list alarm {
+ key "alarm-id";
+
+ leaf alarm-id {
+ description
+ "This field is reserved for the identifier assigned by the VIM provider";
+
+ type string;
+ }
+
+
+ leaf vnf-monitoring-param-ref {
+ description
+ "Reference to the VNF level monitoring parameter
+ that is aggregated";
+ type leafref {
+ path "/vnfd:vnfd/vnfd:df/vnfd:monitoring-parameter/vnfd:id";
+ }
+ }
+
+ uses common:alarm-properties;
+ }
+
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu" {
+ uses extended-alarm;
+ }
+}
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module alternative-images {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:alternative-images";
+ prefix "alternative-images";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping extended-vim-type {
+ leaf vim-type {
+ description
+ "VIM type: openvim, openstack, vmware, aws, etc.";
+ type string;
+ }
+ }
+ grouping extended-alternative-images {
+ leaf-list alternative-sw-image-desc {
+ description
+ "List of alternative images per VIM type.
+ Different images can be used for specific types of VIMs instead
+ of the default image. This allows deployments in sites where the
+ image identifier in the VIM is given by the VIM provider and
+ cannot be modified.
+ If an alternative image is specified for a VIM type, it will prevail
+ over the default image";
+ type leafref {
+ path "/vnfd:vnfd/vnfd:sw-image-desc/vnfd:id";
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:sw-image-desc" {
+ uses extended-vim-type;
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu" {
+ uses extended-alternative-images;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2019 Whitestack LLC
+
+ 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.
+*/
+
+module cloud-init {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:cloud-init";
+ prefix "cloud-init";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping extended-cloud-init {
+ choice cloud-init-input {
+ description
+ "Indicates how the contents of cloud-init script are provided.
+ There are 2 choices - inline or in a file";
+
+ case inline {
+ leaf cloud-init {
+ description
+ "Contents of cloud-init script, provided inline, in cloud-config format";
+ type string;
+ }
+ }
+
+ case filename {
+ leaf cloud-init-file {
+ description
+ "Name of file with contents of cloud-init script in cloud-config format";
+ type string;
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu" {
+ uses extended-cloud-init;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module common-augments {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments";
+ prefix "common";
+
+ typedef parameter-data-type {
+ type enumeration {
+ enum STRING;
+ enum INTEGER;
+ enum BOOLEAN;
+ }
+ }
+
+ grouping primitive-parameter-value {
+ list parameter {
+ description
+ "List of parameters to the configuration primitive.";
+ key "name";
+ leaf name {
+ description
+ "Name of the parameter.";
+ type string;
+ }
+
+ leaf data-type {
+ description
+ "Data type associated with the value.";
+ type common:parameter-data-type;
+ }
+
+ leaf value {
+ description
+ "Value associated with the name.";
+ type string;
+ }
+ }
+ }
+
+ grouping primitive-parameter {
+ leaf name {
+ description
+ "Name of the parameter.";
+ type string;
+ }
+
+ leaf data-type {
+ description
+ "Data type associated with the name.";
+ type common:parameter-data-type;
+ }
+
+ leaf mandatory {
+ description
+ "Is this field mandatory";
+ type boolean;
+ default false;
+ }
+
+ leaf default-value {
+ description
+ "The default value for this field";
+ type string;
+ }
+
+ leaf parameter-pool {
+ description
+ "NSD parameter pool name to use for this parameter";
+ type string;
+ }
+
+ leaf read-only {
+ description
+ "The value should be dimmed by the UI.
+ Only applies to parameters with default values.";
+ type boolean;
+ default false;
+ }
+
+ leaf hidden {
+ description
+ "The value should be hidden by the UI.
+ Only applies to parameters with default values.";
+ type boolean;
+ default false;
+ }
+ }
+
+ grouping vnfc-relations {
+ list relation {
+ description
+ "List of relations between elements in this descriptor.";
+ key "name";
+
+ leaf name {
+ description
+ "Name of the relation.";
+
+ type string;
+ }
+
+ list entities {
+ description
+ "List of two elements to be related.
+ Elements to be related are identified by a pair (id, endpoint).
+ The relation will relate (id1, endpoint1) to (id2, endpoint2).";
+ key "id";
+
+ leaf id {
+ description
+ "A string, reference to the element id in the descriptor.
+ It could be a vnfd-id or a vdu-id in a VNFD,
+ or a nsd-id or member-vnf-index in a NSD.";
+ type string;
+ }
+
+ leaf endpoint {
+ description
+ "Endpoint name defining the relation.";
+ type string;
+ }
+ }
+ }
+ }
+
+ grouping vnfc-metrics {
+ description
+ "Information about the VNF or VDU metrics";
+ list metrics {
+ description
+ "List of VNFC related metrics";
+ key "name";
+ leaf name {
+ description
+ "Name of the metric, as defined in the Juju charm.";
+ type string;
+ }
+ }
+ }
+
+ grouping configuration-method {
+ choice config-method {
+ description
+ "Defines the configuration method for the VNF or VDU.";
+ case script {
+ description
+ "Use custom script for configuring the VNF or VDU.
+ This script is executed in the context of
+ Orchestrator (The same system and environment
+ as the Launchpad).";
+ container script {
+ leaf script-type {
+ description
+ "Script type - currently supported - Scripts confirming to Rift CA plugin";
+ type enumeration {
+ enum rift;
+ }
+ }
+ }
+ }
+
+ case juju {
+ description
+ "Configure the VNF or VDU through Juju.";
+ container juju {
+ leaf charm {
+ description
+ "Juju charm to use with the VNF or VDU.";
+ type string;
+ }
+ leaf proxy {
+ description
+ "Is this a proxy charm?";
+ type boolean;
+ default true;
+ }
+ }
+ }
+ }
+ }
+
+ grouping vdu-config-access {
+
+ container config-access {
+
+ description
+ "Indicates the way to access to the xNF or xDU for VCA configuration.
+ For the moment there is a single way (ssh-access).";
+
+ container ssh-access {
+
+ description
+ "If the xNF requires ssh and this parameter is set, SSH keys
+ will be injected so that VCA can configure the xNF or xDU via ssh.";
+
+ leaf required {
+ description
+ "whether ssh access is needed or not";
+ type boolean;
+ default false;
+ }
+
+ leaf default-user {
+ description
+ "Default user for ssh";
+ type string;
+ }
+ }
+ }
+ }
+
+ grouping vnfc-configuration {
+ description
+ "Common information in the descriptors for NS, VNF or VDU configuration.
+ Note: If the NS contains multiple instances of the
+ same VNF or VDU, each instance could have a different
+ configuration.";
+
+ uses common:configuration-method;
+
+ list config-primitive {
+ description
+ "List of config primitives supported by the
+ configuration agent for this VNF or VDU.";
+ key "name";
+
+ leaf name {
+ description
+ "Name of the config primitive.";
+ type string;
+ }
+
+ list parameter {
+ description
+ "List of parameters to the config primitive.";
+ key "name";
+ uses primitive-parameter;
+ }
+
+ leaf user-defined-script {
+ description
+ "A user defined script. If user defined script is defined,
+ the script will be executed using bash";
+ type string;
+ }
+ }
+
+ list initial-config-primitive {
+ description
+ "Initial set of configuration primitives.";
+ key "seq";
+ leaf seq {
+ description
+ "Sequence number for the configuration primitive.";
+ type uint64;
+ }
+
+ choice primitive-type {
+ case primitive-definition {
+ leaf name {
+ description
+ "Name of the configuration primitive.";
+ type string;
+ }
+
+ uses primitive-parameter-value;
+
+ leaf user-defined-script {
+ description
+ "A user defined script.";
+ type string;
+ }
+ }
+ }
+ }
+
+ list terminate-config-primitive {
+ description
+ "Terminate set of configuration primitives.";
+ key "seq";
+ leaf seq {
+ description
+ "Sequence number for the configuration primitive.";
+ type uint64;
+ }
+ leaf name {
+ description
+ "Name of the configuration primitive.";
+ type string;
+ }
+
+ uses primitive-parameter-value;
+
+ leaf user-defined-script {
+ description
+ "A user defined script.";
+ type string;
+ }
+ }
+ uses common:vnfc-metrics;
+ }
+
+ typedef alarm-severity-type {
+ description
+ "An indication of the importance or urgency of the alarm";
+ type enumeration {
+ enum LOW;
+ enum MODERATE;
+ enum CRITICAL;
+ }
+ }
+
+ typedef alarm-statistic-type {
+ description
+ "Statistic type to use to determine threshold crossing
+ for an alarm.";
+ type enumeration {
+ enum AVERAGE;
+ enum MINIMUM;
+ enum MAXIMUM;
+ enum COUNT;
+ enum SUM;
+ }
+ }
+
+ typedef relational-operation-type {
+ description
+ "The relational operator used to define whether an alarm,
+ scaling event, etc. should be triggered in certain scenarios,
+ such as if the metric statistic goes above or below a specified
+ value.";
+ type enumeration {
+ enum GE; // greater than or equal
+ enum LE; // less than or equal
+ enum GT; // greater than
+ enum LT; // less than
+ enum EQ; // equal
+ }
+ }
+
+ grouping alarm-properties {
+ leaf name {
+ description
+ "A human readable string to identify the alarm";
+ type string;
+ }
+
+ leaf description {
+ description
+ "A description of this alarm";
+ type string;
+ }
+
+ leaf vdur-id {
+ description
+ "The identifier of the VDUR that the alarm is associated with";
+ type string;
+ }
+
+ container actions {
+ list ok {
+ key "url";
+ leaf url {
+ type string;
+ }
+ }
+
+ list insufficient-data {
+ key "url";
+ leaf url {
+ type string;
+ }
+ }
+
+ list alarm {
+ key "url";
+ leaf url {
+ type string;
+ }
+ }
+ }
+
+ leaf repeat {
+ description
+ "This flag indicates whether the alarm should be repeatedly emitted
+ while the associated threshold has been crossed.";
+
+ type boolean;
+ default true;
+ }
+
+ leaf enabled {
+ description
+ "This flag indicates whether the alarm has been enabled or
+ disabled.";
+
+ type boolean;
+ default true;
+ }
+
+ leaf severity {
+ description
+ "A measure of the importance or urgency of the alarm";
+ type alarm-severity-type;
+ }
+
+ leaf statistic {
+ description
+ "The type of metric statistic that is tracked by this alarm";
+ type alarm-statistic-type;
+ }
+
+ leaf operation {
+ description
+ "The relational operator used to define whether an alarm should be
+ triggered in certain scenarios, such as if the metric statistic
+ goes above or below a specified value.";
+ type relational-operation-type;
+ }
+
+ leaf value {
+ description
+ "This value defines the threshold that, if crossed, will trigger
+ the alarm.";
+ type decimal64 {
+ fraction-digits 4;
+ }
+ }
+
+ leaf period {
+ description
+ "The period defines the length of time (seconds) that the metric
+ data are collected over in oreder to evaluate the chosen
+ statistic.";
+ type uint32;
+ }
+
+ leaf evaluations {
+ description
+ "Defines the length of time (seconds) in which metric data are
+ collected in order to evaluate the chosen statistic.";
+ type uint32;
+ }
+ }
+
+ grouping virtual-interface {
+ container virtual-interface {
+ description
+ "Container for the virtual interface properties";
+
+ leaf type {
+ description
+ "Specifies the type of virtual interface
+ between VM and host.
+ PARAVIRT : Use the default paravirtualized interface for the VIM (virtio, vmxnet3, etc.).
+ VIRTIO : Deprecated! Use the traditional VIRTIO interface.
+ PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
+ SR-IOV : Use SR-IOV interface.
+ E1000 : Emulate E1000 interface.
+ RTL8139 : Emulate RTL8139 interface.
+ PCNET : Emulate PCNET interface.
+ OM-MGMT : Deprecated! Use PARAVIRT instead and set the VNF management interface at vnfd:mgmt-interface:cp";
+
+ type enumeration {
+ enum PARAVIRT;
+ enum OM-MGMT;
+ enum PCI-PASSTHROUGH;
+ enum SR-IOV;
+ enum VIRTIO;
+ enum E1000;
+ enum RTL8139;
+ enum PCNET;
+ }
+ default "PARAVIRT";
+ }
+
+ leaf vpci {
+ description
+ "Specifies the virtual PCI address. Expressed in
+ the following format dddd:dd:dd.d. For example
+ 0000:00:12.0. This information can be used to
+ pass as metadata during the VM creation.";
+ type string;
+ }
+
+ leaf bandwidth {
+ description
+ "Aggregate bandwidth of the NIC.";
+ type uint64;
+ }
+ }
+ }
+
+ grouping description {
+ leaf description {
+ type string;
+ }
+ }
+
+ typedef scaling-trigger {
+ type enumeration {
+ enum pre-scale-in {
+ value 1;
+ }
+ enum post-scale-in {
+ value 2;
+ }
+ enum pre-scale-out {
+ value 3;
+ }
+ enum post-scale-out {
+ value 4;
+ }
+ }
+ }
+
+ typedef scaling-policy-type {
+ type enumeration {
+ enum manual {
+ value 1;
+ }
+ enum automatic {
+ value 2;
+ }
+ }
+ }
+
+ typedef scaling-criteria-operation {
+ type enumeration {
+ enum AND {
+ value 1;
+ }
+ enum OR {
+ value 2;
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module configuration {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:configuration";
+ prefix "configuration";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import day1-2 {
+ prefix day1-2;
+ }
+
+ import kdu {
+ prefix kdu;
+ }
+ grouping extended-vnf-configuration {
+ leaf vnf-configuration-id {
+ description
+ "Reference for the VNF configuration to use in this DF";
+ type leafref {
+ path "/vnfd:vnfd/day1-2:vnf-configuration/day1-2:id";
+ }
+ }
+ }
+
+ grouping extended-vdu-configuration {
+ leaf vdu-configuration-id {
+ description
+ "Reference for the VDU configuration to use in this DF";
+ type leafref {
+ path "/vnfd:vnfd/day1-2:vdu-configuration/day1-2:id";
+ }
+ }
+ }
+
+ grouping extended-kdu-configuration {
+ list kdu-profile {
+ key "name";
+
+ leaf name {
+ description
+ "Reference to the KDU";
+ type leafref {
+ path "/vnfd:vnfd/kdu:kdu/kdu:name";
+ }
+ }
+
+ leaf kdu-configuration-id {
+ description
+ "Reference to the KDU configuration to use in this DF";
+ type leafref {
+ path "/vnfd:vnfd/kdu:kdu-configuration/kdu:id";
+ }
+ }
+
+ leaf kdu-model-id {
+ description
+ "Reference to the KDU model to use in this DF";
+ type leafref {
+ path "/vnfd:vnfd/kdu:kdu-model/kdu:id";
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:df" {
+ uses extended-vnf-configuration;
+ uses extended-kdu-configuration;
+ }
+
+ augment "/vnfd:vnfd/vnfd:df/vnfd:vdu-profile" {
+ uses extended-vdu-configuration;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module day1-2 {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:day1-2";
+ prefix "day1-2";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-vnf-configuration {
+ list vnf-configuration {
+ key "id";
+ leaf id {
+ description
+ "Internal identifier for the VNF configuration";
+ type string;
+ }
+ uses common:vnfc-configuration;
+ uses common:vnfc-relations;
+ uses common:vdu-config-access;
+ }
+ }
+
+ grouping extended-vdu-configuration {
+ list vdu-configuration {
+ key "id";
+ leaf id {
+ description
+ "Internal identifier for the VDU configuration";
+ type string;
+ }
+ uses common:vnfc-configuration;
+ uses common:vdu-config-access;
+ }
+ }
+
+ augment "/vnfd:vnfd" {
+ uses extended-vnf-configuration;
+ }
+
+ augment "/vnfd:vnfd" {
+ uses extended-vdu-configuration;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module epa {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:epa";
+ prefix "epa";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping allocation-properties {
+ leaf limit {
+ description
+ "Defines the maximum allocation. The value 0 indicates that usage is not limited.
+ This parameter ensures that the instance never uses more than the defined amount of resource.";
+ type uint64;
+ }
+
+ leaf reserve {
+ description
+ "Defines the guaranteed minimum reservation.
+ If needed, the machine will definitely get allocated the reserved amount of resources.";
+ type uint64;
+ }
+
+ leaf shares {
+ description
+ "Number of shares allocated.
+ Specifies the proportional weighted share for the domain.
+ If this element is omitted, the service defaults to the OS provided defaults";
+ type uint64;
+ }
+ }
+
+ grouping extended-mem-quota {
+ container mem-quota {
+ description
+ "Memory quota describes the memory resource allocation policy.
+ Limit and Reserve values are defined in MB";
+ uses allocation-properties;
+ }
+ }
+
+ grouping extended-vif-quota {
+ container vif-quota {
+ description
+ "Virtual interfaces quota describes the virtual interface bandwidth resource allocation policy.
+ Limit and Reserve values are defined in Mbps";
+ uses allocation-properties;
+ }
+ }
+
+ grouping extended-disk-io-quota {
+ container disk-io-quota {
+ description
+ "Disk IO quota describes the disk IO operations resource allocation policy.
+ Limit and Reserve values are defined in IOPS";
+ uses allocation-properties;
+ }
+ }
+
+ grouping extended-cpu-quota {
+ container cpu-quota {
+ description
+ "CPU quota describes the CPU resource allocation policy.
+ Limit and Reserve values are defined in MHz";
+ uses allocation-properties;
+ }
+ }
+
+ grouping extended-cpu-policy {
+ leaf thread-policy {
+ description
+ "CPU thread pinning policy describes how to
+ place the guest CPUs when the host supports
+ hyper threads:
+ AVOID : Avoids placing a guest on a host
+ with threads.
+ SEPARATE: Places vCPUs on separate cores,
+ and avoids placing two vCPUs on
+ two threads of same core.
+ ISOLATE : Places each vCPU on a different core,
+ and places no vCPUs from a different
+ guest on the same core.
+ PREFER : Attempts to place vCPUs on threads
+ of the same core.";
+ type enumeration {
+ enum AVOID;
+ enum SEPARATE;
+ enum ISOLATE;
+ enum PREFER;
+ }
+ }
+ }
+
+ grouping extended-mempage-size {
+ leaf mempage-size {
+ description
+ "Memory page allocation size. If a VM requires
+ hugepages, it should choose LARGE or SIZE_2MB
+ or SIZE_1GB. If the VM prefers hugepages it
+ should choose PREFER_LARGE.
+ LARGE : Require hugepages (either 2MB or 1GB)
+ SMALL : Doesn't require hugepages
+ SIZE_2MB : Requires 2MB hugepages
+ SIZE_1GB : Requires 1GB hugepages
+ PREFER_LARGE : Application prefers hugepages";
+ type enumeration {
+ enum LARGE;
+ enum SMALL;
+ enum SIZE_2MB;
+ enum SIZE_1GB;
+ enum PREFER_LARGE;
+ }
+ }
+ }
+ grouping extended-numa {
+ container numa-node-policy {
+ description
+ "This policy defines NUMA topology of the
+ guest. Specifically identifies if the guest
+ should be run on a host with one NUMA
+ node or multiple NUMA nodes. As an example
+ a guest might need 8 VCPUs and 4 GB of
+ memory. However, it might need the VCPUs
+ and memory distributed across multiple
+ NUMA nodes. In this scenario, NUMA node
+ 1 could run with 6 VCPUs and 3GB, and
+ NUMA node 2 could run with 2 VCPUs and
+ 1GB.";
+
+ leaf node-cnt {
+ description
+ "The number of NUMA nodes to expose to the VM.";
+ type uint16;
+ }
+
+ leaf mem-policy {
+ description
+ "This policy specifies how the memory should
+ be allocated in a multi-node scenario.
+ STRICT : The memory must be allocated
+ strictly from the memory attached
+ to the NUMA node.
+ PREFERRED : The memory should be allocated
+ preferentially from the memory
+ attached to the NUMA node";
+ type enumeration {
+ enum STRICT;
+ enum PREFERRED;
+ }
+ }
+
+ list node {
+ key id;
+ leaf id {
+ description
+ "NUMA node identification. Typically
+ it's 0 or 1";
+ type uint64;
+ }
+
+ list vcpu {
+ key "id";
+ description
+ "List of VCPUs to allocate on
+ this NUMA node.";
+ leaf id {
+ type uint64;
+ description
+ "List of VCPUs ids to allocate on
+ this NUMA node";
+ }
+ }
+
+ leaf memory-mb {
+ description
+ "Memory size expressed in MB
+ for this NUMA node.";
+ type uint64;
+ }
+
+ choice om-numa-type {
+ description
+ "OpenMANO Numa type selection";
+
+ case cores {
+ leaf num-cores {
+ type uint8;
+ }
+ }
+
+ case paired-threads {
+ container paired-threads {
+ leaf num-paired-threads {
+ type uint8;
+ }
+
+ list paired-thread-ids {
+ description
+ "List of thread pairs to use in case of paired-thread NUMA";
+ max-elements 16;
+ key thread-a;
+
+ leaf thread-a {
+ type uint8;
+ }
+
+ leaf thread-b {
+ type uint8;
+ }
+ }
+ }
+ }
+ case threads {
+ leaf num-threads {
+ type uint8;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-memory" {
+ uses extended-numa;
+ uses extended-mempage-size;
+ uses extended-mem-quota;
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-cpu/vnfd:pinning" {
+ uses extended-cpu-policy;
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-cpu" {
+ uses extended-cpu-quota;
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-storage-desc" {
+ uses extended-disk-io-quota;
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu/vnfd:int-cpd/vnfd:virtual-network-interface-requirement" {
+ uses extended-vif-quota;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module interface {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:interface";
+ prefix "interface";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-interface {
+ description
+ "List of Interfaces (external and internal) for the VNF";
+
+ leaf position {
+ description
+ "Explicit Position of the interface within the list";
+ type uint32;
+ }
+
+ leaf mac-address {
+ description
+ "MAC address of the interface.
+ Some VNFs require a specific MAC address to be configured
+ in the interface. While this is not recommended at all in
+ NFV environments, this parameter exists to allow those
+ scenarios.
+ This parameter will be likely deprecated in the future.";
+ type string;
+ }
+
+ uses common:virtual-interface;
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu/vnfd:int-cpd/vnfd:virtual-network-interface-requirement" {
+ uses extended-interface;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2019 Whitestack LLC
+
+ 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.
+*/
+module ip-profiles {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:ip-profiles";
+ prefix "ip-profiles";
+
+ import etsi-nfv-nsd {
+ prefix nsd;
+ }
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ import etsi-nfv-descriptors {
+ prefix nfv;
+ }
+
+ grouping extended-vld-protocol-data{
+ container virtual-link-protocol-data {
+ leaf associated-layer-protocol {
+ type identityref {
+ base nfv:layer-protocol;
+ }
+ description
+ "One of the values of the attribute layerProtocol of
+ the ConnectivityType IE.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.13,
+ VirtualLinkProtocolData information element.";
+ }
+
+ container l2-protocol-data {
+ when "(../associated-layer-protocol = 'Ethernet') or " +
+ "(../associated-layer-protocol = 'MPLS') or " +
+ "(../associated-layer-protocol = 'ODU2') or " +
+ "(../associated-layer-protocol = 'Pseudo-Wire')";
+
+ leaf name {
+ type string;
+ description
+ "Network name associated with this L2 protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.14,
+ L2ProtocolData information element.";
+ }
+
+ leaf network-type {
+ type enumeration {
+ enum flat;
+ enum vlan;
+ enum vxlan;
+ enum gre;
+ }
+ description
+ "Specifies the network type for this L2 protocol.
+ Possible values: FLAT, VLAN, VXLAN, GRE.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.14,
+ L2ProtocolData information element.";
+ }
+
+ leaf vlan-transparent {
+ type boolean;
+ description
+ "Specifies whether to support VLAN transparency for
+ this L2 protocol or not.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.14,
+ L2ProtocolData information element.";
+ }
+
+ leaf mtu {
+ type uint16;
+ description
+ "Specifies the maximum transmission unit (MTU) value
+ for this L2 protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.14,
+ L2ProtocolData information element.";
+ }
+ description
+ "Specifies the L2 protocol data for this virtual link.
+ Shall be present when the associatedLayerProtocol
+ attribute indicates a L2 protocol and shall be absent
+ otherwise.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.13,
+ VirtualLinkProtocolData information element.";
+ }
+
+ container l3-protocol-data {
+ when "(../associated-layer-protocol = 'IPv4') or " +
+ "(../associated-layer-protocol = 'IPv6')";
+
+ leaf name {
+ type string;
+ description
+ "Network name associated with this L3 protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf ip-version {
+ type enumeration {
+ enum ipv4;
+ enum ipv6;
+ }
+ default "ipv4";
+ description
+ "Specifies IP version of this L3 protocol.
+ Value:
+ • IPV4.
+ • IPV6.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf cidr {
+ type string;
+ description
+ "Specifies the CIDR (Classless InterDomain Routing)
+ of this L3 protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf-list ip-allocation-pools {
+ type string;
+ description
+ "Specifies the allocation pools with start and end
+ IP addresses for this L3 protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf gateway-ip {
+ type inet:ip-address;
+ description
+ "Specifies the gateway IP address for this L3
+ protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf dhcp-enabled {
+ type boolean;
+ default "true";
+ description
+ "Indicates whether DHCP (Dynamic Host Configuration
+ Protocol) is enabled or disabled for this L3
+ protocol.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+
+ leaf ipv6-address-mode {
+ when "../ip-version = 'ipv6'";
+ type enumeration {
+ enum slaac;
+ enum dhcpv6-stateful;
+ enum dhcpv6-stateless;
+ }
+ description
+ "Specifies IPv6 address mode. Possible values:
+ • SLAAC.
+ • DHCPV6-STATEFUL.
+ • DHCPV6-STATELESS.
+ May be present when the value of the ipVersion
+ attribute is 'IPV6' and shall be absent otherwise.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.15,
+ L3ProtocolData information element.";
+ }
+ description
+ "Specifies the L3 protocol data for this virtual link.
+ Shall be present when the associatedLayerProtocol
+ attribute indicates a L3 protocol and shall be absent
+ otherwise.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.13,
+ VirtualLinkProtocolData information element.";
+ }
+ description
+ "Specifies the protocol data for a VL instantiated
+ according to this profile. Cardinality 0 is used when
+ no protocol data needs to be specified.";
+ reference
+ "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile
+ information element.";
+ }
+ }
+
+ augment "/nsd:nsd/nsd:nsd/nsd:df/nsd:virtual-link-profile" {
+ uses extended-vld-protocol-data;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module kdu {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:kdu";
+ prefix "kdu";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-ext-cpd {
+ leaf k8s-cluster-net {
+ description
+ "Reference to the K8s cluster network
+ to which CPs instantiated from this external CP
+ Descriptor (CPD) connect.";
+ type leafref {
+ path "/vnfd:vnfd/kdu:k8s-cluster/kdu:nets/kdu:id";
+ }
+ }
+ }
+
+ grouping extended-kdu-configuration {
+ list kdu-configuration {
+ key "id";
+ leaf id {
+ description
+ "Internal identifier for the KDU configuration";
+ type string;
+ }
+ uses common:vnfc-configuration;
+ uses common:vdu-config-access;
+
+ leaf-list blacklist-config-primitive {
+ description
+ "List of blacklisted config primitives from the list of
+ default kdu config primitives";
+
+ type enumeration {
+ enum upgrade;
+ enum rollback;
+ }
+ }
+ }
+ }
+
+ grouping extended-kdu-model {
+ list kdu-model {
+ key "id";
+
+ leaf id {
+ description
+ "Internal identifier for the KDU model";
+ type string;
+ }
+
+ leaf kdu-model-type {
+ description
+ "Indicates the KDU model, either as a helm-chart or as a juju-bundle.";
+
+ type enumeration {
+ enum helm-chart;
+ enum juju-bundle;
+ }
+ }
+
+ leaf kdu-model-locator {
+ description
+ "Indicates the KDU model location, either as a path to a folder in the
+ package or as a URL where to fetch the model.";
+
+ type string;
+ }
+ }
+ }
+
+ grouping extended-kdu {
+ list kdu {
+ description
+ "List of K8s Deployment Units";
+ key "name";
+
+ leaf name {
+ description
+ "Unique name for the KDU";
+ type string;
+ }
+
+ leaf description {
+ description
+ "Description of the KDU.";
+ type string;
+ }
+ }
+
+ container k8s-cluster {
+ leaf-list version {
+ description
+ "List of supported K8s versions.
+ The cluster where the KDUs will be deployed will have to match
+ one of these versions.";
+
+ type string;
+ }
+
+ leaf-list cni {
+ description
+ "List of supported CNI plugins.
+ The cluster where the KDUs will be deployed will have to use
+ one of these CNI plugins.";
+
+ type enumeration {
+ enum calico;
+ enum flannel;
+ enum multus;
+ }
+ }
+
+ list nets {
+ description
+ "List of required networks in the K8s cluster.
+ The cluster where the KDUs will be deployed will have to use
+ one of these CNI plugins.";
+
+ key "id";
+
+ leaf id {
+ description
+ "Internal identifier for the K8s cluster network in this VNF";
+ type string;
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd" {
+ uses extended-kdu;
+ uses extended-kdu-configuration;
+ uses extended-kdu-model;
+ }
+
+ augment "/vnfd:vnfd/vnfd:ext-cpd/vnfd:cp-connection" {
+ uses extended-ext-cpd;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module mgmt-interface {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:mgmt-interface";
+ prefix "mgmt-interface";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping extended-mgmt-interface {
+ leaf mgmt-cp {
+ description
+ "Connection point over which the VNF is managed.";
+ type leafref {
+ path "/vnfd:vnfd/vnfd:ext-cpd/vnfd:id";
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd" {
+ uses extended-mgmt-interface;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module ns-configuration {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:ns-configuration";
+ prefix "ns-configuration";
+
+ import etsi-nfv-nsd {
+ prefix nsd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-ns-configuration {
+ container ns-configuration {
+ description
+ "Information about NS configuration.";
+
+ uses common:vnfc-configuration;
+ uses common:vnfc-relations;
+ }
+ }
+
+ augment "/nsd:nsd/nsd:nsd" {
+ uses extended-ns-configuration;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module ns-various {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:ns-various";
+ prefix "ns-various";
+
+ import etsi-nfv-nsd {
+ prefix nsd;
+ }
+
+ import ip-profiles {
+ prefix ip-profiles;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ grouping extended-floating-ip {
+ leaf floating-ip-required {
+ description
+ "Boolean parameter to indicate whether the CP must be exposed.
+ A public IP address will be allocated to this CP if exposed is true.
+ The default is false meaning a floating IP address is not required.
+ It must be explicitly asked for a floating IP address to be allocated.";
+ type boolean;
+ }
+ }
+
+ grouping extended-security-group {
+ leaf security-group {
+ description
+ "Name of the security group";
+ type string;
+ }
+ }
+
+ augment "/nsd:nsd/nsd:nsd" {
+ uses common:description;
+ }
+
+ augment "/nsd:nsd/nsd:nsd/nsd:sapd" {
+ uses extended-floating-ip;
+ }
+
+ augment "/nsd:nsd/nsd:nsd/nsd:df/nsd:virtual-link-profile/ip-profiles:virtual-link-protocol-data/ip-profiles:l3-protocol-data" {
+ uses extended-security-group;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module ns-vld {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:ns-vld";
+ prefix "ns-vld";
+
+ import etsi-nfv-nsd {
+ prefix nsd;
+ }
+
+ grouping extended-vld {
+ container provider-network {
+ description
+ "Container for the provider network.";
+ leaf physical-network {
+ description
+ "Name of the physical network on which the provider
+ network is built.";
+ type string;
+ }
+
+ leaf segmentation_id {
+ description
+ "ID of segregated virtual networks";
+ type uint32;
+ }
+ }
+
+ leaf mgmt-network {
+ description
+ "Flag indicating whether this network is a VIM management network";
+ type boolean;
+ default false;
+ }
+ }
+
+
+ augment "/nsd:nsd/nsd:nsd/nsd:virtual-link-desc" {
+ uses extended-vld;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module scaling {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:scaling";
+ prefix "scaling";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ import common-augments {
+ prefix common;
+ }
+
+ import day1-2 {
+ prefix day1-2;
+ }
+
+ grouping extended-scaling {
+ list scaling-policy {
+
+ key "name";
+
+ leaf name {
+ description
+ "Name of the scaling policy";
+ type string;
+ }
+
+ leaf scaling-type {
+ description
+ "Type of scaling";
+ type common:scaling-policy-type;
+ }
+
+ leaf enabled {
+ description
+ "Specifies if the scaling policy can be applied";
+ type boolean;
+ default true;
+ }
+
+ leaf scale-in-operation-type {
+ description
+ "Operation to be applied to check between scaling criterias to
+ check if the scale in threshold condition has been met.
+ Defaults to AND";
+ type common:scaling-criteria-operation;
+ default AND;
+ }
+
+ leaf scale-out-operation-type {
+ description
+ "Operation to be applied to check between scaling criterias to
+ check if the scale out threshold condition has been met.
+ Defauls to OR";
+ type common:scaling-criteria-operation;
+ default OR;
+ }
+
+ leaf threshold-time {
+ description
+ "The duration for which the criteria must hold true";
+ type uint32;
+ mandatory true;
+ }
+
+ leaf cooldown-time {
+ description
+ "The duration after a scaling-in/scaling-out action has been
+ triggered, for which there will be no further optional";
+ type uint32;
+ mandatory true;
+ }
+
+ list scaling-criteria {
+ description
+ "list of conditions to be met for generating scaling
+ requests";
+ key "name";
+
+ leaf name {
+ type string;
+ }
+
+ leaf scale-in-threshold {
+ description
+ "Value below which scale-in requests are generated";
+ type decimal64{
+ fraction-digits 10;
+ }
+ }
+
+ leaf scale-in-relational-operation {
+ description
+ "The relational operator used to compare the monitoring param
+ against the scale-in-threshold.";
+ type common:relational-operation-type;
+ default LE;
+ }
+
+ leaf scale-out-threshold {
+ description
+ "Value above which scale-out requests are generated";
+ type decimal64{
+ fraction-digits 10;
+ }
+ }
+
+ leaf scale-out-relational-operation {
+ description
+ "The relational operator used to compare the monitoring param
+ against the scale-out-threshold.";
+ type common:relational-operation-type;
+ default GE;
+ }
+
+ leaf vnf-monitoring-param-ref {
+ description
+ "Reference to the VNF level monitoring parameter
+ that is aggregated";
+ type string;
+
+ }
+ }
+ }
+
+ list scaling-config-action {
+ description
+ "List of scaling config actions";
+ key "trigger";
+
+ leaf trigger {
+ description
+ "scaling trigger";
+ type common:scaling-trigger;
+ }
+
+ leaf vnf-config-primitive-name-ref {
+ description
+ "Reference to the VNF config primitive";
+ type leafref {
+ path "/vnfd:vnfd/day1-2:vnf-configuration/day1-2:config-primitive/day1-2:name";
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:df/vnfd:scaling-aspect" {
+ uses extended-scaling;
+ }
+}
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module various {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:various";
+ prefix "various";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping extended-vld {
+ container provider-network {
+ description
+ "Container for the provider network.";
+ leaf physical-network {
+ description
+ "Name of the physical network on which the provider
+ network is built.";
+ type string;
+ }
+
+ leaf segmentation_id {
+ description
+ "ID of segregated virtual networks";
+ type uint32;
+ }
+ }
+ }
+
+ grouping extended-security-group {
+ leaf security-group {
+ description
+ "Name of the security group";
+ type string;
+ }
+ }
+
+ grouping extended-cpd {
+ leaf port-security-enabled {
+ description
+ "Enables the port security for the port.";
+ type boolean;
+ default true;
+ }
+ }
+
+ grouping extended-vdu {
+ leaf pdu-type {
+ description
+ "Type of PDU. If this field exists, the deployment unit must be
+ understood as a PDU, not as a VDU. This field is used to identify
+ the category of PDU instances to be used at instantiation time. For
+ the instantiation to be successful, there must be available
+ PDU instances of this type in the selected datacenter.";
+ type string;
+ }
+
+ container supplemental-boot-data {
+ leaf boot-data-drive {
+ description
+ "Some VIMs implement additional drives to host config-files or meta-data";
+ type boolean;
+ default false;
+ }
+ }
+ }
+
+ grouping extended-device-bus {
+ leaf device-bus {
+ description
+ "Type of disk-bus on which this disk is exposed to guest";
+ type enumeration {
+ enum ide;
+ enum usb;
+ enum virtio;
+ enum scsi;
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd/vnfd:int-virtual-link-desc" {
+ uses extended-vld;
+ }
+
+ augment "/vnfd:vnfd/vnfd:df/vnfd:virtual-link-profile/vnfd:virtual-link-protocol-data/vnfd:l3-protocol-data" {
+ uses extended-security-group;
+ }
+
+ augment "/vnfd:vnfd/vnfd:ext-cpd" {
+ uses extended-cpd;
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu/vnfd:int-cpd" {
+ uses extended-cpd;
+ }
+
+ augment "/vnfd:vnfd/vnfd:vdu" {
+ uses extended-vdu;
+ }
+
+ augment "/vnfd:vnfd/vnfd:virtual-storage-desc" {
+ uses extended-device-bus;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ Copyright 2020 Whitestack LLC
+
+ 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.
+*/
+
+module vip {
+ yang-version 1.1;
+ namespace "urn:etsi:osm:yang:augments:vip";
+ prefix "vip";
+
+ import etsi-nfv-vnfd {
+ prefix vnfd;
+ }
+
+ grouping extended-vip {
+ list vip {
+ description
+ "Paired interfaces from different VDUs that share a Virtual IP";
+
+ key "name";
+ leaf name {
+ description
+ "Name of the Virtual IP";
+ type string;
+ }
+
+ list paired-interfaces {
+ key "vdu-id-ref";
+ leaf vdu-id-ref {
+ description
+ "Reference to the VDU";
+ type leafref {
+ path "/vnfd:vnfd/vnfd:vdu/vnfd:id";
+ }
+ }
+
+ leaf interface-ref {
+ description
+ "Reference to the interface";
+ type leafref {
+ path "/vnfd:vnfd/vnfd:vdu/vnfd:int-cpd/vnfd:virtual-network-interface-requirement/vnfd:name";
+ }
+ }
+ }
+ }
+ }
+
+ augment "/vnfd:vnfd" {
+ uses extended-vip;
+ }
+}
\ No newline at end of file
# limitations under the License.
import yaml
-import json
-# import logging
+import importlib
from osm_im.vnfd import vnfd as vnfd_im
from osm_im.nsd import nsd as nsd_im
from osm_im.nst import nst as nst_im
+etsi_nfv_vnfd = importlib.import_module("osm_im.etsi-nfv-vnfd")
+etsi_nfv_nsd = importlib.import_module("osm_im.etsi-nfv-nsd")
from pyangbind.lib.serialise import pybindJSONDecoder
import pyangbind.lib.pybindJSON as pybindJSON
myobj = nsd_im()
elif item == "nst":
myobj = nst_im()
+ elif item == "etsi_nfv_vnfd":
+ myobj = etsi_nfv_vnfd.etsi_nfv_vnfd()
+ elif item == "etsi_nfv_nsd":
+ myobj = etsi_nfv_nsd.etsi_nfv_nsd()
else:
raise ValidationException("Not possible to validate '{}' item".format(item))
item = "nsd"
elif 'nst' in data:
item = "nst"
+ elif 'vnfd' in data:
+ item = "etsi_nfv_vnfd"
+ elif 'nsd' in data:
+ item = "etsi_nfv_nsd"
else:
raise ValidationException("Error in YAML validation. Not possible to determine the type of descriptor in the first line. Expected values: vnfd:vnfd-catalog, vnfd-catalog, nsd:nsd-catalog, nsd-catalog, nst")
--- /dev/null
+#
+# Copyright 2019 Whitestack LLC
+#
+# 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.
+
+--- /tmp/sol006_model/src/yang/etsi-nfv-ns.yang 2019-12-04 13:56:05.510072421 +0000
++++ /tmp/sol006_model/src/yang/etsi-nfv-ns_new.yang 2019-12-04 13:59:32.675856579 +0000
+@@ -434,8 +434,8 @@
+ mandatory "true";
+ container vnf-profile {
+ leaf vnf-profile-id {
+- must ". = deref(../../vnfd-profile-id)" {
+- }
++ // must ". = deref(../../vnfd-profile-id)" {
++ // }
+ type leafref {
+ path "../../../../../nsd/df/vnf-profile/id";
+ }
+@@ -443,8 +443,8 @@
+ }
+ container pnf-profile {
+ leaf pnf-profile-id {
+- must ". = deref(../../pnfd-profile-id)" {
+- }
++ // must ". = deref(../../pnfd-profile-id)" {
++ // }
+ type leafref {
+ path "../../../../../nsd/df/pnf-profile/id";
+ }
+@@ -452,8 +452,8 @@
+ }
+ container ns-profile {
+ leaf ns-profile-id {
+- must ". = deref(../../ns-profile-id)" {
+- }
++ // must ". = deref(../../ns-profile-id)" {
++ // }
+ type leafref {
+ path "../../../../../nsd/df/ns-profile/id";
+ }
+@@ -469,8 +469,8 @@
+ choice constituent-cpd-id {
+ container vnf {
+ leaf vnfd-id {
+- must ". = deref(../../vnfd-profile-id)/../vnfd-id" {
+- }
++ // must ". = deref(../../vnfd-profile-id)/../vnfd-id" {
++ // }
+ type leafref {
+ path "../../../../../vnfd/id";
+ }
+@@ -483,8 +483,8 @@
+ }
+ container pnf {
+ leaf pnfd-id {
+- must ". = deref(../../pnfd-profile-id)/../pnfd-id" {
+- }
++ // must ". = deref(../../pnfd-profile-id)/../pnfd-id" {
++ // }
+ type leafref {
+ path "../../../../../pnfd/id";
+ }
+@@ -497,9 +497,9 @@
+ }
+ container ns {
+ leaf nsd-id {
+- must ". = deref(../../nested-ns-profile-id)/" +
+- "../nsd-id" {
+- }
++ // must ". = deref(../../nested-ns-profile-id)/" +
++ // "../nsd-id" {
++ // }
+
+ type leafref {
+ path "../../../../../nsd/id";
--- /dev/null
+#
+# Copyright 2019 Whitestack LLC
+#
+# 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.
+
+--- /tmp/sol006_model/src/yang/etsi-nfv-ns.yang 2019-12-04 14:26:39.453144459 +0000
++++ /tmp/sol006_model/src/yang/etsi-nfv-ns_new.yang 2019-12-04 14:28:34.659419362 +0000
+@@ -159,7 +159,7 @@
+ "GS NFV IFA014: Section 6.2.3.2 Sapd information element";
+ }
+
+- choice associated-cpd-id {
++ //choice associated-cpd-id {
+ container vnf {
+ leaf vnfd-id {
+ mandatory true;
+@@ -209,7 +209,7 @@
+ }
+ }
+ }
+- }
++ //}
+ }
+ }
+
import pyangbind
print("Using dir {}/{} for python artifacts".format(os.getcwd(), self.im_dir))
path = "{}/{}".format(os.getcwd(), self.im_dir)
- for files_item in ['vnfd', 'nsd', 'nst']:
- protoc_command = ["pyang",
- "-Werror",
- "--plugindir",
- "{}/plugin".format(os.path.dirname(pyangbind.__file__)),
- "--path",
- self.model_dir,
- "-f", "pybind",
- "-o",
- "{}/{}.py".format(self.im_dir, files_item),
- "{}/{}.yang".format(self.model_dir, files_item)]
- print("Generating {}.py from {}.yang".format(files_item, files_item))
- if subprocess.call(protoc_command) != 0:
- sys.exit(-1)
+ protoc_command = ["make", "models"]
+ if subprocess.call(protoc_command) != 0:
+ sys.exit(-1)
# To ensure generated files are copied to the python installation folder
self.copy_tree(self.im_dir, "{}{}".format(self.install_lib, self.im_dir))
install.run(self)
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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: hackfest_basic-vnf
+ name: hackfest_basic-vnf
+ short-name: hackfest_basic-vnf
+ version: "1.0"
+ description: A basic VNF descriptor w/ one VDU
+ logo: osm.png
+ connection-point:
+ - name: vnf-cp0
+
+ vdu:
+ - id: hackfest_basic-VM
+ name: hackfest_basic-VM
+ image: ubuntu1604
+ alternative-images:
+ - vim-type: aws
+ image: ubuntu/images/hvm-ssd/ubuntu-artful-17.10-amd64-server-20180509
+ count: "1"
+ vm-flavor:
+ vcpu-count: "1"
+ memory-mb: "1024"
+ storage-gb: "10"
+ interface:
+ - name: vdu-eth0
+ type: EXTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ external-connection-point-ref: vnf-cp0
+ mgmt-interface:
+ cp: vnf-cp0
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: hackfest_basic-vnf
+ product-name: hackfest_basic-vnf
+ description: A basic VNF descriptor w/ one VDU
+ version: "1.0"
+ mgmt-cp: vnf-cp0
+
+ virtual-compute-desc:
+ - id: cirros-compute
+ virtual-cpu:
+ num-virtual-cpu: 1
+ virtual-memory:
+ size: 1 # Memory size in GB
+
+ virtual-storage-desc:
+ - id: cirros-storage
+ size-of-storage: 10
+
+ sw-image-desc:
+ - id: ubuntu1604
+ name: ubuntu1604
+ checksum:
+ hash: # Mandatory?
+ - id: ubuntu1604-aws
+ name: ubuntu1604-aws
+ image: ubuntu/images/hvm-ssd/ubuntu-artful-17.10-amd64-server-20180509
+ vim-type: aws
+ checksum:
+ hash: # Mandatory?
+
+ vdu:
+ - id: hackfest_basic-VM
+ name: hackfest_basic-VM
+ virtual-compute-desc: cirros-compute
+ virtual-storage-desc:
+ - cirros-storage
+ sw-image-desc: ubuntu1604
+ alternative-sw-image-desc:
+ - ubuntu1604-aws
+ int-cpd:
+ - id: eth0-int
+ virtual-network-interface-requirement:
+ - name: vdu-eth0
+ virtual-interface:
+ type: PARAVIRT
+
+ df:
+ - id: cirros_default
+ vdu-profile:
+ - id: hackfest_basic-VM
+ min-number-of-instances: 1
+ instantiation-level:
+ - id: default
+ vdu-level:
+ - vdu-id: hackfest_basic-VM
+ number-of-instances: 1
+
+ ext-cpd:
+ - id: vnf-cp0
+ int-cpd: # Connection to int-cpd
+ vdu-id: hackfest_basic-VM
+ cpd: eth0-int
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - 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
+ 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
+ - member-vnf-index-ref: 1
+ vnfd-id-ref: cirros_vnfd
+ vnfd-connection-point-ref: eth0
+ - member-vnf-index-ref: 2
+ vnfd-id-ref: cirros_vnfd
+ vnfd-connection-point-ref: eth0
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - id: cirros_2vnf_nsd
+ name: cirros_2vnf_nsd
+ description: Generated by OSM package generator
+ designer: OSM
+ version: "1.0"
+ vnfd-id:
+ - cirros_vnfd
+
+ virtual-link-desc:
+ - id: cirros_2vnf_nsd_vld1
+ mgmt-network: "true"
+
+ df:
+ - id: cirros_DF
+ vnf-profile:
+ - id: cirros_vnf1 # member-vnf-index-ref: 1
+ vnfd-id: cirros_vnfd
+ virtual-link-connectivity:
+ - virtual-link-profile-id: cirros_2vnf_nsd_vld1
+ constituent-cpd-id:
+ - constituent-base-element-id: cirros_vnf1
+ constituent-cpd-id: eth0-ext
+ - id: cirros_vnf2 # member-vnf-index-ref: 2
+ vnfd-id: cirros_vnfd
+ virtual-link-connectivity:
+ - virtual-link-profile-id: cirros_2vnf_nsd_vld1
+ constituent-cpd-id:
+ - constituent-base-element-id: cirros_vnf2
+ constituent-cpd-id: eth0-ext
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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: 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:
+ cp: eth0
+
+ # 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: cirros034
+ #checksum:
+
+ interface:
+ # Specify the external interfaces
+ # There can be multiple interfaces defined
+ - name: eth0
+ type: EXTERNAL
+ virtual-interface:
+ type: VIRTIO
+ bandwidth: "0"
+ vpci: 0000:00:0a.0
+ external-connection-point-ref: eth0
+
+ connection-point:
+ - name: eth0
+ type: VPORT
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: cirros_vnfd
+ product-name: cirros_vnf
+ description: Simple VNF example with a cirros
+ provider: OSM
+ version: "1.0"
+ mgmt-cp: eth0-ext
+
+ virtual-compute-desc:
+ - id: cirros-compute
+ virtual-cpu:
+ num-virtual-cpu: 1
+ virtual-memory:
+ size: 0.256 # Memory size in GB
+
+ virtual-storage-desc:
+ - id: cirros-storage
+ size-of-storage: 2
+
+ sw-image-desc:
+ - id: cirros034
+ name: cirros034
+
+ vdu:
+ - id: cirros_vnfd-VM
+ name: cirros_vnfd-VM
+ description: cirros_vnfd-VM
+ virtual-compute-desc: cirros-compute
+ virtual-storage-desc:
+ - cirros-storage
+ sw-image-desc: cirros034
+ int-cpd:
+ - id: eth0-int
+ virtual-network-interface-requirement:
+ - name: eth0
+ virtual-interface:
+ type: VIRTIO
+ bandwidth: "0"
+ vpci: 0000:00:0a.0
+
+ df:
+ - id: cirros_default
+ vdu-profile:
+ - id: cirros_vnfd-VM
+ min-number-of-instances: 1
+ instantiation-level:
+ - id: default
+ vdu-level:
+ - vdu-id: cirros_vnfd-VM
+ number-of-instances: 1
+
+ ext-cpd:
+ - id: eth0-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: cirros_vnfd-VM
+ cpd: eth0-int
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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-catalog:
+ vnfd:
+ - connection-point:
+ - name: eth0
+ type: VPORT
+ - name: xe0
+ type: VPORT
+ - name: xe1
+ type: VPORT
+ - name: xe2
+ type: VPORT
+ - name: xe3
+ type: VPORT
+ - name: xe4
+ type: VPORT
+ - name: xe5
+ type: VPORT
+ - name: xe6
+ type: VPORT
+ - name: xe7
+ type: VPORT
+ description: vBNG VNF for performance tests, with 34 HTs
+ id: vbng34
+ logo: intel.png
+ mgmt-interface:
+ cp: eth0
+ name: vbng34
+ service-function-chain: UNAWARE
+ short-name: vbng34
+ vdu:
+ - count: "1"
+ description: vbng34-VM
+ 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: "17"
+ node-cnt: "1"
+ host-epa:
+ om-cpu-feature:
+ - feature: 64b
+ - feature: iommu
+ - feature: lps
+ - feature: tlbps
+ - feature: hwsv
+ - feature: dioc
+ - feature: ht
+ om-cpu-model-string: Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz
+ hypervisor-epa:
+ type: REQUIRE_KVM
+ version: 10002|12001|2.6.32-358.el6.x86_64
+ id: vbng34-VM
+ image: intel_vbng34
+ interface:
+ - external-connection-point-ref: eth0
+ name: eth0
+ position: "1"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "1000000"
+ type: PARAVIRT
+ vpci: 0000:00:0a.0
+ - external-connection-point-ref: xe0
+ name: xe0
+ position: "2"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:10.0"
+ - external-connection-point-ref: xe1
+ name: xe1
+ position: "3"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:11.0"
+ - external-connection-point-ref: xe2
+ name: xe2
+ position: "4"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:12.0"
+ - external-connection-point-ref: xe3
+ name: xe3
+ position: "5"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:13.0"
+ - external-connection-point-ref: xe4
+ name: xe4
+ position: "6"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:14.0"
+ - external-connection-point-ref: xe5
+ name: xe5
+ position: "7"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:15.0"
+ - external-connection-point-ref: xe6
+ name: xe6
+ position: "8"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:16.0"
+ - external-connection-point-ref: xe7
+ name: xe7
+ position: "9"
+ type: EXTERNAL
+ virtual-interface:
+ bandwidth: "10000000000"
+ type: PCI-PASSTHROUGH
+ vpci: "0000:00:17.0"
+ name: vbng34-VM
+ supplemental-boot-data:
+ boot-data-drive: "false"
+ vm-flavor:
+ memory-mb: "32768"
+ storage-gb: "15"
+ vendor: Intel
+ version: "1.0"
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: epa-advanced-vnfd
+ description: vBNG VNF for performance tests, with 34 HTs
+ product-name: vbng34
+ provider: Intel
+ version: "1.0"
+ mgmt-cp: eth0-ext
+ sw-image-desc:
+ - id: intel_vbng34
+ name: intel_vbng34
+ virtual-compute-desc:
+ - id: epa-compute
+ virtual-cpu:
+ pinning: # Generic key/value pairs
+ policy: static
+ thread-policy: PREFER
+ virtual-memory:
+ size: 32
+ mempage-size: LARGE
+ numa-enabled: true # Replaces NUMA aware/unaware choice
+ numa-node-policy:
+ mem-policy: STRICT
+ node:
+ - id: "1"
+ paired-threads:
+ num-paired-threads: "17"
+ node-cnt: "1"
+ virtual-storage-desc:
+ - id: epa-storage
+ size-of-storage: 10
+ vdu:
+ - id: epa-vdu
+ name: epa-vdu
+ sw-image-desc: intel_vbng34
+ virtual-compute-desc: epa-compute
+ virtual-storage-desc:
+ - epa-storage
+ int-cpd:
+ - id: eth0
+ virtual-network-interface-requirement:
+ - name: eth0
+ position: 1
+ virtual-interface:
+ type: PARAVIRT
+ bandwidth: 1000000
+ vpci: 0000:00:0a.0
+ - id: xe0
+ virtual-network-interface-requirement:
+ - name: xe0
+ position: 2
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:10.0
+ - id: xe1
+ virtual-network-interface-requirement:
+ - name: xe1
+ position: 3
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:11.0
+ - id: xe2
+ virtual-network-interface-requirement:
+ - name: xe2
+ position: 4
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:12.0
+ - id: xe3
+ virtual-network-interface-requirement:
+ - name: xe3
+ position: 5
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:13.0
+ - id: xe4
+ virtual-network-interface-requirement:
+ - name: xe4
+ position: 6
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:14.0
+ - id: xe5
+ virtual-network-interface-requirement:
+ - name: xe5
+ position: 7
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:15.0
+ - id: xe6
+ virtual-network-interface-requirement:
+ - name: xe6
+ position: 8
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ bandwidth: 10000000000
+ vpci: 0000:00:16.0
+ - id: xe7
+ virtual-network-interface-requirement:
+ - name: xe7
+ position: 9
+ virtual-interface:
+ type: VIRTIO
+ bandwidth: 10000000000
+ vpci: 0000:00:17.0
+ supplemental-boot-data:
+ boot-data-drive: false
+ ext-cpd:
+ - id: eth0-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: eth0
+ - id: xe0-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe0
+ - id: xe1-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe1
+ - id: xe2-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe2
+ - id: xe3-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe3
+ - id: xe4-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe4
+ - id: xe5-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe5
+ - id: xe6-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe6
+ - id: xe7-ext
+ int-cpd:
+ vdu-id: epa-vdu
+ cpd: xe7
\ No newline at end of file
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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.
+
+# Example adapted from official ETSI repo:
+# https://forge.etsi.org/rep/nfv/SOL006/blob/master/example-data/complex-vnfd.xml
+
+vnfd:
+ provider: My Company
+ product-name: complex-vnf
+ software-version: '1.0'
+ version: '1.0'
+ vnfm-info: netconf
+ id: complex-vnf
+ vdu:
+ - id: control-plane-active
+ name: control-plane-active
+ int-cpd:
+ - id: internal
+ int-virtual-link-desc: internal-vl
+ layer-protocol: ipv4
+ - id: mgmt
+ int-virtual-link-desc: mgmt
+ layer-protocol: ipv4
+ virtual-compute-desc: CP
+ virtual-storage-desc:
+ - root
+ sw-image-desc: CP
+ - id: control-plane-standby
+ name: control-plane-standby
+ int-cpd:
+ - id: internal
+ int-virtual-link-desc: internal-vl
+ layer-protocol: ipv4
+ - id: mgmt
+ int-virtual-link-desc: mgmt
+ layer-protocol: ipv4
+ virtual-compute-desc: CP
+ virtual-storage-desc:
+ - root
+ sw-image-desc: CP
+ - id: data-plane
+ name: data-plane
+ int-cpd:
+ - id: in
+ layer-protocol: ipv4
+ - id: internal
+ int-virtual-link-desc: internal-vl
+ layer-protocol: ipv4
+ - id: out
+ layer-protocol: ipv4
+ virtual-compute-desc: DP
+ virtual-storage-desc:
+ - root
+ sw-image-desc: DP
+ virtual-compute-desc:
+ - id: CP
+ virtual-memory:
+ size: '16.0'
+ virtual-cpu:
+ num-virtual-cpu: '8'
+ - id: DP
+ virtual-memory:
+ size: '32.0'
+ virtual-cpu:
+ num-virtual-cpu: '16'
+ virtual-storage-desc:
+ - id: root
+ type-of-storage: ephemeral-storage
+ size-of-storage: '10'
+ rdma-enabled: 'true'
+ sw-image-desc: CP
+ sw-image-desc:
+ - id: CP
+ name: CP
+ version: '1.1'
+ checksum:
+ algorithm: sha-224
+ hash: deadbeef
+ container-format: bare
+ disk-format: qcow2
+ min-disk: '1'
+ min-ram: '2.0'
+ size: '1'
+ image: 'http://mycompany.images.com/control-plane.qcow2'
+ - id: DP
+ name: DP
+ version: '1.1'
+ checksum:
+ algorithm: sha-224
+ hash: deadbeef
+ container-format: bare
+ disk-format: qcow2
+ min-disk: '1'
+ min-ram: '2.0'
+ size: '1'
+ image: 'http://mycompany.images.com/data-plane.qcow2'
+ int-virtual-link-desc:
+ - id: internal-vl
+ connectivity-type:
+ layer-protocol: ipv4
+ - id: mgmt
+ connectivity-type:
+ layer-protocol: ipv4
+ ext-cpd:
+ - id: in
+ int-cpd:
+ vdu-id: data-plane
+ cpd: in
+ layer-protocol: ipv4
+ - id: mgmt
+ int-virtual-link-desc: mgmt
+ layer-protocol: ipv4
+ - id: out
+ int-cpd:
+ vdu-id: data-plane
+ cpd: out
+ layer-protocol: ipv4
+ df:
+ - id: gold
+ vdu-profile:
+ - id: control-plane-active
+ min-number-of-instances: '1'
+ max-number-of-instances: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ - id: control-plane-standby
+ min-number-of-instances: '1'
+ max-number-of-instances: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ - id: data-plane
+ min-number-of-instances: '2'
+ max-number-of-instances: '8'
+ instantiation-level:
+ - id: il-1
+ vdu-level:
+ - vdu-id: control-plane-active
+ number-of-instances: '1'
+ - vdu-id: control-plane-standby
+ number-of-instances: '1'
+ - vdu-id: data-plane
+ number-of-instances: '2'
+ - id: il-2
+ vdu-level:
+ - vdu-id: control-plane-active
+ number-of-instances: '1'
+ - vdu-id: control-plane-standby
+ number-of-instances: '1'
+ - vdu-id: data-plane
+ number-of-instances: '4'
+ default-instantiation-level: il-1
+ lcm-operations-configuration:
+ scale-vnf-to-level-op-config:
+ arbitrary-target-levels-supported: 'true'
+ terminate-vnf-op-config:
+ min-graceful-termination: '1'
+ operate-vnf-op-config:
+ min-graceful-stop-timeout: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ type: anti-affinity
+ scope: nfvi-node
+ - id: silver
+ vdu-profile:
+ - id: control-plane-active
+ min-number-of-instances: '1'
+ max-number-of-instances: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ - id: control-plane-standby
+ min-number-of-instances: '1'
+ max-number-of-instances: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ - id: data-plane
+ min-number-of-instances: '1'
+ max-number-of-instances: '4'
+ instantiation-level:
+ - id: il-1
+ vdu-level:
+ - vdu-id: control-plane-active
+ number-of-instances: '1'
+ - vdu-id: control-plane-standby
+ number-of-instances: '1'
+ - vdu-id: data-plane
+ number-of-instances: '1'
+ - id: il-2
+ vdu-level:
+ - vdu-id: control-plane-active
+ number-of-instances: '1'
+ - vdu-id: control-plane-standby
+ number-of-instances: '1'
+ - vdu-id: data-plane
+ number-of-instances: '2'
+ default-instantiation-level: il-1
+ lcm-operations-configuration:
+ scale-vnf-to-level-op-config:
+ arbitrary-target-levels-supported: 'true'
+ terminate-vnf-op-config:
+ min-graceful-termination: '1'
+ operate-vnf-op-config:
+ min-graceful-stop-timeout: '1'
+ affinity-or-anti-affinity-group:
+ - id: control-plane
+ type: anti-affinity
+ scope: nfvi-node
\ No newline at end of file
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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.
+
+# Example adapted from official ETSI repo:
+# https://forge.etsi.org/rep/nfv/SOL006/blob/master/example-data/nfv-nsd.xml
+
+nsd:
+ nsd:
+ - id: firewall-nsd
+ vnfd-id: ASA
+ sapd:
+ - id: inside
+ - id: management
+ - id: outside
+ df:
+ - id: firewall
+ vnf-profile:
+ - id: firewall
+ vnfd-id: ASA
+ flavour-id: normal
+ instantiation-level: single
+ min-number-of-instances: '1'
+ max-number-of-instances: '1'
+ ns-instantiation-level:
+ - id: single
+ vnf-to-level-mapping:
+ - vnf-profile-id: firewall
+ number-of-instances: '1'
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - constituent-vnfd:
+ - member-vnf-index: '1'
+ vnfd-id-ref: hackfest3charmed-vnf
+ - member-vnf-index: '2'
+ vnfd-id-ref: hackfest3charmed-vnf
+ description: NS with 2 VNFs hackfest3charmed-vnf connected by datanet and mgmtnet VLs
+ id: hackfest3charmed-ns
+ logo: osm.png
+ name: hackfest3charmed-ns
+ short-name: hackfest3charmed-ns
+ version: '1.0'
+ vld:
+ - id: mgmt
+ mgmt-network: true
+ name: mgmt
+ short-name: mgmt
+ type: ELAN
+ vim-network-name: mgmt
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: '1'
+ vnfd-connection-point-ref: vnf-mgmt
+ vnfd-id-ref: hackfest3charmed-vnf
+ - member-vnf-index-ref: '2'
+ vnfd-connection-point-ref: vnf-mgmt
+ vnfd-id-ref: hackfest3charmed-vnf
+ - id: datanet
+ name: datanet
+ short-name: datanet
+ type: ELAN
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: '1'
+ vnfd-connection-point-ref: vnf-data
+ vnfd-id-ref: hackfest3charmed-vnf
+ - member-vnf-index-ref: '2'
+ vnfd-connection-point-ref: vnf-data
+ vnfd-id-ref: hackfest3charmed-vnf
+
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - id: hackfest3charmed-ns
+ name: hackfest3charmed-ns
+ description: NS with 2 VNFs hackfest3charmed-vnf connected by datanet and mgmtnet VLs
+ designer: OSM
+ version: '1.0'
+
+ vnfd-id:
+ - hackfest3charmed-vnf
+
+ virtual-link-desc:
+ - id: mgmt
+ mgmt-network: "true"
+ - id: datanet
+ mgmt-network: "false"
+
+ df:
+ - id: hackfest_charmed_DF
+ vnf-profile:
+ - id: hackfest_vnf1 # member-vnf-index-ref: 1
+ vnfd-id: hackfest3charmed-vnf
+ virtual-link-connectivity:
+ - virtual-link-profile-id: mgmt
+ constituent-cpd-id:
+ - constituent-base-element-id: hackfest_vnf1
+ constituent-cpd-id: vnf-mgmt-ext
+ - virtual-link-profile-id: datanet
+ constituent-cpd-id:
+ - constituent-base-element-id: hackfest_vnf1
+ constituent-cpd-id: vnf-data-ext
+ - id: hackfest_vnf2 # member-vnf-index-ref: 2
+ vnfd-id: hackfest3charmed-vnf
+ virtual-link-connectivity:
+ - virtual-link-profile-id: mgmt
+ constituent-cpd-id:
+ - constituent-base-element-id: hackfest_vnf2
+ constituent-cpd-id: vnf-mgmt-ext
+ - virtual-link-profile-id: datanet
+ constituent-cpd-id:
+ - constituent-base-element-id: hackfest_vnf2
+ constituent-cpd-id: vnf-data-ext
\ No newline at end of file
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - connection-point:
+ - id: vnf-mgmt
+ name: vnf-mgmt
+ short-name: vnf-mgmt
+ type: VPORT
+ - id: vnf-data
+ name: vnf-data
+ short-name: vnf-data
+ type: VPORT
+ description: >-
+ A VNF consisting of 2 VDUs connected to an internal VL, and one VDU with
+ cloud-init
+ id: hackfest3charmed-vnf
+ internal-vld:
+ - id: internal
+ internal-connection-point:
+ - id-ref: mgmtVM-internal
+ - id-ref: dataVM-internal
+ name: internal
+ short-name: internal
+ type: ELAN
+ logo: osm.png
+ mgmt-interface:
+ cp: vnf-mgmt
+ monitoring-param:
+ - aggregation-type: AVERAGE
+ id: monitor1
+ name: monitor1
+ vdu-monitoring-param:
+ vdu-monitoring-param-ref: dataVM_cpu_util
+ vdu-ref: dataVM
+ name: hackfest3charmed-vnf
+ scaling-group-descriptor:
+ - max-instance-count: 10
+ name: scale_dataVM
+ scaling-config-action:
+ - trigger: post-scale-out
+ vnf-config-primitive-name-ref: touch
+ - trigger: pre-scale-in
+ vnf-config-primitive-name-ref: touch
+ scaling-policy:
+ - cooldown-time: 60
+ name: auto_cpu_util_above_threshold
+ scaling-criteria:
+ - name: cpu_util_above_threshold
+ scale-in-relational-operation: LE
+ scale-in-threshold: '15.0000000000'
+ scale-out-relational-operation: GE
+ scale-out-threshold: '60.0000000000'
+ vnf-monitoring-param-ref: monitor1
+ scaling-type: automatic
+ threshold-time: 0
+ vdu:
+ - count: 1
+ vdu-id-ref: dataVM
+ short-name: hackfest3charmed-vnf
+ vdu:
+ - count: '1'
+ cloud-init-file: cloud-config.txt
+ id: mgmtVM
+ image: hackfest3-mgmt
+ interface:
+ - external-connection-point-ref: vnf-mgmt
+ name: mgmtVM-eth0
+ position: 1
+ type: EXTERNAL
+ virtual-interface:
+ type: VIRTIO
+ - internal-connection-point-ref: mgmtVM-internal
+ name: mgmtVM-eth1
+ position: 2
+ type: INTERNAL
+ virtual-interface:
+ type: VIRTIO
+ internal-connection-point:
+ - id: mgmtVM-internal
+ name: mgmtVM-internal
+ short-name: mgmtVM-internal
+ type: VPORT
+ name: mgmtVM
+ vm-flavor:
+ memory-mb: '1024'
+ storage-gb: '10'
+ vcpu-count: 1
+ - count: '1'
+ id: dataVM
+ image: hackfest3-mgmt
+ interface:
+ - internal-connection-point-ref: dataVM-internal
+ name: dataVM-eth0
+ position: 1
+ type: INTERNAL
+ virtual-interface:
+ type: VIRTIO
+ - external-connection-point-ref: vnf-data
+ name: dataVM-xe0
+ position: 2
+ type: EXTERNAL
+ virtual-interface:
+ type: VIRTIO
+ internal-connection-point:
+ - id: dataVM-internal
+ name: dataVM-internal
+ short-name: dataVM-internal
+ type: VPORT
+ monitoring-param:
+ - id: dataVM_cpu_util
+ nfvi-metric: cpu_utilization
+ name: dataVM
+ vm-flavor:
+ memory-mb: '1024'
+ storage-gb: '10'
+ vcpu-count: 1
+ version: '1.0'
+ vnf-configuration:
+ config-primitive:
+ - name: touch
+ parameter:
+ - data-type: STRING
+ default-value: <touch_filename2>
+ name: filename
+ initial-config-primitive:
+ - name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: osm4u
+ seq: '1'
+ - name: touch
+ parameter:
+ - name: filename
+ value: <touch_filename>
+ seq: '2'
+ juju:
+ charm: simple
+
+
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: hackfest3charmed-vnf
+ description: >-
+ A VNF consisting of 2 VDUs connected to an internal VL, and one VDU with
+ cloud-init
+ product-name: hackfest3charmed-vnf
+ version: '1.0'
+ mgmt-cp: vnf-mgmt-ext
+
+ virtual-compute-desc:
+ - id: mgmt-compute
+ virtual-cpu:
+ num-virtual-cpu: 1
+ virtual-memory:
+ size: 1
+ - id: data-compute
+ virtual-cpu:
+ num-virtual-cpu: 1
+ virtual-memory:
+ size: 1
+
+ virtual-storage-desc:
+ - id: mgmt-storage
+ size-of-storage: 10
+ - id: data-storage
+ size-of-storage: 10
+
+ sw-image-desc:
+ - id: hackfest3-mgmt
+ name: hackfest3-mgmt
+
+ vdu:
+ - id: mgmtVM
+ name: mgmtVM
+ cloud-init-file: cloud-config.txt
+ sw-image-desc: hackfest3-mgmt
+ virtual-compute-desc: mgmt-compute
+ virtual-storage-desc:
+ - mgmt-storage
+ int-cpd:
+ - id: vnf-mgmt
+ virtual-network-interface-requirement:
+ - name: mgmtVM-eth0
+ position: 1
+ virtual-interface:
+ type: VIRTIO
+ - id: mgmtVM-internal
+ int-virtual-link-desc: internal
+ virtual-network-interface-requirement:
+ - name: mgmtVM-eth1
+ position: 2
+ virtual-interface:
+ type: VIRTIO
+ - id: dataVM
+ name: dataVM
+ sw-image-desc: hackfest3-mgmt
+ virtual-compute-desc: data-compute
+ virtual-storage-desc:
+ - data-storage
+ int-cpd:
+ - id: dataVM-internal
+ int-virtual-link-desc: internal
+ virtual-network-interface-requirement:
+ - name: dataVM-eth1
+ position: 1
+ virtual-interface:
+ type: VIRTIO
+ - id: vnf-data
+ virtual-network-interface-requirement:
+ - name: dataVM-eth0
+ position: 2
+ virtual-interface:
+ type: VIRTIO
+ monitoring-parameter:
+ - id: dataVM_cpu_util
+ name: dataVM_cpu_util
+ performance-metric: cpu_utilization
+
+ int-virtual-link-desc:
+ - id: internal
+
+ ext-cpd:
+ - id: vnf-mgmt-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: mgmtVM
+ cpd: vnf-mgmt
+ - id: vnf-data-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: dataVM
+ cpd: vnf-data
+
+ df:
+ - id: hackfest_default
+ vnf-configuration-id: vnf-configuration-example
+ vdu-profile:
+ - id: mgmtVM
+ min-number-of-instances: 1
+ - id: dataVM
+ min-number-of-instances: 1
+ max-number-of-instances: 10
+ vdu-configuration-id: vdu-configuration-example
+ instantiation-level:
+ - id: default
+ vdu-level:
+ - vdu-id: mgmtVM
+ number-of-instances: 1
+ - vdu-id: dataVM
+ number-of-instances: 1
+ scaling-aspect:
+ - id: scale_dataVM
+ name: scale_dataVM
+ max-scale-level: 10
+ aspect-delta-details:
+ deltas:
+ - id: delta1
+ vdu-delta:
+ - id: vdudelta1
+ number-of-instances: 1
+ scaling-policy:
+ - name: auto_cpu_util_above_threshold
+ scaling-type: automatic
+ enabled: true
+ threshold-time: 0
+ cooldown-time: 60
+ scaling-criteria:
+ - name: cpu_util_above_threshold
+ scale-in-relational-operation: LE
+ scale-in-threshold: '15.0000000000'
+ scale-out-relational-operation: GE
+ scale-out-threshold: '60.0000000000'
+ vnf-monitoring-param-ref: dataVM_cpu_util
+ scaling-config-action:
+ - trigger: post-scale-out
+ vnf-config-primitive-name-ref: touch
+ - trigger: pre-scale-in
+ vnf-config-primitive-name-ref: touch
+
+ vnf-configuration:
+ - id: vnf-configuration-example
+ initial-config-primitive:
+ - seq: "1"
+ name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: osm4u
+ - seq: "2"
+ name: touch
+ parameter:
+ - name: filename
+ value: <touch_filename>
+ config-primitive:
+ - name: touch
+ parameter:
+ - data-type: STRING
+ default-value: <touch_filename2>
+ name: filename
+ juju:
+ charm: simple
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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-catalog:
+ schema-version: "3.0"
+ vnfd:
+ - id: fb_magma_knf
+ name: fb_magma_knf
+ short-name: fb_magma_knf
+ description: KNF with KDU using a helm-chart for Facebook magma orc8r
+ vendor: ATOS
+ version: "1.0"
+ mgmt-interface:
+ cp: mgmt
+ connection-point:
+ - name: mgmt
+ k8s-cluster:
+ nets:
+ - id: mgmtnet
+ external-connection-point-ref: mgmt
+ kdu:
+ - name: orc8r
+ helm-chart: magma/orc8r
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: fb_magma_knf
+ product-name: fb_magma_knf
+ description: KNF with KDU using a helm-chart for Facebook magma orc8r
+ provider: ATOS
+ version: "1.0"
+ mgmt-cp: mgmt-ext
+
+ ext-cpd:
+ - id: mgmt-ext
+ k8s-cluster-net: mgmtnet
+
+ k8s-cluster:
+ nets:
+ - id: mgmtnet
+
+ kdu:
+ - name: orc8r
+
+ kdu-model:
+ - id: orc8r-model
+ kdu-model-type: helm-chart
+ kdu-model-locator: magma/orc8r
+
+ df:
+ - id: kdu-df
+ kdu-profile:
+ - name: orc8r
+ kdu-model-id: orc8r-model
\ No newline at end of file
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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: vEPC_vnfd
+ name: vEPC_vnfd # To product-name
+ short-name: vEPC_vnfd # Deprecated
+ description: Generated by OSM package generator
+ vendor: OSM_VNFONB_TF # To do provider
+ version: "1.0"
+ mgmt-interface: # To mgmt-cp
+ cp: spgwmme-mgmt
+ ip-profiles: # To deployment flavour (DF)
+ - name: s6a
+ description: s6a network
+ ip-profile-params:
+ ip-version: ipv4
+ subnet-address: 10.0.6.0/24
+ dhcp-params:
+ enabled: true
+ vdu:
+ - id: spgwmme
+ name: spgwmme
+ description: spgwmme
+ count: 1 # To DF vdu-profile or instantiation-level
+ vm-flavor:
+ vcpu-count: 2
+ memory-mb: 4096
+ storage-gb: 10
+ image: "nextepc-spgwmme-base"
+ cloud-init-file: spgwmme-init
+ interface:
+ - name: eth0
+ type: EXTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ external-connection-point-ref: spgwmme-mgmt
+ - name: eth1
+ type: EXTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ external-connection-point-ref: spgwmme-s1
+ - name: eth2
+ type: EXTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ external-connection-point-ref: spgwmme-sgi
+ - name: eth3
+ type: INTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ internal-connection-point-ref: spgwmme-s6a
+ internal-connection-point:
+ - id: spgwmme-s6a
+ name: spgwmme-s6a
+ type: VPORT
+ monitoring-param: # To be removed (feature 8157)
+ - id: "spgw_cpu_util"
+ nfvi-metric: "cpu_utilization"
+ - id: "spgw_memory_util"
+ nfvi-metric: "average_memory_utilization"
+ - id: hss
+ name: hss
+ description: hss
+ count: 1
+ vm-flavor:
+ vcpu-count: 1
+ memory-mb: 2048
+ storage-gb: 10
+ image: "nextepc-hss-base"
+ cloud-init-file: hss-init
+ interface:
+ - name: eth0
+ type: EXTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ mgmt-interface: true
+ external-connection-point-ref: hss-mgmt
+ - name: eth1
+ type: INTERNAL
+ virtual-interface:
+ type: PARAVIRT
+ internal-connection-point-ref: hss-s6a
+ internal-connection-point:
+ - id: hss-s6a
+ name: hss-s6a
+ type: VPORT
+ vdu-configuration:
+ initial-config-primitive:
+ - seq: "1"
+ name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: <password>
+ - seq: "2"
+ name: configure-hss
+ parameter:
+ - name: spgw-ip
+ data-type: STRING
+ value: <spgw_ip>
+ - name: hss-ip
+ data-type: STRING
+ value: <hss_ip>
+ - seq: "3"
+ name: restart-hss
+ juju:
+ charm: hsscharm
+ internal-vld:
+ - id: s6a
+ ip-profile-ref: s6a
+ internal-connection-point:
+ - id-ref: spgwmme-s6a
+ - id-ref: hss-s6a
+ name: s6a
+ connection-point:
+ - name: spgwmme-mgmt
+ - name: spgwmme-s1
+ - name: spgwmme-sgi
+ - name: hss-mgmt
+ vnf-configuration:
+ initial-config-primitive:
+ - seq: "1"
+ name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: <password>
+ - seq: "2"
+ name: configure-spgw
+ parameter:
+ - name: spgw-ip
+ data-type: STRING
+ value: <spgw_ip>
+ - name: hss-ip
+ data-type: STRING
+ value: <hss_ip>
+ - seq: "3"
+ name: restart-spgw
+ config-primitive:
+ - name: add-route
+ parameter:
+ - name: external-prefix
+ data-type: STRING
+ default-value: "8.8.8.8/32"
+ - name: next-hop
+ data-type: STRING
+ default-value: "192.168.2.1"
+ juju:
+ charm: spgwcharm
+ monitoring-param:
+ - id: "spgw_cpu_util"
+ name: "spgw_cpu_util"
+ aggregation-type: AVERAGE
+ vdu-monitoring-param:
+ vdu-ref: "spgwmme"
+ vdu-monitoring-param-ref: "spgw_cpu_util"
+ - id: "spgw_memory_util"
+ name: "spgw_memory_util"
+ aggregation-type: AVERAGE
+ vdu-monitoring-param:
+ vdu-ref: "spgwmme"
+ vdu-monitoring-param-ref: "spgw_memory_util"
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - id: vEPC_nsd
+ name: vEPC_nsd
+ short-name: vEPC_nsd # Deprecated
+ description: Generated by OSM package generator
+ vendor: OSM_VNFONB_TF # To designer
+ version: "1.0"
+ constituent-vnfd:
+ - member-vnf-index: 1
+ vnfd-id-ref: vEPC_vnfd
+
+ vld:
+ - id: management
+ name: management # Deprecated
+ short-name: management # Deprecated
+ type: ELAN # Deprecated
+ mgmt-network: "true"
+ vim-network-name: osm-ext
+
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: 1
+ vnfd-id-ref: vEPC_vnfd
+ vnfd-connection-point-ref: spgwmme-mgmt
+ - member-vnf-index-ref: 1
+ vnfd-id-ref: vEPC_vnfd
+ vnfd-connection-point-ref: hss-mgmt
+ - id: s1
+ name: s1
+ short-name: s1
+ type: ELAN
+ vim-network-name: s1
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: 1
+ vnfd-id-ref: vEPC_vnfd
+ vnfd-connection-point-ref: spgwmme-s1
+ ip-address: 192.168.0.11
+ - id: sgi
+ name: sgi
+ short-name: sgi
+ type: ELAN
+ vim-network-name: sgi
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: 1
+ vnfd-id-ref: vEPC_vnfd
+ vnfd-connection-point-ref: spgwmme-sgi
+ ip-address: 192.168.2.11
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ - id: vEPC_nsd
+ name: vEPC_nsd
+ description: Generated by OSM package generator
+ designer: OSM_VNFONB_TF
+ version: "1.0"
+ vnfd-id:
+ - vEPC_vnfd
+
+ virtual-link-desc:
+ - id: management
+ mgmt-network: "true"
+ provider-network:
+ physical-network: osm-ext
+ - id: s1
+ provider-network:
+ physical-network: s1
+ - id: sgi
+ provider-network:
+ physical-network: sgi
+
+ df:
+ - id: vEPC_DF
+ vnf-profile:
+ - id: vEPC-VNF
+ vnfd-id: vEPC_vnfd
+ virtual-link-connectivity:
+ - virtual-link-profile-id: management
+ constituent-cpd-id:
+ - constituent-base-element-id: vEPC_vnfd
+ constituent-cpd-id: spgwmme-mgmt
+ - constituent-base-element-id: vEPC_vnfd
+ constituent-cpd-id: hss-mgmt
+ - virtual-link-profile-id: s1
+ constituent-cpd-id:
+ - constituent-base-element-id: vEPC_vnfd
+ constituent-cpd-id: spgwmme-s1
+ - virtual-link-profile-id: sgi
+ constituent-cpd-id:
+ - constituent-base-element-id: vEPC_vnfd
+ constituent-cpd-id: spgwmme-sgi
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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:
+ id: vEPC_vnfd
+ product-name: vEPC_vnfd
+ description: Generated by OSM package generator
+ provider: OSM_VNFONB_TF
+ version: "1.0"
+ mgmt-cp: spgwmme-mgmt-ext #Simplified from mgmt-interface
+ virtual-compute-desc:
+ - id: spgwmme-compute
+ virtual-cpu:
+ num-virtual-cpu: 2
+ virtual-memory:
+ size: 4 # Memory size in GB
+ - id: hss-compute
+ virtual-cpu:
+ num-virtual-cpu: 1
+ virtual-memory:
+ size: 2 # Memory size in GB
+ virtual-storage-desc:
+ - id: spgwmme-storage
+ size-of-storage: 10
+ - id: hss-storage
+ size-of-storage: 10
+ sw-image-desc:
+ - id: nextepc-spgwmme-base
+ name: nextepc-spgwmme-base
+ checksum:
+ hash: # Mandatory?
+ - id: nextepc-hss-bas
+ name: nextepc-hss-bas
+ checksum:
+ hash: # Mandatory?
+ vdu:
+ - id: spgwmme
+ name: spgwmme
+ description: spgwmme
+ cloud-init-file: spgwmme-init
+ virtual-compute-desc: spgwmme-compute
+ virtual-storage-desc:
+ - spgwmme-storage
+ sw-image-desc: nextepc-spgwmme-base
+ int-cpd:
+ - id: spgwmme-mgmt-int
+ virtual-network-interface-requirement:
+ - name: eth0
+ virtual-interface:
+ type: PARAVIRT
+ - id: spgwmme-s1-int
+ virtual-network-interface-requirement:
+ - name: eth1
+ virtual-interface:
+ type: PARAVIRT
+ - id: spgwmme-sgi-int
+ virtual-network-interface-requirement:
+ - name: eth2
+ virtual-interface:
+ type: PARAVIRT
+ - id: spgwmme-s6a-int
+ int-virtual-link-desc: s6a # Connection to VLD!
+ virtual-network-interface-requirement:
+ - name: eth3
+ virtual-interface:
+ type: PARAVIRT
+ - id: hss
+ name: hss
+ description: hss
+ cloud-init-file: hss-init
+ virtual-compute-desc: hss-compute
+ virtual-storage-desc:
+ - hss-storage
+ sw-image-desc: nextepc-hss-bas
+ int-cpd:
+ - id: hss-mgmt-int
+ virtual-network-interface-requirement:
+ - name: eth0
+ virtual-interface:
+ type: PARAVIRT
+ - id: hss-s6a-int
+ int-virtual-link-desc: s6a # Connection to VLD!
+ virtual-network-interface-requirement:
+ - name: eth1
+ virtual-interface:
+ type: PARAVIRT
+ df:
+ - id: vepc_default
+ vnf-configuration-id: vnf-configuration-example
+ vdu-profile:
+ - id: spgwmme
+ min-number-of-instances: 1
+ - id: hss
+ min-number-of-instances: 1
+ vdu-configuration-id: vdu-configuration-example
+ instantiation-level:
+ - id: default
+ vdu-level:
+ - vdu-id: spgwmme
+ number-of-instances: 1
+ - vdu-id: hss
+ number-of-instances: 1
+ virtual-link-profile:
+ - id: s6a
+ flavour:
+ virtual-link-protocol-data:
+ l3-protocol-data:
+ name: s6a
+ description: s6a network
+ ip-version: ipv4
+ cidr: 10.0.6.0/24
+ dhcp-enabled: true
+ monitoring-parameter:
+ - id: "spgw_cpu_util"
+ name: "spgw_cpu_util"
+ performance-metric: "cpu_load"
+ collection-period: 123456
+ #aggregation-type: AVERAGE # Not included in augments
+ #vdu-monitoring-param: # Not included in augments
+ # vdu-ref: "spgwmme" # Not included in augments
+ # vdu-monitoring-param-ref: "spgw_cpu_util" # Not included in augments
+ - id: "spgw_memory_util"
+ name: "spgw_memory_util"
+ #aggregation-type: AVERAGE # Not included in augments
+ #vdu-monitoring-param: # Not included in augments
+ # vdu-ref: "spgwmme" # Not included in augments
+ # vdu-monitoring-param-ref: "spgw_memory_util" # Not included in augments
+ vdu-configuration:
+ - id: vdu-configuration-example
+ initial-config-primitive:
+ - seq: "1"
+ name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: <password>
+ - seq: "2"
+ name: configure-hss
+ parameter:
+ - name: spgw-ip
+ data-type: STRING
+ value: <spgw_ip>
+ - name: hss-ip
+ data-type: STRING
+ value: <hss_ip>
+ - seq: "3"
+ name: restart-hss
+ juju:
+ charm: hsscharm
+ vnf-configuration:
+ - id: vnf-configuration-example
+ initial-config-primitive:
+ - seq: "1"
+ name: config
+ parameter:
+ - name: ssh-hostname
+ value: <rw_mgmt_ip>
+ - name: ssh-username
+ value: ubuntu
+ - name: ssh-password
+ value: <password>
+ - seq: "2"
+ name: configure-spgw
+ parameter:
+ - name: spgw-ip
+ data-type: STRING
+ value: <spgw_ip>
+ - name: hss-ip
+ data-type: STRING
+ value: <hss_ip>
+ - seq: "3"
+ name: restart-spgw
+ config-primitive:
+ - name: add-route
+ parameter:
+ - name: external-prefix
+ data-type: STRING
+ default-value: "8.8.8.8/32"
+ - name: next-hop
+ data-type: STRING
+ default-value: "192.168.2.1"
+ juju:
+ charm: spgwcharm
+ int-virtual-link-desc:
+ - id: s6a
+ ext-cpd:
+ # SPGWMME
+ - id: spgwmme-mgmt-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: spgwmme
+ cpd: spgwmme-mgmt-int
+ - id: spgwmme-s1-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: spgwmme
+ cpd: spgwmme-mgmt-int
+ - id: spgwmme-sgi-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: spgwmme
+ cpd: spgwmme-mgmt-int
+ # HSS
+ - id: hss-mgmt-ext
+ int-cpd: # Connection to int-cpd
+ vdu-id: spgwmme
+ cpd: spgwmme-mgmt-int
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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.
+
+# Using old OSM IM model
+
+vnfd:vnfd-catalog:
+ vnfd:
+ id: vnfd
+
+ mgmt-interface:
+ cp: vnf-mgmt
+
+ connection-point:
+ - id: vnf-mgmt
+ name: vnf-mgmt
+ short-name: vnf-mgmt
+ type: VPORT
+ - id: vnf-data
+ name: vnf-data
+ short-name: vnf-data
+ type: VPORT
+
+ internal-vld:
+ - id: internal
+ name: internal
+ short-name: internal
+ type: ELAN
+ internal-connection-point:
+ - id-ref: mgmtVM-internal
+ - id-ref: dataVM-internal
+
+ vdu:
+ - id: mgmtVM
+
+ interface:
+ - name: mgmtVM-eth0
+ position: "1"
+ type: EXTERNAL
+ virtual-interface:
+ type: VIRTIO
+ external-connection-point-ref: vnf-mgmt
+ - name: mgmtVM-eth1
+ position: "2"
+ type: INTERNAL
+ virtual-interface:
+ type: VIRTIO
+ internal-connection-point-ref: mgmtVM-internal
+
+ internal-connection-point:
+ - id: mgmtVM-internal
+ name: mgmtVM-internal
+ short-name: mgmtVM-internal
+ type: VPORT
+
+ - id: dataVM
+
+ interface:
+ - name: dataVM-eth0
+ position: "1"
+ type: INTERNAL
+ virtual-interface:
+ type: VIRTIO
+ internal-connection-point-ref: dataVM-internal
+ - name: dataVM-xe0
+ position: "2"
+ type: EXTERNAL
+ virtual-interface:
+ type: VIRTIO
+ external-connection-point-ref: vnf-data
+
+ internal-connection-point:
+ - id: dataVM-internal
+ name: dataVM-internal
+ short-name: dataVM-internal
+ type: VPORT
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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.
+
+# Using new SOL006-based OSM model
+
+vnfd:
+ id: vnfd
+ mgmt-cp: vnf-mgmt-ext
+
+ ext-cpd:
+ - id: vnf-mgmt-ext
+ int-cpd:
+ vdu-id: mgmtVM
+ cpd: vnf-mgmt-int
+ - id: vnf-data-ext
+ int-cpd:
+ vdu-id: dataVM
+ cpd: vnf-data-int
+
+ int-virtual-link-desc:
+ - id: internal
+
+ vdu:
+ - id: mgmtVM
+ int-cpd:
+ - id: vnf-mgmt-int
+ virtual-network-interface-requirement:
+ - name: mgmtVM-eth0
+ position: "1"
+ virtual-interface:
+ type: VIRTIO
+ - id: mgmtVM-internal
+ int-virtual-link-desc: internal
+ virtual-network-interface-requirement:
+ - name: mgmtVM-eth1
+ position: "2"
+ virtual-interface:
+ type: VIRTIO
+
+ - id: dataVM
+ int-cpd:
+ - id: dataVM-internal
+ int-virtual-link-desc: internal
+ virtual-network-interface-requirement:
+ - name: dataVM-eth0
+ position: "1"
+ virtual-interface:
+ type: VIRTIO
+ - id: vnf-data-int
+ virtual-network-interface-requirement:
+ - name: dataVM-xe0
+ position: "2"
+ virtual-interface:
+ type: VIRTIO
--- /dev/null
+# Copyright 2020 Whitestack LLC
+#
+# 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.
+#
+
+from osm_im.validation import Validation
+import unittest
+
+TESTS_EXAMPLES_FOLDER = 'tests/examples/'
+
+VNFD_FILES = [
+ 'alternative_image_sol006.yaml',
+ 'cirros_vnfd_sol006.yaml',
+ 'epa_sol006.yaml',
+ 'etsi_complex_vnfd_sol006.yaml',
+ 'hackfest_charmed_vnfd_sol006.yaml',
+ 'magma_knf_sol006.yaml',
+ 'vepc_sol006.yaml',
+ 'vnfd_sol006.yaml'
+]
+
+NSD_FILES = [
+ 'cirros_nsd_sol006.yaml',
+ 'etsi_nsd_sol006.yaml',
+ 'hackfest_charmed_nsd_sol006.yaml',
+ 'vepc_nsd_sol006.yaml'
+]
+
+class ValidationTest(unittest.TestCase):
+
+ def test_descriptor_validation_of_etsi_nfv_vnfd(self):
+ for file in VNFD_FILES:
+ file_path = TESTS_EXAMPLES_FOLDER + file
+ with open(file_path, 'r') as vnfd_file:
+ vnfd_file_content = vnfd_file.read()
+ Validation().descriptor_validation(vnfd_file_content)
+
+ def test_descriptor_validation_of_etsi_nfv_nsd(self):
+ for file in NSD_FILES:
+ file_path = TESTS_EXAMPLES_FOLDER + file
+ with open(file_path, 'r') as nsd_file:
+ nsd_file_content = nsd_file.read()
+ Validation().descriptor_validation(nsd_file_content)
-# Copyright 2019 ETSI OSM
+# 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
#
-# All Rights Reserved.
-#
-# 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.
+# 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.
+
[tox]
envlist = py3
toxworkdir={homedir}/.tox