/*
- *
- * Copyright 2016 RIFT.IO Inc
+ *
+ * Copyright 2016-2017 RIFT.IO Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
prefix "inet";
}
- import rw-pb-ext {
- prefix "rwpb";
+ import rw-project {
+ prefix "rw-project";
+ }
+
+ revision 2017-02-08 {
+ description
+ "Update model to support projects.";
}
revision 2015-04-23 {
"Derived from earlier versions of base YANG files";
}
+ typedef meta-data-type {
+ type enumeration {
+ enum STRING;
+ }
+ }
+
+ typedef package-type {
+ description "Type of descriptor being on-boarded";
+ type enumeration {
+ enum NSD;
+ enum VNFD;
+ }
+ }
+
typedef parameter-data-type {
type enumeration {
enum STRING;
}
leaf parameter-pool {
- description "NSD Parameter pool name to use for this paramter";
+ description "NSD parameter pool name to use for this parameter";
type string;
}
leaf read-only {
description
- "The value should be greyed out by the UI.
+ "The value should be dimmed by the UI.
Only applies to parameters with default values.";
type boolean;
+ default false;
}
leaf hidden {
"The value should be hidden by the UI.
Only applies to parameters with default values.";
type boolean;
+ default false;
}
}
-
- grouping image-properties {
+ grouping ui-primitive-group {
+ list parameter-group {
+ description
+ "Grouping of parameters which are logically grouped in UI";
+ key "name";
+
+ leaf name {
+ description
+ "Name of the parameter group";
+ type string;
+ }
+
+ list parameter {
+ description
+ "List of parameters for the service primitive.";
+ key "name";
+ uses manotypes:primitive-parameter;
+ }
+
+ leaf mandatory {
+ description "Is this parameter group mandatory";
+ type boolean;
+ default true;
+ }
+ }
+ }
+
+ grouping event-config {
+ leaf seq {
+ description
+ "Sequence number for the configuration primitive.";
+ type uint64;
+ }
+
+ leaf name {
+ description
+ "Name of the configuration primitive.";
+ type string;
+ mandatory "true";
+ }
+
+ leaf user-defined-script {
+ description
+ "A user defined script.";
+ type string;
+ }
+
+ list parameter {
+ key "name";
+ leaf name {
+ type string;
+ }
+
+ leaf value {
+ description "Value of the configuration primitive.";
+ type string;
+ }
+ }
+ }
+
+ grouping image-properties {
leaf image {
description
"Image name for the software image.
- If the image name is found within the VNF packaage it will
- be uploaded to all cloud accounts during onboarding process.
- Otherwise, the image must be added to the cloud account with
+ If the image name is found within the VNF package it will
+ be uploaded to all VIM accounts during onboarding process.
+ Otherwise, the image must be added to the VIM account with
the same name as entered here.
";
type string;
identifies an image uploaded to the CAL.
";
type string;
- }
+ }
}
- grouping vnf-configuration {
- container vnf-configuration {
- rwpb:msg-new VnfConfiguration;
- description
- "Information regarding the VNF configuration
- is captured here. Note that if the NS contains
- multiple instances of the same VNF, each instance
- of the VNF may have different configuration";
-
- choice config-method {
- description
- "Defines the configuration method for the VNF.";
- case netconf {
- description
- "Use NETCONF for configuring the VNF.";
- container netconf {
- leaf target {
- description
- "Netconf configuration target";
- type enumeration {
- enum running;
- enum candidate;
- }
- }
- leaf protocol {
- description
- "Protocol to use for netconf (e.g. ssh)";
- type enumeration {
- enum None;
- enum ssh;
- }
- }
+ grouping vca-relationships {
+ container vca-relationships {
+ list relation {
+ description "List of relations between VCA componets.";
- leaf port {
- description
- "Port for the netconf server.";
- type inet:port-number;
- }
- }
- }
+ key "requires provides";
- case rest {
+ leaf requires {
description
- "Use REST for configuring the VNF.";
- container rest {
- leaf port {
- description
- "Port for the REST server.";
- type inet:port-number;
- }
- }
+ "Name of the required relation.";
+ type string;
}
- case script {
+ leaf provides {
description
- "Use custom script for configuring the VNF.
- This script is executed in the context of
- Orchestrator.";
- container script {
- leaf script-type {
- description
- "Script type - currently supported : bash, expect";
- type enumeration {
- enum bash;
- enum expect;
- }
- }
- }
+ "Name of the provided relation.";
+ type string;
}
+ }
+ }
+ }
- case juju {
- description
- "Configure the VNF through Juju.";
- container juju {
- leaf charm {
- description "Juju charm to use with the VNF.";
- type string;
+ grouping vca-configuration {
+ description
+ "Information about the VNF or VDU configuration. Note:
+ If the NS contains multiple instances of the
+ same VNF or VDU, each instance could have a different
+ configuration.";
+
+ 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;
}
}
}
}
- container config-access {
- leaf mgmt-ip-address {
- description
- "IP address to be used to configure this VNF,
- optional if it is possible to resolve dynamically.";
- type inet:ip-address;
- }
-
- leaf username {
- description
- "username for configuration.";
- type string;
- }
-
- leaf password {
- description
- "Password for configuration access authentication.";
- type string;
+ 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;
+ }
+ uses manotypes:vca-relationships;
}
}
+ }
- container config-attributes {
- description
- "Miscelaneous input parameters to be considered
- while processing the NSD to apply configuration";
-
- leaf config-priority {
- description
- "Configuration priority - order of confgiration
- to be applied to each VNF in this NS,
- low number gets precedence over high number";
- type uint64;
- }
+ list config-primitive {
+ description
+ "List of config primitives supported by the
+ configuration agent for this VNF or VDU.";
+ key "name";
- leaf config-delay {
- description
- "Wait (seconds) before applying the configuration to VNF";
- type uint64;
- }
+ leaf name {
+ description
+ "Name of the config primitive.";
+ type string;
}
- list service-primitive {
- rwpb:msg-new ServicePrimitive;
+ list parameter {
description
- "List of service primitives supported by the
- configuration agent for this VNF.";
+ "List of parameters to the config primitive.";
key "name";
-
- leaf name {
- description
- "Name of the service primitive.";
- type string;
- }
-
- list parameter {
- description
- "List of parameters to the service primitive.";
- key "name";
- uses primitive-parameter;
- }
+ uses primitive-parameter;
}
- list initial-config-primitive {
- rwpb:msg-new InitialConfigPrimitive;
+ leaf user-defined-script {
description
- "Initial set of configuration primitives.";
- key "seq";
- leaf seq {
- description
- "Sequence number for the configuration primitive.";
- type uint64;
- }
+ "A user defined script. If user defined script is defined,
+ the script will be executed using bash";
+ type string;
+ }
+ }
- leaf name {
- description
- "Name of the configuration primitive.";
- 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;
+ }
- list parameter {
- key "name";
+ choice primitive-type {
+ case primitive-definition {
leaf name {
+ description
+ "Name of the configuration primitive.";
type string;
}
- leaf value {
+ uses primitive-parameter-value;
+
+ leaf user-defined-script {
+ description
+ "A user defined script.";
type string;
}
}
}
-
- leaf config-template {
- description
- "Configuration template for each VNF";
- type string;
- }
}
- } // END - grouping vnf-configuration
+ } // END - grouping vca-configuration
typedef virtual-link-type {
description
"Type of virtual link
ELAN: A multipoint service connecting a set of VNFs
- // ELINE: For a simple point to point connection
+ ELINE: For a simple point to point connection
// between a VNF and the existing network.
// ETREE: A multipoint service connecting one or
// more roots and a set of leaves, but
// preventing inter-leaf communication.";
type enumeration {
enum ELAN;
+ enum ELINE;
// enum ETREE;
- // enum ELINE;
}
}
typedef api-type {
description
- "Type of API to fetch monitoring params";
+ "Type of API to fetch monitoring parameters";
type enumeration {
enum HTTP;
"The method to extract a value from a JSON response
NAMEKEY - Use the name as the key for a non-nested value.
- JSONPATH - Use jsonpath-rw implemenation to extract a value.
- OBJECTPATH - Use objectpath implemenation to extract a value.";
+ JSONPATH - Use jsonpath-rw implementation to extract a value.
+ OBJECTPATH - Use objectpath implementation to extract a value.";
type enumeration {
enum NAMEKEY;
enum JSONPATH;
VPORT: Virtual Port
// VNIC_ADDR: Virtual NIC Address
// PNIC_ADDR: Physical NIC Address
- // PPORT: Phsical Port.";
+ // PPORT: Physical Port.";
type enumeration {
enum VPORT;
description
"Type of the widget, typically used by the UI.";
type enumeration {
- enum HISTOGRAM;
- enum BAR;
- enum GAUGE;
- enum SLIDER;
enum COUNTER;
+ enum GAUGE;
enum TEXTBOX;
+ enum SLIDER;
+ enum HISTOGRAM;
+ enum BAR;
}
}
container vm-flavor {
leaf vcpu-count {
description
- "Number of vcpus for the VM.";
+ "Number of VCPUs for the VM.";
type uint16;
}
}
} //grouping vm-flavor
+ grouping vm-flavor-name {
+ leaf vm-flavor-name {
+ description "flavor name to be used while creating vm using cloud account";
+ type string;
+ }
+ }
+
grouping vswitch-epa {
container vswitch-epa {
leaf ovs-acceleration {
description "Number of threads per cores on the host.";
type uint64;
}
-
+
list cpu-feature {
key "feature";
description "List of CPU features.";
}
}
-
+
leaf om-cpu-model-string {
- description "Openmano CPU model string";
+ description "OpenMANO CPU model string";
type string;
}
list om-cpu-feature {
key "feature";
- description "List of openmano CPU features";
+ description "List of OpenMANO CPU features";
leaf feature {
description "CPU feature";
type string;
"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 chose PREFER_LARGE.
+ 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 perfers hugepages";
+ PREFER_LARGE : Application prefers hugepages";
type enumeration {
enum LARGE;
enum SMALL;
case numa-aware {
container numa-node-policy {
description
- "This policy defines numa topology of the
+ "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 may want 8 vcpus and 4 GB of
- memory. But may want the vcpus and memory
- distributed across multiple numa nodes.
- The NUMA node 1 may run with 6 vcpus and
- 3GB, and NUMA node 2 may run with 2 vcpus
- and 1GB.";
+ 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.";
+ "The number of NUMA nodes to expose to the VM.";
type uint16;
}
strictly from the memory attached
to the NUMA node.
PREFERRED : The memory should be allocated
- perferentially from the memory
+ preferentially from the memory
attached to the NUMA node";
type enumeration {
enum STRICT;
list vcpu {
key "id";
description
- "List of vcpus to allocate on
- this numa node.";
+ "List of VCPUs to allocate on
+ this NUMA node.";
leaf id {
type uint64;
- description "List of vcpus ids to allocate on
- this numa node";
+ description "List of VCPUs ids to allocate on
+ this NUMA node";
}
}
choice om-numa-type {
description
- "Openmano Numa type selection";
+ "OpenMANO Numa type selection";
case cores {
leaf num-cores {
list paired-thread-ids {
description
- "List of thread pairs to use in case of paired-thread numa";
+ "List of thread pairs to use in case of paired-thread NUMA";
max-elements 16;
key thread-a;
description "Container for the provider network.";
leaf physical-network {
description
- "Name of the phsyical network on which the provider
+ "Name of the physical network on which the provider
network is built.";
type string;
}
- leaf overlay-type {
- description
- "Type of the overlay network.";
- type enumeration {
- enum LOCAL;
- enum FLAT;
- enum VLAN;
- enum VXLAN;
- enum GRE;
- }
- }
leaf segmentation_id {
description
- "Segmentation ID";
+ "ID of segregated virtual networks";
type uint32;
}
}
leaf vnfd-id-ref {
description
- "A reference to a vnfd. This is a
+ "A reference to a vnfd. This is a
leafref to path:
../../../../nsd:constituent-vnfd
+ [nsd:id = current()/../nsd:id-ref]
NOTE: An issue with confd is preventing the
use of xpath. Seems to be an issue with leafref
to leafref, whose target is in a different module.
- Once that is resovled this will switched to use
+ Once that is resolved this will switched to use
leafref";
type string;
type string;
}
- leaf polling_interval_secs {
+ leaf polling-interval-secs {
description "The HTTP polling interval in seconds";
type uint8;
default 2;
leaf method {
description
- "This is the method to be performed at the uri.
- GET by default for action";
+ "Method that the URI should perform.
+ Deafult action is GET.";
type manotypes:http-method;
default "GET";
list monitoring-param {
description
- "List of monitoring parameters at the NS level";
+ "List of monitoring parameters at the network service level";
key id;
leaf id {
type string;
}
leaf group-tag {
- description "A simple tag to group monitoring parameters";
+ description "A tag to group monitoring parameters";
type string;
}
leaf widget-type {
+ description "Defines the UI Display variant of measured counters.";
type manotypes:widget-type;
+ default "COUNTER";
}
leaf units {
+ description "Measured Counter Units (e.g., Packets, Kbps, Mbps, etc.)";
type string;
}
}
}
leaf max-value {
description
- "Maxium value for the parameter";
+ "Maximum value for the parameter";
type uint64;
}
}
key id;
leaf id {
+ description "Identifier for control parameter";
type string;
}
leaf name {
+ description "Name of a control parameter";
type string;
}
leaf description {
+ description "A description of the control parameter";
type string;
}
leaf group-tag {
- description "A simple tag to group control parameters";
+ description "A tag to group control parameters";
type string;
}
leaf max-value {
description
- "Maxium value for the parameter";
+ "Maximum value for the parameter";
type uint64;
}
leaf url {
description
- "This is the URL where to perform the operation";
+ "This is the URL where the operation should be performed.";
type inet:uri;
}
leaf method {
description
- "This is the method to be performed at the uri.
- POST by default for action";
+ "Method that the URI should perform.
+ Default Action is POST";
type manotypes:http-method;
default "POST";
}
leaf group-tag {
- description "A simple tag to group monitoring parameter";
+ description "A tag to group monitoring parameter";
type string;
}
}
grouping input-parameter {
- description "";
+ description "List of input parameters that can be specified when instantiating a network service.";
list input-parameter {
description
leaf xpath {
description
- "A an xpath that specfies which element in a descriptor is to be
+ "An xpath that specfies which element in a descriptor is to be
modified.";
type string;
}
}
leaf default-value {
- description " A default value for this input parameter";
+ description "Default Value for the Input Parameter";
type string;
}
}
}
typedef alarm-severity-type {
- description "An indication of the importance or ugency of the alarm";
+ description "An indication of the importance or urgency of the alarm";
type enumeration {
enum LOW;
enum MODERATE;
typedef alarm-statistic-type {
description
- "The type of statistic to used to measure a metric to determine
- threshold crossing for an alarm.";
+ "Statistic type to use to determine threshold crossing
+ for an alarm.";
type enumeration {
enum AVERAGE;
enum MINIMUM;
typedef alarm-operation-type {
description
- "The relational operator used to define whether an alarm should be
- triggered when, say, the metric statistic goes above or below a
- specified value.";
+ "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 enumeration {
enum GE; // greater than or equal
enum LE; // less than or equal
grouping alarm {
leaf alarm-id {
description
- "This field is reserved for the identifier assigned by the cloud
- provider";
+ "This field is reserved for the identifier assigned by the VIM provider";
type string;
}
}
leaf description {
- description "A string containing a description of this alarm";
+ description "A description of this alarm";
type string;
}
}
leaf severity {
- description "A measure of the important or urgency of the alarm";
+ description "A measure of the importance or urgency of the alarm";
type alarm-severity-type;
}
leaf operation {
description
- "The relational operator that defines whether the alarm should be
- triggered when the metric statistic is, say, above or below the
- specified threshold value.";
+ "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 alarm-operation-type;
}
leaf evaluations {
description
- "This is the number of samples of the metric statistic used to
- evaluate threshold crossing. Each sample or evaluation is equal to
- the metric statistic obtained for a given period. This can be used
- to mitigate spikes in the metric that may skew the statistic of
- interest.";
+ "Defines the length of time (seconds) in which metric data are
+ collected in order to evaluate the chosen statistic.";
type uint32;
}
}
typedef cloud-account-type {
- description "cloud account type";
+ description "VIM account type";
type enumeration {
enum aws;
enum cloudsim;
enum openvim;
}
}
-
+
grouping host-aggregate {
list host-aggregate {
description "Name of the Host Aggregate";
key "metadata-key";
-
+
leaf metadata-key {
+ description
+ "Name of the additional information attached to the host-aggregate";
type string;
}
leaf metadata-value {
+ description
+ "Value of the corresponding metadata-key";
type string;
}
}
}
-
+
grouping placement-group-input {
leaf cloud-type {
type manotypes:cloud-account-type;
}
choice cloud-provider {
- case openstack {
+ case openstack {
container availability-zone {
description "Name of the Availability Zone";
leaf name {
case openmano {
leaf openmano-construct {
type empty;
- }
+ }
}
case vsphere {
leaf vsphere-construct {
}
}
}
-
+
+ grouping cloud-config {
+ list key-pair {
+ key "name";
+ description "Used to configure the list of public keys to be injected as part
+ of ns instantiation";
+
+ leaf name {
+ description "Name of this key pair";
+ type string;
+ }
+
+ leaf key {
+ description "Key associated with this key pair";
+ type string;
+ }
+ }
+
+ list user {
+ key "name";
+ description "List of users to be added through cloud-config";
+
+ leaf name {
+ description "Name of the user ";
+ type string;
+ }
+
+ leaf user-info {
+ description "The user name's real name";
+ type string;
+ }
+
+ list key-pair {
+ key "name";
+ description "Used to configure the list of public keys to be injected as part
+ of ns instantiation";
+
+ leaf name {
+ description "Name of this key pair";
+ type string;
+ }
+
+ leaf key {
+ description "Key associated with this key pair";
+ type string;
+ }
+ }
+ }
+ }
+
grouping placement-group-info {
description "";
behind this placement group. This is for human consumption only";
type string;
}
-
+
leaf strategy {
description
"Strategy associated with this placement group
grouping ip-profile-info {
description "Grouping for IP-Profile";
container ip-profile-params {
-
+
leaf ip-version {
type inet:ip-version;
default ipv4;
list dns-server {
key "address";
leaf address {
- description "List of DNS Servers associated with IP Profile";
- type inet:ip-address;
+ description "List of DNS Servers associated with IP Profile";
+ type inet:ip-address;
}
}
- container dhcp-params {
+ container dhcp-params {
leaf enabled {
description "This flag indicates if DHCP is enabled or not";
type boolean;
description
"List of IP Profiles.
IP Profile describes the IP characteristics for the Virtual-Link";
-
+
key "name";
leaf name {
description "Name of the IP-Profile";
type string;
}
-
+
leaf description {
description "Description for IP profile";
type string;
}
-
+
uses ip-profile-info;
}
}
+ grouping config-file {
+ description "Grouping for files needed to be mounted into an additional drive";
+ list config-file {
+ description
+ "List of configuration files to be written on an additional drive";
+ key "source";
+ leaf source {
+ description "Name of the configuration file";
+ type string;
+ }
+ leaf dest {
+ description "Full path of the destination in the guest";
+ type string;
+ }
+ }
+ }
+
+ grouping supplemental-boot-data {
+ description "Grouping for custom vim data";
+ container supplemental-boot-data {
+ uses manotypes:config-file;
+ leaf boot-data-drive {
+ description "Some VIMs implement additional drives to host config-files or meta-data";
+ type boolean;
+ default false;
+ }
+ }
+ }
+
grouping volume-info {
description "Grouping for Volume-info";
case image {
uses image-properties;
}
-
- case volume {
- leaf volume-ref {
- description "Reference for pre-existing volume in VIM";
- type string;
- }
- }
}
- container boot-params {
- leaf boot-volume {
- description "This flag indicates if this is boot volume or not";
- type boolean;
- }
- leaf boot-priority {
- description "Boot priority associated with volume";
- type int32;
+ 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;
}
}
- container guest-params {
- description "Guest virtualization parameter associated with volume";
-
- 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;
- }
- }
-
- leaf device_type {
- description "The type of device as exposed to guest";
- type enumeration {
+ leaf device-type {
+ description "The type of device as exposed to guest";
+ type enumeration {
enum disk;
enum cdrom;
enum floppy;
enum lun;
- }
+ }
+ }
+ }
+
+ grouping rpc-project-name {
+ leaf project-name {
+ default "default";
+ description
+ "Project to which this belongs";
+ type leafref {
+ path "/rw-project:project/rw-project:name";
}
}
}