Describe 'UI Network Selection' in the docs

This patch adds a description of a 'network' dynamic ui field into the
'Dynamic UI definition specification' section of murano docs. It also
reflects the recent increment of Murano Dynamic UI platform version to
2.1.

It also adds a new article to 'Use Cases' section. It is called
'Configuring Network Access for VMs' and describes how the application
developers may utilize the new feature in their application packages.

Targets blueprint ui-network-selection

Change-Id: Id8dad235084e022737c79dfe8612ba440be031e1
This commit is contained in:
Alexander Tivelkov 2015-07-22 21:13:05 +03:00
parent 3d4048dd50
commit baef6a19e0
2 changed files with 120 additions and 2 deletions

View File

@ -39,7 +39,7 @@ For example, Murano Dynamic UI platform of version 2.2 is able to process UI
definitions of versions 2.0, 2.1 and 2.2, but is unable to process 2.3, 3.0 or
1.9.
Currently the latest version of Dynamic UI platform is 2.0. It is incompatible
Currently the latest version of Dynamic UI platform is 2.1. It is incompatible
with UI definitions of Version 1, which were used in Murano releases before
Juno.
@ -69,7 +69,7 @@ used. Two yaql functions are used for object model generation:
* **generateHostname** is used for machine hostname generation; it accepts 2 arguments: name pattern (string) and index (integer). If '#' symbol is present in name pattern, it will be replaced with the index provided. If pattern is not given, a random name will be generated.
* **repeat** is used to produce a list of data snippets, given the template snippet (first argument) and number of times it should be reproduced (second argument). Inside that template snippet current step can be referenced as *$index*.
.. note:
.. note::
Note, that while evaluating YAQL expressions referenced from
**Application** section (as well as almost all attributes inside
**Forms** section, see later) *$* root object is set to the list of
@ -144,6 +144,8 @@ Currently supported options for **type** attribute are:
* flavor - specific field, used for selection instance flavor from a list
* keypair - specific field, used for selecting a keypair from a list
* azone - specific field, used for selecting instance availability zone from a list
* network - specific field, used to select a network and subnet from a list of
the ones available to the current user
* any other value is considered to be a fully qualified name for some Application package and is rendered as a pair of controls: one for selecting already existing Applications of that type in an Environment, second - for creating a new Application of that type and selecting it
Other arguments (and whether they are required or not) depends on a
@ -177,6 +179,41 @@ attributes are the following:
min_vcpus: 2
min_memory_mb: 2048
* **include_subnets** is used only with network field. `True` by default.
If `True`, the field list includes all the possible combinations of network
and subnet. E.g. if there are two available networks X and Y, and X has two
subnets A and B, while Y has a single subnet C, then the list will include 3
items: (X, A), (X, B), (Y, C). If set to `False` only network names will be
listed, without their subnets.
* **filter** is used only with network field. `None` by default. If set to a
regexp string, will be used to display only the networks with names matching
the given regexp.
* **murano_networks** is used only with network field. `None` by default. May
have values `None`, `exclude` or `translate`. Defines the handling of
networks which are created by murano.
Such networks usually have very long randomly generated names, and thus look
ugly when displayed in the list. If this value is set to `exclude` then these
networks are not shown in the list at all. If set to `translate` the
names of such networks are replaced by a string `Network of %env_name%`.
.. note::
This functionality is based on the simple string matching of the
network name prefix and the names of all the accessible murano
environments. If the environment is renamed after the initial deployment
this feature will not be able to properly translate or exclude its network
name.
* **allow_auto** is used only with network field. `True` by default. Defines if
the default value of the dropdown (labeled "Auto") should be present in the
list. The default value is a tuple consisting of two `None` values. The logic
on how to treat this value is up to application developer. It is suggested to
use this field to indicate that the instance should join default environment
network. For use-cases where such behavior is not desired, this parameter
should be set to `False`.
Besides field-level validators, form-level validators also exist. They
use **standard context** for YAQL evaluation and are required when
there is a need to validate some form's constraint across several

View File

@ -155,4 +155,85 @@ So, you need to specify the maximum instance number in the UI form related to th
After the deployment, the LB virtual IP, by which an application is accessible,
is displayed.
Configuring Network Access for VMs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
By default, each VM instance deployed by ``io.murano.resources.Instance`` class
or its descendants joins an environment's default network. This network gets
created when the Environment is deployed for the first time, a subnet is
created in it and is uplinked to a router which is detected automatically based
on its name.
This behavior may be overridden in two different ways.
Using existing network as environment's default
-----------------------------------------------
This option is available for users when they create a new environment in the
Dashboard. A dropdown control is displayed next to the input field prompting
for the name of environment. By default this control provides to create a new
network, but the user may opt to choose some already existing network to be the
default for the environment being created. If the network has more than one
subnet, the list will include all the available options with their CIDRs
shown. The selected network will be used as environment's default, so no new
network will be created.
.. note::
Murano does not check the configuration or topology of the network selected
this way. It is up to the user to ensure that the network is uplinked to some
external network via a router - otherwise the murano engine will not be able
to communicate with the agents on the deployed VMs. If the Applications being
deployed require internet connectivity it is up to the user to ensure that
this net provides it, than DNS nameservers are set and accessible etc.
Modifying the App UI to prompt user for network
-----------------------------------------------
The application package may be designed to ask user about the network they want
to use for the VMs deployed by this particular application. This allows to
override the default environment's network setting regardless of its value.
To do this, application developer has to include a ``network`` field into the
Dynamic UI definition of the app. The value returned by this field is a tuple
of network_id and a subnet_id. This values may be passed as the
input properties for ``io.murano.resources.ExistingNeutronNetwork`` object
which may be in its turn passed to an instance of
``io.murano.resources.Instance`` as its network configuration.
The UI definition may look like this:
.. code-block:: yaml
Templates:
customJoinNet:
- ?:
type: io.murano.resources.ExistingNeutronNetwork
internalNetworkName: $.instanceConfiguration.network[0]
internalSubnetworkName: $.instanceConfiguration.network[1]
Application:
?:
type: com.example.someApplicationName
instance:
?:
type: io.murano.resources.LinuxMuranoInstance
networks:
useEnvironmentNetwork: $.instanceConfiguration.network[0]=null
useFlatNetwork: false
customNetworks: switch($.instanceConfiguration.network[0], $=null=>list(), $!=null=>$customJoinNet)
Forms:
- instanceConfiguration:
fields:
- name: network
type: network
label: Network
description: Select a network to join. 'Auto' corresponds to a default environment's network.
required: false
murano_networks: translate
For more details on the Dynamic UI its controls and templates please refer to
its :ref:`specification <DynamicUISpec>`.