fc914f6650
Fixes bug 1174593 VLAN IDs in the range 1006-4094 are considered to be in the extended range by the Cisco Nexus 3K switch. As such, the 3K rejects any state change configuration commands for VLANs in this range, including "state active" and "no shutdown". The errors returned by the 3K for these commands can be ignored, since the default states for these commands are acceptable for the 3K. For the 5K and 7K versions of the Nexus switch, on the other hand, the "state active" and "no shutdown" commands are required for proper VLAN configuration, regardless of VLAN ID. This fix splits the configuration commands which are used to create a VLAN on the Nexus switch into three separate configurations: - VLAN creation - state active - no shutdown For the "state active" and "no shutdown" configurations, the Cisco Nexus plugin will tolerate (ignore) errors involving invalid setting of state for VLANs in the extended VLAN range. These specific errors can be identified by looking for the appearance of certain signature strings in the associated exception's message string, i.e. "Can't modify state for extended" or "Command is allowed on VLAN". This approach will yield a very small hit in performance, but the solution is much less error prone than requiring customers to configure the Cisco plugin for 3K vs. 5K vs. 7K, or perhaps even specific software versions of the 3K, in order to inform the Cisco plugin whether VLAN state configuration commands should be used or not. Change-Id: I1be4966ddc6f462bca38428c4f904f8c982f318f
172 lines
4.6 KiB
Python
172 lines
4.6 KiB
Python
# 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
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
# The following are standard strings, messages used to communicate with Nexus,
|
|
EXEC_CONF_SNIPPET = """
|
|
<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
|
|
<configure>
|
|
<__XML__MODE__exec_configure>%s
|
|
</__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>
|
|
</__XML__MODE_vlan>
|
|
</vlan-id-create-delete>
|
|
</vlan>
|
|
"""
|
|
|
|
CMD_VLAN_ACTIVE_SNIPPET = """
|
|
<vlan>
|
|
<vlan-id-create-delete>
|
|
<__XML__PARAM_value>%s</__XML__PARAM_value>
|
|
<__XML__MODE_vlan>
|
|
<state>
|
|
<vstate>active</vstate>
|
|
</state>
|
|
</__XML__MODE_vlan>
|
|
</vlan-id-create-delete>
|
|
</vlan>
|
|
"""
|
|
|
|
CMD_VLAN_NO_SHUTDOWN_SNIPPET = """
|
|
<vlan>
|
|
<vlan-id-create-delete>
|
|
<__XML__PARAM_value>%s</__XML__PARAM_value>
|
|
<__XML__MODE_vlan>
|
|
<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>
|
|
<trunk>
|
|
<allowed>
|
|
<vlan>
|
|
<add>
|
|
<add_vlans>%s</add_vlans>
|
|
</add>
|
|
</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>
|
|
<switchport>
|
|
<trunk>
|
|
<allowed>
|
|
<vlan>
|
|
<remove>
|
|
<vlan>%s</vlan>
|
|
</remove>
|
|
</vlan>
|
|
</allowed>
|
|
</trunk>
|
|
</switchport>
|
|
</__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>
|
|
"""
|