]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Very initial version of the nxos driver .... lets call it ver 0.0.1!
authorDebo <dedutta@cisco.com>
Fri, 15 Jul 2011 00:11:55 +0000 (17:11 -0700)
committerDebo <dedutta@cisco.com>
Fri, 15 Jul 2011 00:11:55 +0000 (17:11 -0700)
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

added:
  quantum/plugins/cisco/nxosapi.py

quantum/plugins/cisco/nxosapi.py [new file with mode: 0644]

diff --git a/quantum/plugins/cisco/nxosapi.py b/quantum/plugins/cisco/nxosapi.py
new file mode 100644 (file)
index 0000000..0f0ebe0
--- /dev/null
@@ -0,0 +1,172 @@
+# 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: Debojyoti Dutta, Cisco Systems, Inc.
+
+import sys
+import os
+import warnings
+warnings.simplefilter("ignore", DeprecationWarning)
+from ncclient import manager
+from ncclient import NCClientError
+from ncclient.transport.errors import *
+
+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_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> """
+
+
+def nxos_connect(host, port, user, password):
+    try:
+        m = manager.connect(host=host, port=port, username=user,
+                             password=password)
+        return m
+    except SSHUnknownHostError:
+        sys.stderr.write('SSH unknown host error\n')
+        exit()
+
+
+def enable_vlan(mgr, vlanid, vlanname):
+    confstr = cmd_vlan_conf_snippet % (vlanid, vlanname)
+    confstr = exec_conf_prefix + confstr + exec_conf_postfix
+    mgr.edit_config(target='running', config=confstr)
+
+
+def disable_vlan(mgr, vlanid):
+    confstr = cmd_no_vlan_conf_snippet % vlanid
+    confstr = exec_conf_prefix + confstr + exec_conf_postfix
+    mgr.edit_config(target='running', config=confstr)
+
+
+def enable_vlan_on_trunk_int(mgr, interface, vlanid):
+    confstr = cmd_vlan_int_snippet % (interface, vlanid)
+    confstr = exec_conf_prefix + confstr + exec_conf_postfix
+    print confstr
+    mgr.edit_config(target='running', config=confstr)
+
+
+def disable_vlan_on_trunk_int(mgr, interface, vlanid):
+    confstr = cmd_no_vlan_int_snippet % (interface, vlanid)
+    confstr = exec_conf_prefix + confstr + exec_conf_postfix
+    print confstr
+    mgr.edit_config(target='running', config=confstr)
+
+
+def test_nxos_api(host, user, password):
+    with 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
+
+
+if __name__ == '__main__':
+    test_nxos_api(sys.argv[1], sys.argv[2], sys.argv[3])