asa_upgrade.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env python
  2. """Script to upgrade a Cisco ASA."""
  3. import sys
  4. from datetime import datetime
  5. from getpass import getpass
  6. from netmiko import ConnectHandler, FileTransfer
  7. def asa_scp_handler(ssh_conn, cmd='ssh scopy enable', mode='enable'):
  8. """Enable/disable SCP on Cisco ASA."""
  9. if mode == 'disable':
  10. cmd = 'no ' + cmd
  11. return ssh_conn.send_config_set([cmd])
  12. def main():
  13. """Script to upgrade a Cisco ASA."""
  14. ip_addr = raw_input("Enter ASA IP address: ")
  15. my_pass = getpass()
  16. start_time = datetime.now()
  17. print ">>>> {}".format(start_time)
  18. net_device = {
  19. 'device_type': 'cisco_asa',
  20. 'ip': ip_addr,
  21. 'username': 'admin',
  22. 'password': my_pass,
  23. 'secret': my_pass,
  24. 'port': 22,
  25. }
  26. print "\nLogging in to ASA"
  27. ssh_conn = ConnectHandler(**net_device)
  28. print
  29. # ADJUST TO TRANSFER IMAGE FILE
  30. dest_file_system = 'disk0:'
  31. source_file = 'test1.txt'
  32. dest_file = 'test1.txt'
  33. alt_dest_file = 'asa825-59-k8.bin'
  34. scp_changed = False
  35. with FileTransfer(ssh_conn, source_file=source_file, dest_file=dest_file,
  36. file_system=dest_file_system) as scp_transfer:
  37. if not scp_transfer.check_file_exists():
  38. if not scp_transfer.verify_space_available():
  39. raise ValueError("Insufficient space available on remote device")
  40. print "Enabling SCP"
  41. output = asa_scp_handler(ssh_conn, mode='enable')
  42. print output
  43. print "\nTransferring file\n"
  44. scp_transfer.transfer_file()
  45. print "Disabling SCP"
  46. output = asa_scp_handler(ssh_conn, mode='disable')
  47. print output
  48. print "\nVerifying file"
  49. if scp_transfer.verify_file():
  50. print "Source and destination MD5 matches"
  51. else:
  52. raise ValueError("MD5 failure between source and destination files")
  53. print "\nSending boot commands"
  54. full_file_name = "{}/{}".format(dest_file_system, alt_dest_file)
  55. boot_cmd = 'boot system {}'.format(full_file_name)
  56. output = ssh_conn.send_config_set([boot_cmd])
  57. print output
  58. print "\nVerifying state"
  59. output = ssh_conn.send_command('show boot')
  60. print output
  61. # UNCOMMENT TO PERFORM WR MEM AND RELOAD
  62. #print "\nWrite mem and reload"
  63. #output = ssh_conn.send_command_expect('write mem')
  64. #output += ssh_conn.send_command('reload')
  65. #output += ssh_conn.send_command('y')
  66. #print output
  67. print "\n>>>> {}".format(datetime.now() - start_time)
  68. print
  69. if __name__ == "__main__":
  70. main()