]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Adding a new file with all the XML snippets to make code easier to read
authoreperdomo@cisco.com <>
Mon, 15 Aug 2011 21:50:55 +0000 (14:50 -0700)
committereperdomo@cisco.com <>
Mon, 15 Aug 2011 21:50:55 +0000 (14:50 -0700)
Moving the Nexus SSH server port to the configuration file
Removing main functions
Making some changes based on Dan and Salvatore reviews

quantum/plugins/cisco/README
quantum/plugins/cisco/conf/nexus.ini
quantum/plugins/cisco/nexus/cisco_nexus_configuration.py
quantum/plugins/cisco/nexus/cisco_nexus_network_driver.py
quantum/plugins/cisco/nexus/cisco_nexus_plugin.py
quantum/plugins/cisco/nexus/cisco_nexus_snippets.py [new file with mode: 0644]

index f67c453f81bbbea80acb284a50e0c74730f8f36f..aa8a2880e6c20c6977d60b30096f93573e98396c 100755 (executable)
@@ -2,7 +2,7 @@
 README:  Quantum L2 Network Plugin Framework\r
 ============================================\r
 \r
-:Author:  Sumit Naiksatam, Ram Durairaj, Mark Voelker, Edgar Magana, Shweta Padubidri, Rohit Agarwalla, Ying Liu\r
+:Author:  Sumit Naiksatam, Ram Durairaj, Mark Voelker, Edgar Magana, Shweta Padubidri, Rohit Agarwalla, Ying Liu, Debo Dutta\r
 :Contact: netstack@lists.launchpad.net\r
 :Web site: https://launchpad.net/~cisco-openstack\r
 :Copyright: 2011 Cisco Systems, Inc.\r
@@ -125,6 +125,8 @@ nexus_ip_address=10.0.0.1
 # Port number on the Nexus switch to which the UCSM 6120 is connected\r
 # Use shortened interface syntax, e.g. "3/23" not "Ethernet3/23".\r
 nexus_port=3/23\r
+#Port number where the SSH will be running at Nexus Switch, e.g.: 22 (Default) \r
+nexus_ssh_port=22\r
 \r
 [DRIVER]\r
 name=quantum.plugins.cisco.nexus.cisco_nexus_network_driver.CiscoNEXUSDriver\r
index fede46eb8352b0e1bdd446400cc2bc59f21e4cb0..a4efcb2060b12cda7930c0cecf548963d04f06e2 100644 (file)
@@ -3,6 +3,8 @@
 nexus_ip_address=<put_nexus_switch_ip_address_here>
 #Port number of the Interface connected from the Nexus 7K Switch to UCSM 6120, e.g.: 3/23
 nexus_port=<put_interface_name_here>
+#Port number where the SSH will be running at the Nexus Switch, e.g.: 22 (Default) 
+nexus_ssh_port=22
 
 [DRIVER]
 name=quantum.plugins.cisco.nexus.cisco_nexus_network_driver.CiscoNEXUSDriver
index f1ad1490281d0277559014cbcf3c13c4c5828345..b8987a5ce9d357a706da76af971188abc189ff1d 100644 (file)
@@ -30,6 +30,7 @@ cp = confp.CiscoConfigParser(os.path.dirname(os.path.realpath(__file__)) \
 section = cp['SWITCH']
 NEXUS_IP_ADDRESS = section['nexus_ip_address']
 NEXUS_PORT = section['nexus_port']
+NEXUS_SSH_PORT = section['nexus_ssh_port']
 
 section = cp['DRIVER']
 NEXUS_DRIVER = section['name']
index 78090d5f9cf326fb6e0e30542bb10237c48b1a6e..f0c16274f6704f28a3b1fac6835636640839fe09 100644 (file)
@@ -27,6 +27,7 @@ import subprocess
 
 from quantum.plugins.cisco.common import cisco_constants as const
 from quantum.plugins.cisco.common import cisco_exceptions as cexc
+from quantum.plugins.cisco.nexus import cisco_nexus_snippets as snipp
 
 from ncclient import manager
 
@@ -34,210 +35,61 @@ LOG.basicConfig(level=LOG.WARN)
 LOG.getLogger(const.LOGGER_COMPONENT_NAME)
 
 
-# The following are standard strings, messages used to communicate with Nexus,
-#only place holder values change for each message
-exec_conf_prefix = """
-      <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
-        <configure xmlns="http://www.cisco.com/nxos:1.0:vlan_mgr_cli">
-          <__XML__MODE__exec_configure>
-"""
-
-
-exec_conf_postfix = """
-          </__XML__MODE__exec_configure>
-        </configure>
-      </config>
-"""
-
-
-cmd_vlan_conf_snippet = """
-            <vlan>
-              <vlan-id-create-delete>
-                <__XML__PARAM_value>%s</__XML__PARAM_value>
-                <__XML__MODE_vlan>
-                  <name>
-                    <vlan-name>%s</vlan-name>
-                  </name>
-                  <state>
-                    <vstate>active</vstate>
-                  </state>
-                  <no>
-                    <shutdown/>
-                  </no>
-                </__XML__MODE_vlan>
-              </vlan-id-create-delete>
-            </vlan>
-"""
-
-cmd_no_vlan_conf_snippet = """
-          <no>
-          <vlan>
-            <vlan-id-create-delete>
-              <__XML__PARAM_value>%s</__XML__PARAM_value>
-            </vlan-id-create-delete>
-          </vlan>
-          </no>
-"""
-
-cmd_vlan_int_snippet = """
-          <interface>
-            <ethernet>
-              <interface>%s</interface>
-              <__XML__MODE_if-ethernet-switch>
-                <switchport></switchport>
-                <switchport>
-                  <trunk>
-                    <allowed>
-                      <vlan>
-                        <__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
-                          <allow-vlans>%s</allow-vlans>
-                        </__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
-                      </vlan>
-                    </allowed>
-                  </trunk>
-                </switchport>
-              </__XML__MODE_if-ethernet-switch>
-            </ethernet>
-          </interface>
-"""
-
-cmd_port_trunk = """
-          <interface>
-            <ethernet>
-              <interface>%s</interface>
-              <__XML__MODE_if-ethernet-switch>
-                <switchport></switchport>
-                <switchport>
-                  <mode>
-                    <trunk>
-                    </trunk>
-                  </mode>
-                </switchport>
-              </__XML__MODE_if-ethernet-switch>
-            </ethernet>
-          </interface>
-"""
-
-cmd_no_switchport = """
-          <interface>
-            <ethernet>
-              <interface>%s</interface>
-              <__XML__MODE_if-ethernet-switch>
-                <no>
-                  <switchport>
-                  </switchport>
-                </no>
-              </__XML__MODE_if-ethernet-switch>
-            </ethernet>
-          </interface>
-"""
-
-
-cmd_no_vlan_int_snippet = """
-          <interface>
-            <ethernet>
-              <interface>%s</interface>
-              <__XML__MODE_if-ethernet-switch>
-                <switchport></switchport>
-                <no>
-                <switchport>
-                  <trunk>
-                    <allowed>
-                      <vlan>
-                        <__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
-                          <allow-vlans>%s</allow-vlans>
-                        </__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
-                      </vlan>
-                    </allowed>
-                  </trunk>
-                </switchport>
-               </no>
-              </__XML__MODE_if-ethernet-switch>
-            </ethernet>
-          </interface>
-"""
-
-
-filter_show_vlan_brief_snippet = """
-      <show xmlns="http://www.cisco.com/nxos:1.0:vlan_mgr_cli">
-        <vlan>
-          <brief/>
-        </vlan>
-      </show> """
-
-
 class CiscoNEXUSDriver():
 
     def __init__(self):
         pass
 
-    def nxos_connect(self, nexus_host, port, nexus_user, nexus_password):
-            m = manager.connect(host=nexus_host, port=22, username=nexus_user,
-                                password=nexus_password)
+    def nxos_connect(self, nexus_host, nexus_ssh_port, nexus_user,
+                     nexus_password):
+            m = manager.connect(host=nexus_host, port=nexus_ssh_port,
+                                username=nexus_user, password=nexus_password)
             return m
 
     def enable_vlan(self, mgr, vlanid, vlanname):
-        confstr = cmd_vlan_conf_snippet % (vlanid, vlanname)
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
+        confstr = snipp.cmd_vlan_conf_snippet % (vlanid, vlanname)
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
         mgr.edit_config(target='running', config=confstr)
 
     def disable_vlan(self, mgr, vlanid):
-        confstr = cmd_no_vlan_conf_snippet % vlanid
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
+        confstr = snipp.cmd_no_vlan_conf_snippet % vlanid
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
         mgr.edit_config(target='running', config=confstr)
 
     def enable_port_trunk(self, mgr, interface):
-        confstr = cmd_port_trunk % (interface)
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
-        print confstr
+        confstr = snipp.cmd_port_trunk % (interface)
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
+        LOG.debug("NexusDriver: %s" % confstr)
         mgr.edit_config(target='running', config=confstr)
 
     def disable_switch_port(self, mgr, interface):
-        confstr = cmd_no_switchport % (interface)
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
-        print confstr
+        confstr = snipp.cmd_no_switchport % (interface)
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
+        LOG.debug("NexusDriver: %s" % confstr)
         mgr.edit_config(target='running', config=confstr)
 
     def enable_vlan_on_trunk_int(self, mgr, interface, vlanid):
-        confstr = cmd_vlan_int_snippet % (interface, vlanid)
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
-        print confstr
+        confstr = snipp.cmd_vlan_int_snippet % (interface, vlanid)
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
+        LOG.debug("NexusDriver: %s" % confstr)
         mgr.edit_config(target='running', config=confstr)
 
     def disable_vlan_on_trunk_int(self, mgr, interface, vlanid):
-        confstr = cmd_no_vlan_int_snippet % (interface, vlanid)
-        confstr = exec_conf_prefix + confstr + exec_conf_postfix
-        print confstr
+        confstr = snipp.cmd_no_vlan_int_snippet % (interface, vlanid)
+        confstr = snipp.exec_conf_prefix + confstr + snipp.exec_conf_postfix
+        LOG.debug("NexusDriver: %s" % confstr)
         mgr.edit_config(target='running', config=confstr)
 
-    def test_nxos_api(self, host, user, password):
-        with self.nxos_connect(host, port=22, user=user,
-                               password=password) as m:
-            #enable_vlan(m, '100', 'ccn1')
-            #enable_vlan_on_trunk_int(m, '2/1', '100')
-            #disable_vlan_on_trunk_int(m, '2/1', '100')
-            #disable_vlan(m, '100')
-            result = m.get(("subtree", filter_show_vlan_brief_snippet))
-            print result
-
     def create_vlan(self, vlan_name, vlan_id, nexus_host, nexus_user,
-                    nexus_password, nexus_interface):
-        #TODO (Edgar) Move the SSH port to the configuration file
-        with self.nxos_connect(nexus_host, 22, nexus_user,
+                    nexus_password, nexus_interface, nexus_ssh_port):
+        with self.nxos_connect(nexus_host, int(nexus_ssh_port), nexus_user,
                                nexus_password) as m:
             self.enable_vlan(m, vlan_id, vlan_name)
             self.enable_vlan_on_trunk_int(m, nexus_interface, vlan_id)
 
     def delete_vlan(self, vlan_id, nexus_host, nexus_user,
-                    nexus_password, nexus_interface):
-        with self.nxos_connect(nexus_host, 22, nexus_user,
+                    nexus_password, nexus_interface, nexus_ssh_port):
+        with self.nxos_connect(nexus_host, int(nexus_ssh_port), nexus_user,
                                nexus_password) as m:
             self.disable_vlan(m, vlan_id)
             self.disable_switch_port(m, nexus_interface)
-
-
-def main():
-    client = CiscoNEXUSDriver()
-
-if __name__ == '__main__':
-    main()
index fdb4ef446604545ce1f62fcce76dd388f4b865b3..e27269ed64ff927ce257dbadc9e2c66c84f2580f 100644 (file)
@@ -43,6 +43,7 @@ class NexusPlugin(L2DevicePluginBase):
         self._nexus_username = cred.Store.getUsername(conf.NEXUS_IP_ADDRESS)
         self._nexus_password = cred.Store.getPassword(conf.NEXUS_IP_ADDRESS)
         self._nexus_port = conf.NEXUS_PORT
+        self._nexus_ssh_port = conf.NEXUS_SSH_PORT
 
     def get_all_networks(self, tenant_id):
         """
@@ -61,7 +62,8 @@ class NexusPlugin(L2DevicePluginBase):
         """
         LOG.debug("NexusPlugin:create_network() called\n")
         self._client.create_vlan(vlan_name, str(vlan_id), self._nexus_ip,
-                self._nexus_username, self._nexus_password, self._nexus_port)
+                self._nexus_username, self._nexus_password, self._nexus_port,
+                self._nexus_ssh_port)
 
         new_net_dict = {const.NET_ID: net_id,
                         const.NET_NAME: net_name,
@@ -81,7 +83,8 @@ class NexusPlugin(L2DevicePluginBase):
         vlan_id = self._get_vlan_id_for_network(tenant_id, net_id)
         if net:
             self._client.delete_vlan(str(vlan_id), self._nexus_ip,
-                self._nexus_username, self._nexus_password, self._nexus_port)
+                self._nexus_username, self._nexus_password, self._nexus_port,
+                self._nexus_ssh_port)
             self._networks.pop(net_id)
             return net
         # Network not found
diff --git a/quantum/plugins/cisco/nexus/cisco_nexus_snippets.py b/quantum/plugins/cisco/nexus/cisco_nexus_snippets.py
new file mode 100644 (file)
index 0000000..a3bc004
--- /dev/null
@@ -0,0 +1,161 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Cisco Systems, Inc.  All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
+# @author: Edgar Magana, Cisco Systems, Inc.
+
+"""
+Nexus-OS XML-based configuration snippets
+"""
+
+import logging as LOG
+import string
+import subprocess
+
+from quantum.plugins.cisco.common import cisco_constants as const
+
+LOG.basicConfig(level=LOG.WARN)
+LOG.getLogger(const.LOGGER_COMPONENT_NAME)
+
+
+# The following are standard strings, messages used to communicate with Nexus,
+exec_conf_prefix = """
+      <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+        <configure xmlns="http://www.cisco.com/nxos:1.0:vlan_mgr_cli">
+          <__XML__MODE__exec_configure>
+"""
+
+
+exec_conf_postfix = """
+          </__XML__MODE__exec_configure>
+        </configure>
+      </config>
+"""
+
+
+cmd_vlan_conf_snippet = """
+            <vlan>
+              <vlan-id-create-delete>
+                <__XML__PARAM_value>%s</__XML__PARAM_value>
+                <__XML__MODE_vlan>
+                  <name>
+                    <vlan-name>%s</vlan-name>
+                  </name>
+                  <state>
+                    <vstate>active</vstate>
+                  </state>
+                  <no>
+                    <shutdown/>
+                  </no>
+                </__XML__MODE_vlan>
+              </vlan-id-create-delete>
+            </vlan>
+"""
+
+cmd_no_vlan_conf_snippet = """
+          <no>
+          <vlan>
+            <vlan-id-create-delete>
+              <__XML__PARAM_value>%s</__XML__PARAM_value>
+            </vlan-id-create-delete>
+          </vlan>
+          </no>
+"""
+
+cmd_vlan_int_snippet = """
+          <interface>
+            <ethernet>
+              <interface>%s</interface>
+              <__XML__MODE_if-ethernet-switch>
+                <switchport></switchport>import logging as LOG
+                <switchport>
+                  <trunk>
+                    <allowed>
+                      <vlan>
+                        <__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
+                          <allow-vlans>%s</allow-vlans>
+                        </__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
+                      </vlan>
+                    </allowed>
+                  </trunk>
+                </switchport>
+              </__XML__MODE_if-ethernet-switch>
+            </ethernet>
+          </interface>
+"""
+
+cmd_port_trunk = """
+          <interface>
+            <ethernet>
+              <interface>%s</interface>
+              <__XML__MODE_if-ethernet-switch>
+                <switchport></switchport>
+                <switchport>
+                  <mode>
+                    <trunk>
+                    </trunk>
+                  </mode>
+                </switchport>
+              </__XML__MODE_if-ethernet-switch>C:  1: Missing docstring
+            </ethernet>
+          </interface>
+"""
+
+cmd_no_switchport = """
+          <interface>
+            <ethernet>
+              <interface>%s</interface>
+              <__XML__MODE_if-ethernet-switch>
+                <no>
+                  <switchport>
+                  </switchport>
+                </no>
+              </__XML__MODE_if-ethernet-switch>
+            </ethernet>
+          </interface>
+"""
+
+
+cmd_no_vlan_int_snippet = """
+          <interface>
+            <ethernet>C:  1: Missing docstring
+              <interface>%s</interface>
+              <__XML__MODE_if-ethernet-switch>
+                <switchport></switchport>
+                <no>
+                <switchport>
+                  <trunk>
+                    <allowed>
+                      <vlan>
+                        <__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
+                          <allow-vlans>%s</allow-vlans>
+                        </__XML__BLK_Cmd_switchport_trunk_allowed_allow-vlans>
+                      </vlan>
+                    </allowed>
+                  </trunk>
+                </switchport>
+               </no>
+              </__XML__MODE_if-ethernet-switch>
+            </ethernet>
+          </interface>
+"""
+
+
+filter_show_vlan_brief_snippet = """
+      <show xmlns="http://www.cisco.com/nxos:1.0:vlan_mgr_cli">
+        <vlan>
+          <brief/>
+        </vlan>
+      </show> """