From 1b351e16956563916cdf4f27071653e4b69569c2 Mon Sep 17 00:00:00 2001
From: reedip <reedip.banerjee@nectechnologies.in>
Date: Mon, 4 Apr 2016 11:17:29 +0900
Subject: [PATCH] Add provider network options to osc network create

The following patch adds the provider network options
to OSC "network create".

Change-Id: Ib8449c00ee4b4285889588f03ddd7a686ce8f987
Partial-Bug: #1545537
---
 doc/source/command-objects/network.rst        | 19 ++++++++++++++
 openstackclient/network/v2/network.py         | 26 +++++++++++++++++++
 .../tests/network/v2/test_network.py          |  9 +++++++
 ...add-provider-options-12bbf01d2280dd2f.yaml |  9 +++++++
 4 files changed, 63 insertions(+)
 create mode 100644 releasenotes/notes/add-provider-options-12bbf01d2280dd2f.yaml

diff --git a/doc/source/command-objects/network.rst b/doc/source/command-objects/network.rst
index e0a649c15d..9fbc02164c 100644
--- a/doc/source/command-objects/network.rst
+++ b/doc/source/command-objects/network.rst
@@ -18,6 +18,9 @@ Create new network
         [--share | --no-share]
         [--availability-zone-hint <availability-zone>]
         [--external [--default | --no-default] | --internal]
+        [--provider-network-type <provider-network-type>]
+        [--provider-physical-network <provider-physical-network>]
+        [--provider-segmentation-id <provider-segmentation-id>]
         <name>
 
 .. option:: --project <project>
@@ -83,6 +86,22 @@ Create new network
     By default, no network is set as an external network.
     (Network v2 only)
 
+.. option:: --provider-network-type <provider-network-type>
+
+    The physical mechanism by which the virtual network is implemented.
+    The supported options are: flat, gre, local, vlan, vxlan
+    (Network v2 only)
+
+.. option:: --provider-physical-network <provider-physical-network>
+
+    Name of the physical network over which the virtual network is implemented
+    (Network v2 only)
+
+.. option:: --provider-segmentation-id <provider-segmentation-id>
+
+    VLAN ID for VLAN networks or tunnel-id for GRE/VXLAN networks
+    (Network v2 only)
+
 .. _network_create-name:
 .. describe:: <name>
 
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index 6fd18efb4b..d3b20c0f3e 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -165,6 +165,26 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
             action='store_true',
             help='Do not use the network as the default external network.'
                  'By default, no network is set as an external network.')
+        parser.add_argument(
+            '--provider-network-type',
+            metavar='<provider-network-type>',
+            choices=['flat', 'gre', 'local',
+                     'vlan', 'vxlan'],
+            help='The physical mechanism by which the virtual network '
+                 'is implemented. The supported options are: '
+                 'flat, gre, local, vlan, vxlan')
+        parser.add_argument(
+            '--provider-physical-network',
+            metavar='<provider-physical-network>',
+            dest='physical_network',
+            help='Name of the physical network over which the virtual '
+                 'network is implemented')
+        parser.add_argument(
+            '--provider-segmentation-id',
+            metavar='<provider-segmentation-id>',
+            dest='segmentation_id',
+            help='VLAN ID for VLAN networks or tunnel-id for GRE/VXLAN '
+                 'networks')
         return parser
 
     def update_parser_compute(self, parser):
@@ -185,6 +205,12 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
                 attrs['is_default'] = False
             if parsed_args.default:
                 attrs['is_default'] = True
+        if parsed_args.provider_network_type:
+            attrs['provider:network_type'] = parsed_args.provider_network_type
+        if parsed_args.physical_network:
+            attrs['provider:physical_network'] = parsed_args.physical_network
+        if parsed_args.segmentation_id:
+            attrs['provider:segmentation_id'] = parsed_args.segmentation_id
         obj = client.create_network(**attrs)
         columns = _get_columns(obj)
         data = utils.get_item_properties(obj, columns, formatters=_formatters)
diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py
index 572bc6aee4..2493362e29 100644
--- a/openstackclient/tests/network/v2/test_network.py
+++ b/openstackclient/tests/network/v2/test_network.py
@@ -142,6 +142,9 @@ class TestCreateNetworkIdentityV3(TestNetwork):
             "--project-domain", identity_fakes_v3.domain_name,
             "--availability-zone-hint", "nova",
             "--external", "--default",
+            "--provider-network-type", "vlan",
+            "--provider-physical-network", "physnet1",
+            "--provider-segmentation-id", "400",
             self._network.name,
         ]
         verifylist = [
@@ -152,6 +155,9 @@ class TestCreateNetworkIdentityV3(TestNetwork):
             ('availability_zone_hints', ["nova"]),
             ('external', True),
             ('default', True),
+            ('provider_network_type', 'vlan'),
+            ('physical_network', 'physnet1'),
+            ('segmentation_id', '400'),
             ('name', self._network.name),
         ]
 
@@ -166,6 +172,9 @@ class TestCreateNetworkIdentityV3(TestNetwork):
             'tenant_id': identity_fakes_v3.project_id,
             'is_default': True,
             'router:external': True,
+            'provider:network_type': 'vlan',
+            'provider:physical_network': 'physnet1',
+            'provider:segmentation_id': '400',
         })
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.data, data)
diff --git a/releasenotes/notes/add-provider-options-12bbf01d2280dd2f.yaml b/releasenotes/notes/add-provider-options-12bbf01d2280dd2f.yaml
new file mode 100644
index 0000000000..68de08190f
--- /dev/null
+++ b/releasenotes/notes/add-provider-options-12bbf01d2280dd2f.yaml
@@ -0,0 +1,9 @@
+---
+features:
+  - |
+    New options have been added to the ``network create`` command
+    to support provider network functionality.
+    These options are ``--provider-network-type``, ``--provider-physical-network``,
+    and ``--provider-segmentation-id``.
+    These options are available for Networkv2 only
+    [Bug `1545537 <https://bugs.launchpad.net/bugs/1545537>`_]