1 .. Licensed under a Creative Commons Attribution 4.0 International License.
 
   2 .. http://creativecommons.org/licenses/by/4.0
 
   3 .. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
 
   5 .. _Nova Server - Metadata Parameters:
 
   7 Resource: OS::Nova::Server - Metadata Parameters
 
   8 --------------------------------------------------------------------------------
 
  10 The ``OS::Nova::Server`` resource property ``metadata`` is an optional OpenStack
 
  12 Table 2 summarizes the mandatory and optional ``metadata`` supported by ONAP.
 
  13 The sections that follow provides the requirements associated with each
 
  14 ``metadata`` parameter.
 
  17 .. csv-table:: **Table 2 OS::Nova::Server Mandatory and Optional Metadata**
 
  18    :header: Resource, Property, Parameter Name, Parameter Type, Required, Parameter Value Provided to Heat
 
  22    OS::Nova::Server, metadata, vnf_id, string, **MUST**, ONAP
 
  23    OS::Nova::Server, metadata, vf_module_id, string, **MUST**, ONAP
 
  24    OS::Nova::Server, metadata, vnf_name, string, **MUST**, ONAP
 
  25    OS::Nova::Server, metadata, vf_module_name, string, **SHOULD**, ONAP
 
  26    OS::Nova::Server, metadata, vm_role, string, **MAY**, YAML or Environment File
 
  27    OS::Nova::Server, metadata, vf_module_index, number, **MAY**, ONAP
 
  28    OS::Nova::Server, metadata, workload_context, string, **MUST**, ONAP
 
  29    OS::Nova::Server, metadata, environment_context, string, **MUST**, ONAP
 
  34 The ``OS::Nova::Server`` resource property ``metadata`` key/value pair
 
  35 ``vnf_id`` is an ONAP generated UUID that identifies the VNF.  The value
 
  36 is provided by ONAP to the VNF's Heat Orchestration
 
  37 Template at orchestration time.
 
  43     :validation_mode: static
 
  46     A VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
  47     resource property ``metadata`` **MUST**
 
  48     contain the  key/value pair ``vnf_id``
 
  49     and the value **MUST** be obtained via a ``get_param``.
 
  55     :validation_mode: static
 
  58     A VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
  60     ``metadata`` key/value pair ``vnf_id`` parameter
 
  61     **MUST** be declared as ``vnf_id`` and the parameter **MUST**
 
  62     be defined as type: ``string``.
 
  68     :validation_mode: static
 
  71     A VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
  73     ``metadata`` key/value pair ``vnf_id`` parameter ``vnf_id`` **MUST NOT**
 
  74     have parameter constraints defined.
 
  80     :validation_mode: static
 
  83     A VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
  85     ``metadata`` key/value pair ``vnf_id`` parameter ``vnf_id`` **MUST NOT**
 
  86     be enumerated in the Heat Orchestration Template's environment file.
 
  92     :validation_mode: static
 
  95     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
  97     ``metadata`` key/value pair ``vnf_id`` is passed into a Nested YAML
 
  98     file, the key/value pair name ``vnf_id`` **MUST NOT** change.
 
 100 *Example 'vnf_id' Parameter Definition*
 
 108       description: Unique ID for this VNF instance
 
 113 The OS::Nova::Server Resource ``metadata`` map value parameter ``vf_module_id``
 
 114 is an ONAP generated UUID that identifies the VF Module (e.g., Heat
 
 115 Orchestration Template).  The value
 
 116 is provided by ONAP to the VNF's Heat Orchestration
 
 117 Template at orchestration time.
 
 123     :validation_mode: static
 
 126     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource 
 
 127     property ``metadata`` **MUST**
 
 128     contain the key/value pair ``vf_module_id``
 
 129     and the value MUST be obtained via a ``get_param``.
 
 135     :validation_mode: static
 
 138     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource property
 
 139     ``metadata`` key/value pair ``vf_module_id`` parameter **MUST**
 
 140     be declared as ``vf_module_id`` and the parameter **MUST**
 
 141     be defined as type: ``string``.
 
 147     :validation_mode: static
 
 150     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource property
 
 151     ``metadata`` key/value pair ``vf_module_id`` parameter ``vf_module_id``
 
 153     have parameter constraints defined.
 
 159     :validation_mode: static
 
 162     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource property
 
 163     ``metadata`` key/value pair ``vf_module_id`` parameter ``vf_module_id``
 
 165     be enumerated in the Heat Orchestration Template's environment file.
 
 172     :validation_mode: static
 
 175     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 177     ``metadata`` key/value pair ``vf_module_id`` is passed into a
 
 179     file, the key/value pair name ``vf_module_id`` **MUST NOT** change.
 
 182 *Example 'vf_module_id' Parameter Definition*
 
 190       description: Unique ID for this VNF module instance
 
 196 The ``OS::Nova::Server`` Resource ``metadata`` map value parameter ``vnf_name``
 
 197 is the ONAP (SDN-C) generated alphanumeric name of the deployed VNF instance.
 
 199 is provided by ONAP to the VNF's Heat Orchestration
 
 200 Template at orchestration time.
 
 206     :validation_mode: static
 
 209     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource property
 
 210     ``metadata`` **MUST** contain the key/value pair ``vnf_name`` and the
 
 211     value **MUST** be obtained via a ``get_param``.
 
 217     :validation_mode: static
 
 220     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 221     property ``metadata`` key/value pair ``vnf_name`` parameter **MUST**
 
 222     be declared as ``vnf_name`` and the parameter **MUST** be defined as
 
 229     :validation_mode: static
 
 232     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 233     property ``metadata`` key/value pair ``vnf_name`` 
 
 234     parameter ``vnf_name`` **MUST NOT**
 
 235     have parameter constraints defined.
 
 241     :validation_mode: static
 
 244     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 245     property ``metadata`` key/value pair ``vnf_name`` parameter
 
 246     ``vnf_name`` **MUST NOT**
 
 247     be enumerated in the Heat Orchestration Template's environment file.
 
 253     :validation_mode: static
 
 257     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 259     ``metadata`` key/value pair ``vnf_name`` is passed into a Nested YAML
 
 260     file, the key/value pair name ``vnf_name`` **MUST NOT** change.
 
 262 *Example 'vnf_name' Parameter Definition*
 
 270       description: Unique name for this VNF instance
 
 275 The ``OS::Nova::Server`` Resource ``metadata`` map value parameter 
 
 277 is the deployment name of the heat stack created (e.g., ``<STACK_NAME>``)
 
 279 VNF's Heat Orchestration template
 
 280 in the command ``Heat stack-create``
 
 281 (e.g., ``Heat stack-create [-f <FILE>] [-e <FILE>] <STACK_NAME>``).
 
 282 The ``vf_module_name`` (e.g., ``<STACK_NAME>`` is specified as
 
 283 part of the orchestration process.
 
 291     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource 
 
 292     property ``metadata`` **SHOULD**
 
 293     contain the key/value pair ``vf_module_name`` and the value **MUST**
 
 294     be obtained via a ``get_param``.
 
 300     :validation_mode: static
 
 303     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 305     ``metadata`` key/value pair ``vf_module_name`` parameter **MUST** be
 
 306     declared as ``vf_module_name`` and the parameter **MUST**
 
 307     be defined as type: ``string``.
 
 313     :validation_mode: static
 
 316     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 318     ``metadata`` key/value pair ``vf_module_name`` parameter ``vf_module_name``
 
 319     **MUST NOT** have parameter constraints defined.
 
 325     :validation_mode: static
 
 329     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 330     property ``metadata`` key/value pair ``vf_module_name`` 
 
 331     parameter ``vf_module_name`` **MUST NOT**
 
 332     be enumerated in the Heat Orchestration Template's environment file.
 
 338     :validation_mode: static
 
 341     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 342     property ``metadata`` key/value pair ``vf_module_name`` is passed into a
 
 344     file, the key/value pair name ``vf_module_name`` **MUST NOT** change.
 
 346 *Example 'vf_module_name' Parameter Definition*
 
 354       description: Unique name for this VNF Module instance
 
 359 The ``OS::Nova::Server`` Resource ``metadata`` map value parameter ``vm-role``
 
 360 is a ``metadata`` tag that describes the role of the Virtual Machine.
 
 361 The ``vm_role`` is stored in ONAP’s A&AI module and is
 
 362 available for use by other ONAP components and/or north bound systems.
 
 370     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource property
 
 372     contain the key/value pair ``vm_role`` and the value **MUST** be 
 
 376     - hard coded in the key/value pair ``vm_role``.
 
 382     :validation_mode: static
 
 385     If a VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
 387     ``metadata`` key/value pair ``vm_role`` value is obtained via 
 
 388     ``get_param``, the parameter **MUST** be declared as ``vm_role`` 
 
 389     and the parameter **MUST** be defined as type: ``string``.
 
 395     :validation_mode: static
 
 398     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 399     property ``metadata`` key/value pair ``vm_role`` parameter ``vm_role``
 
 400     **MUST NOT** have parameter constraints defined.
 
 406     :validation_mode: static
 
 409     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` Resource
 
 410     ``metadata`` map value parameter ``vm_role`` **MUST**
 
 413      * enumerated in the VNF's Heat Orchestration Template's environment
 
 416      * hard coded in the VNF's
 
 417        Heat Orchestration Template's ``OS::Nova::Server`` Resource
 
 418        ``metadata`` property.
 
 421 Defining the ``vm_role`` as the ``{vm-type}`` is a recommended convention
 
 428     :validation_mode: static
 
 431     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 432     property ``metadata`` key/value pair ``vm_role`` value **MUST**
 
 433     only contain alphanumeric characters and underscores (i.e., '_').
 
 440     :validation_mode: static
 
 443     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 444     property ``metadata`` key/value pair ``vm_role`` is passed into a Nested
 
 446     file, the key/value pair name ``vm_role`` **MUST NOT** change.
 
 449 *Example 'vm_role' Parameter Definition*
 
 457       description: Unique role for this VM
 
 459 *Example: 'vm-role' Definition: Hard Coded in
 
 460 OS::Nova::Resource metadata property*
 
 467       type: OS::Nova::Server
 
 473 *Example 'vm-role' Definition: Defined in Environment file
 
 474 and retrieved via 'get_param'*
 
 481       type: OS::Nova::Server
 
 485           vm_role: { get_param: vm_role }
 
 487 Example vnf_id, vf_module_id, vnf_name, vf_module_name, vm_role
 
 488 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 490 The example below depicts part of a Heat Orchestration Template that
 
 491 uses the five of the ``OS::Nova::Server`` resource
 
 492 ``metadata`` map value parameters discussed in this
 
 493 section. The ``{vm-type}`` has been defined as ``lb`` for load balancer.
 
 500       description: VM Name for lb VM 0
 
 503       description: Unique name for this VNF instance
 
 506       description: Unique ID for this VNF instance
 
 509       description: Unique name for this VNF Module instance
 
 512       description: Unique ID for this VNF Module instance
 
 515       description: Unique role for this VM
 
 518       type: OS::Nova::Server
 
 520         name: { get_param: lb_name_0 }
 
 523           vnf_name: { get_param: vnf_name }
 
 524           vnf_id: { get_param: vnf_id }
 
 525           vf_module_name: { get_param: vf_module_name }
 
 526           vf_module_id: { get_param: vf_module_id }
 
 539     A VNF's Heat Orchestration Template's ``OS::Nova::Server``
 
 540     resource  property ``metadata`` **MAY**
 
 541     contain the key/value pair ``vf_module_index``
 
 542     and the value **MUST** be obtained via a ``get_param``.
 
 548     :validation_mode: static
 
 551     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 553     ``metadata`` key/value pair ``vf_module_index`` parameter **MUST**
 
 554     be declared as ``vf_module_index`` and the parameter **MUST** be
 
 555     defined as type: ``number``.
 
 562     :validation_mode: static
 
 566     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 567     property ``metadata`` key/value pair ``vf_module_index`` **MUST NOT**
 
 568     have parameter constraints defined.
 
 574     :validation_mode: static
 
 577     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 579     ``metadata`` key/value pair ``vf_module_index`` parameter
 
 580     ``vf_module_index`` **MUST NOT**
 
 581     be enumerated in the Heat Orchestration Template's environment file.
 
 587     :validation_mode: static
 
 590     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 591     property ``metadata`` key/value pair ``vf_module_index`` is passed into a
 
 592     Nested YAML file, the key/value pair
 
 593     ``vf_module_index`` **MUST NOT** change.
 
 599     :validation_mode: static
 
 602     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 603     property ``metadata`` key/value pair ``vf_module_index`` **MUST NOT**
 
 604     be used in a ``OS::Cinder::Volume`` resource and **MUST NOT** be
 
 605     used in VNF's Volume template;
 
 608 The ``vf_module_index`` parameter indicates which instance of the module is
 
 609 being deployed into the VNF.
 
 610 This parameter may be used in cases where multiple instances of the same
 
 611 incremental module may be instantiated for scaling purposes. The index
 
 612 can be used in the Heat Orchestration Template for indexing into a
 
 613 pseudo-constant array parameter when unique values are required for each
 
 614 module instance, e.g., for fixed private IP addresses on VM types.
 
 616 The ``vf_module_index`` will start at 0 for the first instance of a module
 
 617 type. Subsequent instances of the same module type will receive the
 
 618 lowest unused index. This means that indexes will be reused if a module
 
 619 is deleted and re-added. As an example, if three copies of a module are
 
 620 deployed with ``vf_module_index`` values of 0, 1, and 2 then subsequently
 
 621 the second one is deleted (index 1), and then re-added, index 1 will be
 
 626 In this example, the ``{vm-type}`` has been defined as ``oam_vm`` to represent
 
 627 an OAM VM. An incremental heat module is used to deploy the OAM VM. The
 
 628 OAM VM attaches to an internal control network which has a
 
 629 ``{network-role}`` of ``ctrl``. A maximum of four OAM VMs can be deployed. The
 
 630 environment file contains the four IP addresses that each successive OAM
 
 631 VM will be assigned. The ``vf_module_index`` is used as the index to
 
 632 determine the IP assignment.
 
 639     oam_vm_int_ctrl_ips: 10.10.10.1,10.10.10.2,10.10.10.3,10.10.10.4
 
 648       description: Unique index for this VNF Module instance
 
 651       description: VM Name for lb VM 0
 
 654       description: Neutron UUID for the internal control network
 
 656       type: comma_delimited_list
 
 657       description: Fixed IP assignments for oam VMs on the internal control
 
 661       type: OS::Nova::Server
 
 663         name: { get_param: oam_vm_name_0 }
 
 665           - port: { get_resource: oam_vm_0_int_ctrl_port_0 }
 
 668           vf_module_index: { get_param: vf_module_index }
 
 669     oam_vm_0_int_ctrl_port_0:
 
 670       type: OS::Neutron::Port
 
 672         network: { get_param: int_ctrl_net_id }
 
 673         fixed_ips: [ { "ip_address": {get_param: [ oam_vm_int_ctrl_ips, { get_param: vf_module_index} ]}}]
 
 676 ^^^^^^^^^^^^^^^^^^^^^
 
 684     A VNF's Heat Orchestration Template's OS::Nova::Server
 
 685     Resource **SHOULD** contain the metadata map value parameter
 
 692     :validation_mode: static
 
 695     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 696     property ``metadata`` key/value pair ``workload_context`` 
 
 698     be declared as ``workload_context`` and the parameter **MUST**
 
 699     be defined as type: ``string``.
 
 705     :validation_mode: static
 
 708     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 709     property ``metadata`` key/value pair ``workload_context`` 
 
 710     parameter ``workload_context`` **MUST NOT**
 
 711     have parameter constraints defined.
 
 717     :validation_mode: static
 
 721     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 722     property ``metadata`` key/value pair ``workload_context`` 
 
 723     parameter ``workload_context`` **MUST NOT**
 
 724     be enumerated in the Heat Orchestration Template's environment file.
 
 730     :validation_mode: static
 
 733     If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 734     property ``metadata`` key/value pair ``workload_context`` 
 
 735     is passed into a Nested YAML
 
 736     file, the key/value pair name ``workload_context`` **MUST NOT** change.
 
 739 The 'workload\_context' parameter value will be chosen by the Service Model
 
 740 Distribution context client in VID and will be supplied to the
 
 741 Heat Orchestration Template by ONAP at orchestration time.
 
 743 *Example Parameter Definition*
 
 750       description: Workload Context for this VNF instance
 
 753 *Example OS::Nova::Server with metadata*
 
 760     {vm-type}_server_{index}:
 
 761        type: OS::Nova::Server
 
 768           vnf_name: { get_param: vnf_name }
 
 769           vnf_id: { get_param: vnf_id }
 
 770           vf_module_name: { get_param: vf_module_name }
 
 771           vf_module_id: { get_param: vf_module_id }
 
 772           workload_context: {get_param: workload_context}
 
 775 ^^^^^^^^^^^^^^^^^^^^^
 
 783     A VNF's Heat Orchestration Template's OS::Nova::Server
 
 784     Resource **SHOULD** contain the metadata map value parameter
 
 785     'environment_context'.
 
 791     :validation_mode: static
 
 794     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 795     property ``metadata`` key/value pair ``environment_context`` 
 
 796     parameter **MUST** be declared as ``environment_context`` and the
 
 797     parameter type **MUST** be defined as type: ``string``.
 
 803     :validation_mode: static
 
 806     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 807     property ``metadata``key/value pair ``environment_context``
 
 808     parameter ``environment_context`` **MUST NOT**
 
 809     have parameter constraints defined.
 
 815     :validation_mode: static
 
 818     A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
 
 820     ``metadata`` key/value pair ``environment_context`` **MUST NOT**
 
 821     be enumerated in the Heat Orchestration Template's environment file.
 
 827     :validation_mode: static
 
 830     If a VNF's Heat Orchestration Template's ``OS::Nova::Server Resource``
 
 831     ``metadata`` map value parameter ``environment_context`` is passed into a
 
 833     file, the parameter name ``environment_context`` **MUST NOT** change.
 
 835 The 'environment_context' parameter value will be defined by the
 
 836 service designer as part of the service model during the SDC
 
 837 on-boarding process and will be supplied to the Heat Orchestration
 
 838 Template by ONAP at orchestration time.
 
 841 *Example Parameter Definition*
 
 848       description: Environment Context for this VNF instance
 
 851 *Example OS::Nova::Server with metadata*
 
 858     {vm-type}_server_{index}:
 
 859        type: OS::Nova::Server
 
 866           vnf_name: { get_param: vnf_name }
 
 867           vnf_id: { get_param: vnf_id }
 
 868           vf_module_name: { get_param: vf_module_name }
 
 869           vf_module_id: { get_param: vf_module_id }
 
 870           workload_context: {get_param: workload_context}
 
 871           environment_context: {get_param: environment_context }