summaryrefslogtreecommitdiffstats
path: root/docs/release/userguide/feature.userguide.rst
blob: 6739146f470a5c4db4efd1b15a3f5822012a56fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) <optionally add copywriters name>

=========================
OPNFV NetReady User Guide
=========================

.. contents::
   :depth: 3
   :local:

Gluon Description
-----------------

**Gluon** brings a Networking Service Framework that enables Telecom Service
Providers to provide their customers with networking services on-demand.
**Gluon** uses a model-driven approach to generate Networking Service APIs
(including objects, database schema, and RESTful API endpoints) from a YAML
file which models the Networking Service. When a Telecom Service Provider
needs to launch a new Networking Service, it only needs to model the new
service in a YAML file. The **Gluon** framework generates the APIs accordingly.
Thus **Gluon** helps Telecom Service Providers accelerate the time-to-market
and achieve business agility through its extensibility and scalability in
generating APIs for new use-cases and services.

Gluon Capabilities and Usage
----------------------------

**Gluon** is the port arbiter that maintains a list of ports and bindings of
different networking backends. A **Proton** is a set of APIs of a particular
NFV Networking Service. A **Proton Server** is the API server that hosts
multiple **Protons**, i.e. multiple sets of APIs. **Gluon** uses backend
drivers to interact with the **Proton Server** for port binding and other
operations.

A **Proton** is created by a **Particle Generator** based on a YAML file modeled
for this particular NFV Networking Service. When a **Proton** is created, the
objects, database schema, and RESTful APIs of this **Proton** are created.
Then the **Proton** specific driver would be loaded into **Gluon**.

When the **Proton Server** receives port binding and other operation requests,
it broadcasts those requests to ``etcd``. The **Shim Layers** of respective
SDN Controllers listen to ``etcd``, and get the notification from ``etcd``.
Based on the type of operations, parameter data, and its own deployment and
policy configuration, SDN Controllers act upon accordingly. This mechanism is
similar to Neutron's Hierarchical Port Binding (HPB), and provides the
flexibility and scalability when a port operation needs to be supported by
multiple SDN Controllers in collaborative and interoperable way.

Gluon API Guidelines and Examples
---------------------------------

This section shows you how to use **Proton** to create the needed objects,
and then use ``nova boot`` to bind the port to a VM. It is assumed that you
have already installed Gluon package, including ``etcd`` and **Gluon Plugin**,
and started **Proton Server**.  If not, please refer to [1]_.

Getting Help
~~~~~~~~~~~~

Just typing the ``protonclient --help`` command gives you general help
information:

.. code-block:: bash

    $ protonclient --help

    Usage: protonclient --api <api_name> [OPTIONS] COMMAND[ARGS]...

    Options:
    --api TEXT      Name of API, one of ['net-l3vpn', 'test']
    --port INTEGER  Port of endpoint (OS_PROTON_PORT)
    --host TEXT     Host of endpoint (OS_PROTON_HOST)
    --help          Show this message and exit.

Mandatory Parameters
~~~~~~~~~~~~~~~~~~~~

``--api <api_name>`` is a mandatory parameter. For example, ``--api net-l3vpn``.

Just typing the ``protonclient`` command shows you that those mandatory
parameters are required, and gives you general help information too.

.. code-block:: bash

    $ protonclient
    --api is not specified!

    Usage: protonclient --api <api_name> [OPTIONS] COMMAND[ARGS]...

    Options:
    --api TEXT      Name of API, one of ['net-l3vpn', 'test']
    --port INTEGER  Port of endpoint (OS_PROTON_PORT)
    --host TEXT     Host of endpoint (OS_PROTON_HOST)
    --help          Show this message and exit.

Using L3VPN Proton
~~~~~~~~~~~~~~~~~~

**NOTE** that there is a KNOWN BUG in the **Usage** message where the mandatory
parameters ``--api net-l3vpn`` are missing.

.. code-block:: bash

    $ protonclient --api net-l3vpn
    Usage: protonclient [OPTIONS] COMMAND [ARGS]...

    Options:
      --help  Show this message and exit.

    Commands:
      interface-create
      interface-delete
      interface-list
      interface-show
      interface-update
      port-create
      port-delete
      port-list
      port-show
      port-update
      vpn-create
      vpn-delete
      vpn-list
      vpn-show
      vpn-update
      vpnafconfig-create
      vpnafconfig-delete
      vpnafconfig-list
      vpnafconfig-show
      vpnafconfig-update
      vpnbinding-create
      vpnbinding-delete
      vpnbinding-list
      vpnbinding-show
      vpnbinding-update

The following sections give you the general work flow of how to use Proton to
create and configure an L3VPN.

**For more details and examples, please refer to [2]_**.

Work Flow of Using L3VPN
++++++++++++++++++++++++

The work flow of using L3VPN includes:

* **Step 1: Create ``Port`` Object**

.. code-block:: bash

    $ protonclient --api net-l3vpn port-create --help
    $ protonclient --api net-l3vpn port-create [ARGS] ...

Please **NOTE**: a default ``interface`` object is automatically created too
when a ``Port`` is created, and this default ``interface`` object is attached
to this ``Port`` object. The UUID of this default ``Interface`` object
will be the same as the UUID of the parent ``Port`` object.

* **Step 2 (Optional): Create ``Interface`` Object**

.. code-block:: bash

    $ protonclient --api net-l3vpn interface-create --help
    $ protonclient --api net-l3vpn interface-create [ARGS] ...

Please **NOTE**: This step is optional because a default ``Interface`` object
was already automatically created when a ``Port`` object was created at
**Step 1**.

  * **For example: list the default ``Interface`` Object**:

.. code-block:: bash

    $ protonclient --api net-l3vpn interface-list

* **Step 3 (Optional): Create ``VPNAFConfig`` Object**

.. code-block:: bash

    $ protonclient --api net-l3vpn vpnafconfig-create --help
    $ protonclient --api net-l3vpn vpnafconfig-create [ARGS] ...

Please **NOTE**: This step is optional because all parameters needed for an
L3VPN (route specifiers) are also present in creating a ``VPN`` service object
at **Step 4**. This part of the API needs to be aligned in the future.

* **Step 4: Create ``VPN`` Object**

.. code-block:: bash

    $ protonclient --api net-l3vpn vpn-create --help
    $ protonclient --api net-l3vpn vpn-create [ARGS] ...

At this point you have a ``Port`` object, default ``Interface`` object and a
``VPN`` service object created.

  * View ``VPN`` and ``Port`` Objects

You can view the values with the following commands:

.. code-block:: bash

    $ protonclient --api net-l3vpn vpn-list
    $ protonclient --api net-l3vpn port-list

* **Step 5: Create ``VPNBinding`` Object**

You need to create a ``VPNBinding`` object to tie the ``Interface`` and the
``Service`` together in order to achieve service binding.

.. code-block:: bash

    $ protonclient --api net-l3vpn vpnbinding-create --help
    $ protonclient --api net-l3vpn vpnbinding-create [ARGS] ...

  * View ``VPNBinding`` Objects

.. code-block:: bash

    $ protonclient --api net-l3vpn vpnbinding-list

At this point you have had all of the information needed for an L3VPN Port in
Proton.

* **Step 6: Create VM and Bind our L3VPN Port**

.. code-block:: bash

    $ nova --debug boot --flavor 1 --image cirros --nic port-id=<port-id> <VM-Name>

To Use Gluon in a Project
~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: bash

    import gluon

References

.. [1] ../installation/index
.. [2] https://github.com/openstack/gluon/blob/master/doc/source/usage.rst