-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for Cisco Nexus 9000v platform (#60)
- Loading branch information
1 parent
6d9ce37
commit 15ea8b7
Showing
6 changed files
with
214 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
# January 2017, Glenn F. Matthews | ||
# Copyright (c) 2013-2017 the COT project developers. | ||
# See the COPYRIGHT.txt file at the top-level directory of this distribution | ||
# and at https://github.com/glennmatthews/cot/blob/master/COPYRIGHT.txt. | ||
# | ||
# This file is part of the Common OVF Tool (COT) project. | ||
# It is subject to the license terms in the LICENSE.txt file found in the | ||
# top-level directory of this distribution and at | ||
# https://github.com/glennmatthews/cot/blob/master/LICENSE.txt. No part | ||
# of COT, including this file, may be copied, modified, propagated, or | ||
# distributed except according to the terms contained in the LICENSE.txt file. | ||
|
||
"""Platform logic for the Cisco Nexus 9000v virtual switch.""" | ||
|
||
import logging | ||
|
||
from COT.platforms.generic import GenericPlatform | ||
from COT.data_validation import ( | ||
ValueTooLowError, validate_int, | ||
) | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class Nexus9000v(GenericPlatform): | ||
"""Platform-specific logic for Cisco Nexus 9000v.""" | ||
|
||
PLATFORM_NAME = "Cisco Nexus 9000v" | ||
|
||
CONFIG_TEXT_FILE = 'nxos_config.txt' | ||
LITERAL_CLI_STRING = None | ||
SUPPORTED_NIC_TYPES = ["E1000", "VMXNET3"] | ||
|
||
@classmethod | ||
def guess_nic_name(cls, nic_number): | ||
"""The Nexus 9000v has a management NIC and some number of data NICs. | ||
Args: | ||
nic_number (int): Nth NIC to name. | ||
Returns: | ||
* mgmt0 | ||
* Ethernet1/1 | ||
* Ethernet1/2 | ||
* ... | ||
""" | ||
if nic_number == 1: | ||
return "mgmt0" | ||
else: | ||
return "Ethernet1/{0}".format(nic_number - 1) | ||
|
||
@classmethod | ||
def validate_cpu_count(cls, cpus): | ||
"""The Nexus 9000v requires 1-4 vCPUs. | ||
Args: | ||
cpus (int): Number of vCPUs | ||
Raises: | ||
ValueTooLowError: if ``cpus`` is less than 1 | ||
ValueTooHighError: if ``cpus`` is more than 4 | ||
""" | ||
validate_int(cpus, 1, 4, "CPUs") | ||
|
||
@classmethod | ||
def validate_memory_amount(cls, mebibytes): | ||
"""The Nexus 9000v requires at least 8 GiB of RAM. | ||
Args: | ||
mebibytes (int): RAM, in MiB. | ||
Raises: | ||
ValueTooLowError: if ``mebibytes`` is less than 8192 | ||
""" | ||
if mebibytes < 8192: | ||
raise ValueTooLowError("RAM", str(mebibytes) + " MiB", "8 GiB") | ||
|
||
@classmethod | ||
def validate_nic_count(cls, count): | ||
"""The Nexus 9000v requires at least 1 and supports at most 65 NICs. | ||
Args: | ||
count (int): Number of NICs. | ||
Raises: | ||
ValueTooLowError: if ``count`` is less than 1 | ||
ValueTooHighError: if ``count`` is more than 65 | ||
""" | ||
validate_int(count, 1, 65, "NICs") | ||
|
||
@classmethod | ||
def validate_serial_count(cls, count): | ||
"""The Nexus 9000v requires exactly 1 serial port. | ||
Args: | ||
count (int): Number of serial ports. | ||
Raises: | ||
ValueTooLowError: if ``count`` is less than 1 | ||
ValueTooHighError: if ``count`` is more than 1 | ||
""" | ||
validate_int(count, 1, 1, "serial ports") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# test_cisco_nxosv.py - Unit test cases for Cisco Nexus 9000v platform | ||
# | ||
# January 2017, Glenn F. Matthews | ||
# Copyright (c) 2014-2017 the COT project developers. | ||
# See the COPYRIGHT.txt file at the top-level directory of this distribution | ||
# and at https://github.com/glennmatthews/cot/blob/master/COPYRIGHT.txt. | ||
# | ||
# This file is part of the Common OVF Tool (COT) project. | ||
# It is subject to the license terms in the LICENSE.txt file found in the | ||
# top-level directory of this distribution and at | ||
# https://github.com/glennmatthews/cot/blob/master/LICENSE.txt. No part | ||
# of COT, including this file, may be copied, modified, propagated, or | ||
# distributed except according to the terms contained in the LICENSE.txt file. | ||
|
||
"""Unit test cases for Nexus 9000v platform.""" | ||
|
||
import unittest | ||
from COT.platforms.cisco_nexus_9000v import Nexus9000v | ||
from COT.data_validation import ( | ||
ValueUnsupportedError, ValueTooLowError, ValueTooHighError | ||
) | ||
|
||
|
||
class TestNexus9000v(unittest.TestCase): | ||
"""Test cases for Cisco Nexus 9000v platform handling.""" | ||
|
||
cls = Nexus9000v | ||
|
||
def test_nic_name(self): | ||
"""Test NIC name construction.""" | ||
self.assertEqual(self.cls.guess_nic_name(1), | ||
"mgmt0") | ||
self.assertEqual(self.cls.guess_nic_name(2), | ||
"Ethernet1/1") | ||
self.assertEqual(self.cls.guess_nic_name(3), | ||
"Ethernet1/2") | ||
self.assertEqual(self.cls.guess_nic_name(4), | ||
"Ethernet1/3") | ||
|
||
def test_cpu_count(self): | ||
"""Test CPU count limits.""" | ||
self.assertRaises(ValueTooLowError, self.cls.validate_cpu_count, 0) | ||
self.cls.validate_cpu_count(1) | ||
self.cls.validate_cpu_count(4) | ||
self.assertRaises(ValueTooHighError, self.cls.validate_cpu_count, 5) | ||
|
||
def test_memory_amount(self): | ||
"""Test RAM allocation limits.""" | ||
self.assertRaises(ValueTooLowError, | ||
self.cls.validate_memory_amount, 8191) | ||
self.cls.validate_memory_amount(8192) | ||
self.cls.validate_memory_amount(16384) | ||
# No upper bound known at present | ||
|
||
def test_nic_count(self): | ||
"""Test NIC range limits.""" | ||
self.assertRaises(ValueTooLowError, self.cls.validate_nic_count, 0) | ||
self.cls.validate_nic_count(1) | ||
self.cls.validate_nic_count(65) | ||
self.assertRaises(ValueTooHighError, self.cls.validate_nic_count, 66) | ||
|
||
def test_nic_type(self): | ||
"""Test NIC valid and invalid types.""" | ||
self.assertRaises(ValueUnsupportedError, | ||
self.cls.validate_nic_type, "E1000e") | ||
self.cls.validate_nic_type("E1000") | ||
self.assertRaises(ValueUnsupportedError, | ||
self.cls.validate_nic_type, "PCNet32") | ||
self.assertRaises(ValueUnsupportedError, | ||
self.cls.validate_nic_type, "virtio") | ||
self.cls.validate_nic_type("VMXNET3") | ||
|
||
def test_serial_count(self): | ||
"""Test serial port range limits.""" | ||
self.assertRaises(ValueTooLowError, self.cls.validate_serial_count, 0) | ||
self.cls.validate_serial_count(1) | ||
self.assertRaises(ValueTooHighError, self.cls.validate_serial_count, 2) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
``COT.platforms.cisco_nexus_9000v`` module | ||
========================================== | ||
|
||
.. automodule:: COT.platforms.cisco_nexus_9000v |