|
32 | 32 |
|
33 | 33 | from datetime import datetime
|
34 | 34 | from napalm.base import NetworkDriver
|
35 |
| -# from napalm.base.utils import py23_compat |
36 | 35 | from napalm.base.netmiko_helpers import netmiko_args
|
37 | 36 | from napalm.base.exceptions import (
|
38 | 37 | MergeConfigException,
|
@@ -361,6 +360,83 @@ def get_config(self, retrieve="all", full=False):
|
361 | 360 | pass
|
362 | 361 | return config
|
363 | 362 |
|
| 363 | + # ok |
| 364 | + def load_merge_candidate(self, filename=None, config=None): |
| 365 | + """Open the candidate config and merge.""" |
| 366 | + if not filename and not config: |
| 367 | + raise MergeConfigException('filename or config param must be provided.') |
| 368 | + |
| 369 | + self.merge_candidate += '\n' # insert one extra line |
| 370 | + if filename is not None: |
| 371 | + with open(filename, "r") as f: |
| 372 | + self.merge_candidate += f.read() |
| 373 | + else: |
| 374 | + self.merge_candidate += config |
| 375 | + |
| 376 | + self.replace = False |
| 377 | + self.loaded = True |
| 378 | + |
| 379 | + # developing |
| 380 | + def load_replace_candidate(self, filename=None, config=None): |
| 381 | + """Open the candidate config and replace.""" |
| 382 | + if not filename and not config: |
| 383 | + raise ReplaceConfigException('filename or config param must be provided.') |
| 384 | + |
| 385 | + self._replace_candidate(filename, config) |
| 386 | + self.replace = True |
| 387 | + self.loaded = True |
| 388 | + |
| 389 | + # ok |
| 390 | + def commit_config(self, message=""): |
| 391 | + """Commit configuration.""" |
| 392 | + if self.loaded: |
| 393 | + try: |
| 394 | + self.backup_file = 'config_' + datetime.now().strftime("%Y%m%d_%H%M") + '.cfg' |
| 395 | + if self._check_file_exists(self.backup_file): |
| 396 | + self._delete_file(self.backup_file) |
| 397 | + self._save_config(self.backup_file) |
| 398 | + if self.replace: |
| 399 | + self._load_config(self.replace_file.split('/')[-1]) |
| 400 | + else: |
| 401 | + self._commit_merge() |
| 402 | + self.merge_candidate = '' # clear the merge buffer |
| 403 | + |
| 404 | + self.changed = True |
| 405 | + self.loaded = False |
| 406 | + self._save_config() |
| 407 | + except Exception as e: |
| 408 | + raise CommitError(str(e)) |
| 409 | + else: |
| 410 | + raise CommitError('No config loaded.') |
| 411 | + |
| 412 | + # ok |
| 413 | + def compare_config(self): |
| 414 | + """Compare candidate config with running.""" |
| 415 | + if self.loaded: |
| 416 | + if not self.replace: |
| 417 | + return self._get_merge_diff() |
| 418 | + # return self.merge_candidate |
| 419 | + diff = self._get_diff(self.replace_file.split('/')[-1]) |
| 420 | + return diff |
| 421 | + return '' |
| 422 | + |
| 423 | + # ok |
| 424 | + def discard_config(self): |
| 425 | + """Discard changes.""" |
| 426 | + if self.loaded: |
| 427 | + self.merge_candidate = '' # clear the buffer |
| 428 | + if self.loaded and self.replace: |
| 429 | + self._delete_file(self.replace_file) |
| 430 | + self.loaded = False |
| 431 | + |
| 432 | + # developing |
| 433 | + def rollback(self): |
| 434 | + """Rollback to previous commit.""" |
| 435 | + if self.changed: |
| 436 | + self._load_config(self.backup_file) |
| 437 | + self.changed = False |
| 438 | + self._save_config() |
| 439 | + |
364 | 440 | # verified
|
365 | 441 | def ping(self, destination, source=c.PING_SOURCE, ttl=c.PING_TTL, timeout=c.PING_TIMEOUT, size=c.PING_SIZE,
|
366 | 442 | count=c.PING_COUNT, vrf=c.PING_VRF):
|
@@ -423,6 +499,7 @@ def ping(self, destination, source=c.PING_SOURCE, ttl=c.PING_TTL, timeout=c.PING
|
423 | 499 | def traceroute(self):
|
424 | 500 | pass
|
425 | 501 |
|
| 502 | + # get information from network device |
426 | 503 | # verified
|
427 | 504 | def get_interfaces(self):
|
428 | 505 | """
|
@@ -680,83 +757,6 @@ def process_counts(tup):
|
680 | 757 | })
|
681 | 758 | return interfaces
|
682 | 759 |
|
683 |
| - # ok |
684 |
| - def load_merge_candidate(self, filename=None, config=None): |
685 |
| - """Open the candidate config and merge.""" |
686 |
| - if not filename and not config: |
687 |
| - raise MergeConfigException('filename or config param must be provided.') |
688 |
| - |
689 |
| - self.merge_candidate += '\n' # insert one extra line |
690 |
| - if filename is not None: |
691 |
| - with open(filename, "r") as f: |
692 |
| - self.merge_candidate += f.read() |
693 |
| - else: |
694 |
| - self.merge_candidate += config |
695 |
| - |
696 |
| - self.replace = False |
697 |
| - self.loaded = True |
698 |
| - |
699 |
| - # developing |
700 |
| - def load_replace_candidate(self, filename=None, config=None): |
701 |
| - """Open the candidate config and replace.""" |
702 |
| - if not filename and not config: |
703 |
| - raise ReplaceConfigException('filename or config param must be provided.') |
704 |
| - |
705 |
| - self._replace_candidate(filename, config) |
706 |
| - self.replace = True |
707 |
| - self.loaded = True |
708 |
| - |
709 |
| - # ok |
710 |
| - def commit_config(self, message=""): |
711 |
| - """Commit configuration.""" |
712 |
| - if self.loaded: |
713 |
| - try: |
714 |
| - self.backup_file = 'config_' + datetime.now().strftime("%Y%m%d_%H%M") + '.cfg' |
715 |
| - if self._check_file_exists(self.backup_file): |
716 |
| - self._delete_file(self.backup_file) |
717 |
| - self._save_config(self.backup_file) |
718 |
| - if self.replace: |
719 |
| - self._load_config(self.replace_file.split('/')[-1]) |
720 |
| - else: |
721 |
| - self._commit_merge() |
722 |
| - self.merge_candidate = '' # clear the merge buffer |
723 |
| - |
724 |
| - self.changed = True |
725 |
| - self.loaded = False |
726 |
| - self._save_config() |
727 |
| - except Exception as e: |
728 |
| - raise CommitError(str(e)) |
729 |
| - else: |
730 |
| - raise CommitError('No config loaded.') |
731 |
| - |
732 |
| - # ok |
733 |
| - def compare_config(self): |
734 |
| - """Compare candidate config with running.""" |
735 |
| - if self.loaded: |
736 |
| - if not self.replace: |
737 |
| - return self._get_merge_diff() |
738 |
| - # return self.merge_candidate |
739 |
| - diff = self._get_diff(self.replace_file.split('/')[-1]) |
740 |
| - return diff |
741 |
| - return '' |
742 |
| - |
743 |
| - # ok |
744 |
| - def discard_config(self): |
745 |
| - """Discard changes.""" |
746 |
| - if self.loaded: |
747 |
| - self.merge_candidate = '' # clear the buffer |
748 |
| - if self.loaded and self.replace: |
749 |
| - self._delete_file(self.replace_file) |
750 |
| - self.loaded = False |
751 |
| - |
752 |
| - # developing |
753 |
| - def rollback(self): |
754 |
| - """Rollback to previous commit.""" |
755 |
| - if self.changed: |
756 |
| - self._load_config(self.backup_file) |
757 |
| - self.changed = False |
758 |
| - self._save_config() |
759 |
| - |
760 | 760 | # verified
|
761 | 761 | def get_lldp_neighbors(self):
|
762 | 762 | """
|
|
0 commit comments