summaryrefslogtreecommitdiffstats
path: root/README.rst
blob: 968f54d8eac6cf00045e6c76b713f90b1d499533 (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
===============================
os-net-config
===============================

host network configuration tool

This is an initial implementation towards the 'network configuration' spec @
https://review.openstack.org/#/c/97859/ The intention is for this code to be
moved under the tripleo project in due course.

* Free software: Apache license
* Documentation: http://docs.openstack.org/developer/os-net-config
* Source: http://git.openstack.org/cgit/openstack/os-net-config
* Bugs: http://bugs.launchpad.net/os-net-config

Features
--------

The core aim of this project is to allow fine grained (but extendable)
configuration of the networking parameters for a network host. The
project consists of:

 * A python library which provides configuration via an object model.

 * A CLI (os-net-config) which provides configuration via a JSON file format.
   By default os-net-config uses a JSON config file located at
   /etc/os-net-config/config.json. This can be customized via the
   --config-file CLI option.

JSON Config Examples
--------------------
 * Configure an OVS bridge with a single attached interface (port)

.. code-block:: json

 { "network_config": [
         {
             "type": "ovs_bridge",
             "name": "br-ctlplane",
             "use_dhcp": "true",
             "members": [
                 {
                     "type": "interface",
                     "name": "em1"
                 }
             ]
         }
     ]
 }

..


 * Configure an OVS bridge on top of an OVS bond

.. code-block:: json

 { "network_config": [
         {
             "type": "ovs_bridge",
             "name": "br-ctlplane",
             "use_dhcp": "true",
             "members": [
                 {
                     "type": "ovs_bond",
                     "name": "bond1",
                     "use_dhcp": "true",
                     "members": [
                         { "type": "interface", "name": "em1" },
                         { "type": "interface", "name": "em2" }
                     ]
                 }
             ]
         }
     ]
 }

..

 * Configure a tagged VLAN interface on top of an OVS bridge

.. code-block:: json

 { "network_config": [
         {
             "type": "ovs_bridge",
             "name": "br-ctlplane",
             "members": [
                 {
                     "type": "vlan",
                     "device": "em1",
                     "vlan_id": "16",
                     "addresses": [{
                         "ip_netmask": "192.0.2.1/24"
                     }],
                     "routes": [{
                         "next_hop": "192.0.2.1",
                         "ip_netmask": "192.0.2.1/24"
                     }]
                 }
             ]
         }
     ]
 }

..

Provider Configuration
----------------------
Providers are use to apply (implement) the desired configuration on the
host system. By default 3 providers are implemented:

 * Ifcfg: persistent network config format stored in
   /etc/sysconfig/network-scripts

 * ENI: persistent network config format stored in /etc/network/interfaces

 * iproute2: non-persistent provider which implements the config using
   iproute2, vconfig, etc...

When using bin/os-net-config the provider is automatically selected based on
the host systems perferred persistent network type (ifcfg or ENI). This can
be customized via the --provider CLI option.