익스트림 스위치 프롬프트의 맨 앞 * 표시는 설정 변경된 내용이 있음을 표시해 준다.
그렇다면 어떤 내용이 변경되었는지는 어떻게 확인 할 수 있을까? 시스코 스위치의 show archive config differences 같은 명령어는 발견(?)하지 못했다. 다만, python스크립트를 사용하면 확인 가능하다.
스크립트 이름은 conf_diff.py 이며, 그 내용은 https://github.com/extremenetworks/ExtremeScripting/blob/master/EXOS/Python/conf_diff/conf_diff.py 에서 확인 할 수 있다.
익스트림 스위치에서 파이썬 스크립트는 load script [script_name] 명령어를 사용하여 실행 할 수 있다.
아래 예는 5-10번 포트를 vlan wolf에 할당한 후에 설정을 저장하지 않았음을 보여준다.
* EXOS-VM.20 # load script conf_diff.py Comparing configurations, please wait... If line starts with '+', the command has been added since last save. If line starts with '-', the command was present in the last save, and has been deleted. Config changes: + configure vlan wolf add ports 5-10 untagged Note that this script has cleared the CLI dirty bit. The configuration has not been saved.
이제 변경된 설정을 저장한다.
* EXOS-VM.21 # save The configuration file primary.cfg already exists. Do you want to save configuration to primary.cfg and overwrite it? (y/N) Yes Saving configuration primary.cfg on master .. done! Configuration saved to primary.cfg successfully.
설정 저장 후 스크립트를 실행해 보면 변경된 내용이 없음을 볼 수 있다.
EXOS-VM.22 # load script conf_diff.py Comparing configurations, please wait... If line starts with '+', the command has been added since last save. If line starts with '-', the command was present in the last save, and has been deleted. Config changes: Note that this script has cleared the CLI dirty bit. The configuration has not been saved.
스크립트가 존재하는지는 ls 명령으로 확인 할 수 있으며, GNS3 EXOS에는 스크립트가 포함되어 있다. 스크립트가 없다면, vi 편집기로 아래 내용을 편집하여 저장하면 사용할 수 있다.
conf_diff.py 화일의 내용은 아래와 같디.
from exsh import clicmd from difflib import Differ from time import time def main(): print "Comparing configurations, please wait..." #create unique names for temp files t_stamp = str(time()) saved_name = '/usr/local/cfg/saved_{0}.temp'.format(t_stamp[:-3]) running_name = '/usr/local/cfg/running_{0}.temp'.format(t_stamp[:-3]) temp_config = 'temp_{0}'.format(t_stamp[:-3]) saved_file = open(saved_name, 'w') running_file = open(running_name, 'w') # find the selected config file output = clicmd('show switch | include "Config Selected"', True).split() selected_config = output[2] selected_config = selected_config[:-4] # save the running config to a temp file, # then convert both config files from XML to human-readable format clicmd("save config {0}".format(temp_config)) saved_file.write(clicmd("debug cfgmgr show configuration file {0}".format(selected_config), True)) running_file.write(clicmd("debug cfgmgr show configuration file {0}".format(temp_config), True)) # set the selected config back, since the save config changed it clicmd("use config {0}".format(selected_config), False) # close the files, and reopen them for reading saved_file.close() running_file.close() saved_file = open(saved_name, 'r') running_file = open(running_name, 'r') # diff the two configs d = Differ() diff = list(d.compare(saved_file.readlines(), running_file.readlines())) # print the results of the diff print " " print "If line starts with \'+\', the command has been added since last save." print "If line starts with \'-\', the command was present in the last save, and has been deleted." print " " print "Config changes:" for line in diff: if line.startswith('+ ') or line.startswith('- '): print line[:-1] print "Note that this script has cleared the CLI dirty bit. The configuration has not been saved." # clean up saved_file.close() running_file.close() # remove files that were opened clicmd("rm {0}".format(saved_name)) clicmd("rm {0}".format(running_name)) clicmd("rm {0}.cfg".format(temp_config)) if __name__ == '__main__': try: main() except SystemExit: # catch SystemExit to prevent EXOS shell from exiting to login prompt pass