Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update file transfer paths to saner defaults #33

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
358 changes: 358 additions & 0 deletions nexusdatabroker/ndb_nxos_install.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,358 @@
import cli
import sys
import logging
COMMAND_LIST = []
STRICT_LOG_FILE = True
if '--debug' in sys.argv:
STRICT_LOG_FILE = False
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
CON_LOG_HANDLER = logging.StreamHandler()
FILE_LOG_HANDGLER = logging.FileHandler('/bootflash/ndb_nxos_install.log')
FILE_LOG_HANDGLER.setLevel(logging.DEBUG)
CON_LOG_HANDLER.setLevel(logging.DEBUG)
FORMATTER = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
FILE_LOG_HANDGLER.setFormatter(FORMATTER)
CON_LOG_HANDLER.setFormatter(FORMATTER)
logger.addHandler(FILE_LOG_HANDGLER)
logger.addHandler(CON_LOG_HANDLER)
elif len(sys.argv) == 1:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
FILE_LOG_HANDGLER = logging.FileHandler('/bootflash/ndb_nxos_install.log')
FILE_LOG_HANDGLER.setLevel(logging.DEBUG)
FORMATTER = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
FILE_LOG_HANDGLER.setFormatter(FORMATTER)
logger.addHandler(FILE_LOG_HANDGLER)
else:
print'ndb_nxos_install.py :' +\
' option' + ' ' + sys.argv[1] + ' ' +\
'not recognised.'
print'Usage : python <dir_name:location/ndb_nxos_install.py> [--debug]'
sys.exit(0)
try:
NXOS = cli.cli('show version | inc NXOS | inc version')
PLATFORM = cli.cli('show version | inc ignore-case Chassis')
except BaseException:
logger.error(
'Something went wrong while fetching switch platform and nxos')
sys.exit(0)


def enter_mode():
mode = raw_input('Enter mode(NXAPI):')
if STRICT_LOG_FILE:
print'Validating mode. Please wait..'
if mode == '':
mode = 'NXAPI'
logger.info('Mode: ' + ' ' + mode)
else:
validate_mode(mode)
logger.info('Mode:' + ' ' + mode)


def validate_mode(mode):
if mode.lower() == 'nxapi' or mode.lower() == 'nx':
pass
else:
logger.error('Enter valid mode')
sys.exit(0)


def add_span():
try:
cli.cli('configure terminal ; spanning-tree mode mst')
logger.info('spanning-tree mode mst' +
' command executed successfully')
cli.cli('configure terminal ; vlan configuration 1-3967')
logger.info('vlan configuration 1-3967' +
' command configured successfully')
cli.cli(
'configure terminal ; no spanning-tree vlan 1-3967')
logger.info(
'no spanning-tree vlan 1-3967' +
' command configured successfully')
except BaseException:
logger.error('Something went wrong while' +
'executing spanning tree and vlan configuration')
sys.exit(0)


def install():
if '3548' in PLATFORM or '3048' in PLATFORM:
logger.error(
'Current Switch platform' +
' ' +
'does not support NXAPI')
sys.exit(0)
elif '9000' not in PLATFORM:
platform = validate_platform()
if platform:
get_device_ip()
get_version()
enter_mode()
add_span()
add_banner()
add_hardware_config()
else:
logger.error('Device not supported')
sys.exit(0)
else:
get_device_ip()
get_version()
enter_mode()
add_span()
add_banner()
add_hardware_config()


def validate_platform():
try:
if 'N3K' in cli.cli('sh module'):
return True
else:
return False
except BaseException:
logger.error('Caught exception whle validting switch platform')
sys.exit(0)


def add_banner():
banner_name = raw_input('Enter banner message:')
result = validate_banner(banner_name)
try:
if result:
cli.cli('configure terminal ; banner motd' + ' ' + banner_name)
logger.info('banner added successfully')
else:
banner_name = banner_name[0:] + banner_name[0]
cli.cli('configure terminal ; banner motd' + ' ' + banner_name)
logger.info('banner added successfully')
except BaseException:
logger.error('Something went wrong while adding banner message')
sys.exit(0)


def validate_banner(banner):
if banner == '':
logger.error('Enter valid banner message')
sys.exit(0)
for i in banner[1:]:
if banner[0] == i:
return True
return False


def add_hardware_config():
if '9000' in PLATFORM or '3164' in PLATFORM or '32' in PLATFORM:
if '92' in PLATFORM or ('93' in PLATFORM and 'EX' in PLATFORM):
ing_tcam = raw_input(
'Enter hardware access-list tcam region ing-ifacl:')
validate_tcam(ing_tcam)
if 'double-wide' in ing_tcam:
logger.error('double-wide not supported for platform')
sys.exit(0)
if STRICT_LOG_FILE:
print'Configuration is being added. Please wait..'
try:
cli.cli('configure terminal ; feature nxapi')
logger.info('feature nxapi command executed successfully')
except BaseException:
logger.error('feature nxapi command execution failed')
sys.exit(0)
try:
cli.cli(
'configure terminal' +
' ; hardware access-list tcam region ing-ifacl' +
' ' +
ing_tcam)
logger.info(
'ing-ifacl tcam region' +
' configured successfully')
except BaseException:
logger.error(
'Failed to configure ing-ifacl' +
' Tcam region exceeded')
sys.exit(0)
cli.cli('copy running-config startup-config')
logger.info('Configuration copied to startup')
logger.info('Reload the switch' +
' for configuration to take effect')

else:
ifacl_tcam = raw_input(
'Enter hardware access-list tcam region ifacl:')
validate_tcam(ifacl_tcam)
ipv6_tcam = raw_input(
'Enter hardware access-list tcam region ipv6-ifacl:')
validate_tcam(ipv6_tcam)
mac_tcam = raw_input(
'Enter hardware access-list tcam region mac-ifacl:')
validate_tcam(mac_tcam)
if STRICT_LOG_FILE:
print'Configuration is being added. Please wait..'
try:
cli.cli('configure terminal ; feature nxapi')
logger.info('feature nxapi command executed successfully')
except BaseException:
logger.error('feature nxapi command execution failed')
sys.exit(0)
try:
cli.cli(
'configure terminal' +
' ; hardware access-list tcam region ifacl' +
' ' +
ifacl_tcam)
COMMAND_LIST.append(
'hardware access-list tcam region ifacl')
logger.info(
'ifacl tcam region' +
' configured successfully')
except BaseException:
logger.error(
'Failed to configure ifacl ' +
' .Tcam region exceeded')
sys.exit(0)
try:
cli.cli(
'configure terminal' +
' ; hardware access-list tcam region ipv6-ifacl' +
' ' +
ipv6_tcam)
COMMAND_LIST.append(
'hardware access-list tcam region ipv6-ifacl')
logger.info(
'ipv6-ifacl tcam region' +
' configured successfully')
except BaseException:
remove_config(COMMAND_LIST[0], ifacl_tcam)
logger.error(
'Failed to configure ipv6-ifacl' +
' .Tcam region exceeded')
sys.exit(0)
try:
cli.cli(
'configure terminal' +
' ; hardware access-list tcam region mac-ifacl' +
' ' +
mac_tcam)
COMMAND_LIST.append(
'hardware access-list tcam region mac-ifacl')
logger.info(
'mac-ifacl tcam region' +
' configured successfully')
except BaseException:
remove_config(COMMAND_LIST[0], ifacl_tcam)
remove_config(COMMAND_LIST[1], ipv6_tcam)
logger.error(
'Failed to configure mac-ifacl' +
' .Tcam region exceeded')
sys.exit(0)
cli.cli('copy running-config startup-config')
logger.info('Configuration copied to startup')
logger.info('Reload the switch' +
' for configuration to take effect')

else:
ifacl_tcam = raw_input(
'Enter hardware profile tcam region ifacl:')
validate_tcam(ifacl_tcam)
if STRICT_LOG_FILE:
print'Configuration is being added. Please wait..'
try:
cli.cli('configure terminal ; feature nxapi')
logger.info('feature nxapi command executed successfully')
except BaseException:
logger.error('feature nxapi command executed failed')
sys.exit(0)
try:
cli.cli('configure terminal' +
' ; hardware profile tap-aggregation')
logger.info(
'hardware profile tap-aggregation' +
'command executed successfully')
COMMAND_LIST.append('hardware profile tap-aggregation')
except BaseException:
logger.error('hardware profile tap-aggregation' +
' command execution failed')
sys.exit(0)
try:
cli.cli(
'configure terminal' +
' ; hardware profile tcam region ifacl' +
' ' +
ifacl_tcam)
COMMAND_LIST.append('hardware profile tcam region ifacl')
logger.info(
'ifacl tcam region' +
'configured successfully')
except BaseException:
remove_config(COMMAND_LIST[0], '')
logger.error(
'Failed to configure ifacl' +
' .Tcam region exceeded')
sys.exit(0)
cli.cli('copy running-config startup-config')
logger.info('Configuration copied to startup')
logger.info('Reload the switch' +
' for configuration to take effect')


def remove_config(command, size):
if size == '':
try:
cli.cli('configure terminal ; no' + ' ' + command)
except BaseException:
logger.error('Failed to remove configuration')
sys.exit(0)
else:
try:
cli.cli('configure terminal ; no' + ' ' + command + ' ' + size)
except BaseException:
logger.error('Failed to remove configuration')
sys.exit(0)


def validate_tcam(tcam_value):
if 'double-wide' in tcam_value:
if tcam_value.split(' ')[0].isdigit():
pass
else:
logger.error('Enter valid number for tcam')
sys.exit(0)
if int(tcam_value.split(' ')[0]) % 256 == 0:
pass
else:
logger.error('TCAM size should be in multiple of 256 entries')
sys.exit(0)
elif tcam_value.isdigit():
if int(tcam_value.split(' ')[0]) % 256 == 0:
pass
else:
logger.error('TCAM size should be in multiple of 256 entries')
sys.exit(0)
else:
logger.error('Enter valid number for tcam')
sys.exit(0)


def get_device_ip():
ip_command = cli.cli('sh run interface mgmt0 | grep ip').split(' ')
ip_address = ip_command[4].split('/')[0]
logger.info('Device IP -' + ' ' + ip_address)


def get_version():
list1 = cli.cli('show version | inc NXOS | inc version').split(' ')
version = list1[4].split('\n')[0]
logger.info('NXOS Version -' + ' ' + version)


def main():
install()


if __name__ == '__main__':
main()
6 changes: 3 additions & 3 deletions nx-os/poap/poap.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,10 @@ def set_defaults_and_validate_options():
# Transfer protocol (http, ftp, tftp, scp, etc.)
set_default("transfer_protocol", "scp")
# Directory where the config resides
set_default("config_path", "/var/lib/tftpboot/")
set_default("config_path", "/")
# Target image and its path (single image is default)
set_default("target_system_image", "")
set_default("target_image_path", "/var/lib/tftpboot/")
set_default("target_image_path", "/")
set_default("target_kickstart_image", "")
# Destination image and its path
set_default("destination_path", "/bootflash/")
Expand All @@ -213,7 +213,7 @@ def set_defaults_and_validate_options():
set_default("destination_midway_kickstart_image", "midway_kickstart.bin")

# User app path
set_default("user_app_path", "/var/lib/tftpboot/")
set_default("user_app_path", "/")

# MD5 Verification
set_default("disable_md5", False)
Expand Down