1# (c) 2021 Red Hat Inc. 2# 3# This file is part of Ansible 4# 5# Ansible is free software: you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation, either version 3 of the License, or 8# (at your option) any later version. 9# 10# Ansible is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with Ansible. If not, see <http://www.gnu.org/licenses/>. 17 18# Make coding more python3-ish 19 20from __future__ import absolute_import, division, print_function 21 22__metaclass__ = type 23 24from textwrap import dedent 25from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch 26from ansible_collections.cisco.iosxr.plugins.modules import ( 27 iosxr_logging_global, 28) 29from ansible_collections.cisco.iosxr.tests.unit.modules.utils import ( 30 set_module_args, 31) 32from .iosxr_module import TestIosxrModule 33 34 35class TestIosxrLoggingGlobalModule(TestIosxrModule): 36 module = iosxr_logging_global 37 38 def setUp(self): 39 super(TestIosxrLoggingGlobalModule, self).setUp() 40 41 self.mock_get_resource_connection = patch( 42 "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base." 43 "get_resource_connection" 44 ) 45 self.get_resource_connection = ( 46 self.mock_get_resource_connection.start() 47 ) 48 49 self.mock_get_config = patch( 50 "ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.facts.logging_global.logging_global." 51 "Logging_globalFacts.get_config" 52 ) 53 self.get_config = self.mock_get_config.start() 54 55 def tearDown(self): 56 super(TestIosxrLoggingGlobalModule, self).tearDown() 57 self.get_resource_connection.stop() 58 self.get_config.stop() 59 60 def test_iosxr_logging_global_merged_idempotent(self): 61 run_cfg = dedent( 62 """\ 63 logging tls-server test 64 vrf test 65 trustpoint test2 66 tls-hostname test2 67 ! 68 logging file test path test maxfilesize 1024 severity info 69 logging file test2 path test1 maxfilesize 1024 severity debugging 70 logging ipv4 dscp af11 71 logging ipv6 precedence routine 72 logging trap informational 73 logging events filter 74 match test 75 match test1 76 ! 77 logging events threshold 10 78 logging events buffer-size 1024 79 logging events display-location 80 logging events level warnings 81 logging format rfc5424 82 logging archive 83 device disk0 84 severity alerts 85 file-size 1 86 frequency daily 87 archive-size 1 88 archive-length 1 89 ! 90 logging console warning 91 logging console discriminator 92 match1 test 93 nomatch1 test3 94 ! 95 logging history size 10 96 logging monitor errors 97 logging monitor discriminator 98 match1 test1 99 ! 100 logging buffered 2097152 101 logging buffered warnings 102 logging buffered discriminator 103 match2 test 104 ! 105 logging 1.1.1.1 vrf default severity critical port default 106 logging correlator rule test type stateful 107 reissue-nonbistate 108 timeout 5 109 reparent 110 context-correlation 111 ! 112 logging correlator rule test1 type nonstateful 113 timeout 6 114 context-correlation 115 ! 116 logging correlator ruleset test 117 rulename test 118 rulename test1 119 ! 120 logging correlator buffer-size 1024 121 logging localfilesize 1024 122 logging source-interface GigabitEthernet0/0/0/0 vrf test 123 logging hostnameprefix test 124 logging suppress duplicates 125 ! 126 """ 127 ) 128 self.get_config.return_value = run_cfg 129 set_module_args( 130 dict( 131 config=dict( 132 archive=dict( 133 archive_length=1, 134 archive_size=1, 135 device="disk0", 136 file_size=1, 137 frequency="daily", 138 severity="alerts", 139 ), 140 buffered=dict( 141 size=2097152, 142 severity="warnings", 143 discriminator=[ 144 dict(match_params="match2", name="test") 145 ], 146 ), 147 console=dict( 148 severity="warning", 149 discriminator=[ 150 dict(match_params="match1", name="test"), 151 dict(match_params="nomatch1", name="test3"), 152 ], 153 ), 154 correlator=dict( 155 buffer_size=1024, 156 rule_sets=[ 157 dict(name="test", rulename=["test1", "test"]) 158 ], 159 rules=[ 160 dict( 161 rule_name="test", 162 rule_type="stateful", 163 timeout=5, 164 context_correlation=True, 165 reissue_nonbistate=True, 166 reparent=True, 167 ), 168 dict( 169 rule_name="test1", 170 rule_type="nonstateful", 171 timeout=6, 172 context_correlation=True, 173 ), 174 ], 175 ), 176 events=dict( 177 severity="warnings", 178 display_location=True, 179 buffer_size=1024, 180 filter_match=["test1", "test"], 181 threshold=10, 182 ), 183 format=True, 184 files=[ 185 dict( 186 maxfilesize=1024, 187 name="test", 188 path="test", 189 severity="info", 190 ), 191 dict( 192 maxfilesize=1024, 193 name="test2", 194 path="test1", 195 severity="debugging", 196 ), 197 ], 198 history=dict(size=10), 199 hostnameprefix="test", 200 hosts=[ 201 dict( 202 host="1.1.1.1", 203 port="default", 204 severity="critical", 205 vrf="default", 206 ) 207 ], 208 ipv6=dict(precedence="routine"), 209 ipv4=dict(dscp="af11"), 210 localfilesize=1024, 211 monitor=dict( 212 severity="errors", 213 discriminator=[ 214 dict(match_params="match1", name="test1") 215 ], 216 ), 217 source_interfaces=[ 218 dict(interface="GigabitEthernet0/0/0/0", vrf="test") 219 ], 220 suppress=dict(duplicates=True), 221 tls_servers=[ 222 dict( 223 name="test", 224 tls_hostname="test2", 225 trustpoint="test2", 226 vrf="test", 227 ) 228 ], 229 trap=dict(severity="informational"), 230 ), 231 state="merged", 232 ) 233 ) 234 self.execute_module(changed=False, commands=[]) 235 236 def test_iosxr_logging_global_merged(self): 237 set_module_args( 238 dict( 239 config=dict( 240 archive=dict( 241 archive_length=1, 242 archive_size=1, 243 device="disk0", 244 file_size=1, 245 frequency="daily", 246 severity="alerts", 247 ), 248 buffered=dict( 249 size=2097152, 250 severity="warnings", 251 discriminator=[ 252 dict(match_params="match2", name="test") 253 ], 254 ), 255 console=dict( 256 severity="warning", 257 discriminator=[ 258 dict(match_params="match1", name="test"), 259 dict(match_params="nomatch1", name="test3"), 260 ], 261 ), 262 correlator=dict( 263 buffer_size=1024, 264 rule_sets=[ 265 dict(name="test", rulename=["test1", "test"]) 266 ], 267 rules=[ 268 dict( 269 rule_name="test", 270 rule_type="stateful", 271 timeout=5, 272 context_correlation=True, 273 reissue_nonbistate=True, 274 reparent=True, 275 ), 276 dict( 277 rule_name="test1", 278 rule_type="nonstateful", 279 timeout=6, 280 context_correlation=True, 281 ), 282 ], 283 ), 284 events=dict( 285 severity="warnings", 286 display_location=True, 287 buffer_size=1024, 288 filter_match=["test1", "test"], 289 threshold=10, 290 ), 291 format=True, 292 files=[ 293 dict( 294 maxfilesize=1024, 295 name="test", 296 path="test", 297 severity="info", 298 ), 299 dict( 300 maxfilesize=1024, 301 name="test2", 302 path="test1", 303 severity="debugging", 304 ), 305 ], 306 history=dict(state="disabled", size=10), 307 hostnameprefix="test", 308 hosts=[ 309 dict( 310 host="1.1.1.1", 311 port="default", 312 severity="critical", 313 vrf="default", 314 ) 315 ], 316 ipv6=dict(precedence="routine"), 317 ipv4=dict(dscp="af11"), 318 localfilesize=1024, 319 monitor=dict( 320 severity="errors", 321 discriminator=[ 322 dict(match_params="match1", name="test1") 323 ], 324 ), 325 source_interfaces=[ 326 dict(interface="GigabitEthernet0/0/0/0", vrf="test") 327 ], 328 suppress=dict(duplicates=True), 329 tls_servers=[ 330 dict( 331 name="test", 332 tls_hostname="test2", 333 trustpoint="test2", 334 vrf="test", 335 ) 336 ], 337 trap=dict(severity="informational"), 338 ), 339 state="merged", 340 ) 341 ) 342 commands = [ 343 "logging archive device disk0", 344 "logging archive frequency daily", 345 "logging archive severity alerts", 346 "logging archive archive-size 1", 347 "logging archive archive-length 1", 348 "logging archive file-size 1", 349 "logging buffered 2097152", 350 "logging buffered warnings", 351 "logging console warning", 352 "logging correlator buffer-size 1024", 353 "logging events threshold 10", 354 "logging events buffer-size 1024", 355 "logging events display-location", 356 "logging events level warnings", 357 "logging hostnameprefix test", 358 "logging format rfc5424", 359 "logging ipv4 dscp af11", 360 "logging ipv6 precedence routine", 361 "logging localfilesize 1024", 362 "logging suppress duplicates", 363 "logging monitor errors", 364 "logging history size 10", 365 "logging history disable", 366 "logging trap informational", 367 "logging 1.1.1.1 vrf default severity critical port default", 368 "logging file test path test maxfilesize 1024 severity info", 369 "logging file test2 path test1 maxfilesize 1024 severity debugging", 370 "logging source-interface GigabitEthernet0/0/0/0 vrf test", 371 "logging tls-server test tls-hostname test2", 372 "logging tls-server test trustpoint test2", 373 "logging tls-server test vrf test", 374 "logging correlator ruleset test rulename test1", 375 "logging correlator ruleset test rulename test", 376 "logging correlator rule test type stateful timeout 5", 377 "logging correlator rule test type stateful reissue-nonbistate", 378 "logging correlator rule test type stateful reparent", 379 "logging correlator rule test type stateful context-correlation", 380 "logging correlator rule test1 type nonstateful timeout 6", 381 "logging correlator rule test1 type nonstateful context-correlation", 382 "logging events filter match test1", 383 "logging events filter match test", 384 "logging buffered discriminator match2 test", 385 "logging monitor discriminator match1 test1", 386 "logging console discriminator match1 test", 387 "logging console discriminator nomatch1 test3", 388 ] 389 result = self.execute_module(changed=True) 390 self.assertEqual(sorted(result["commands"]), sorted(commands)) 391 392 def test_iosxr_logging_global_deleted(self): 393 self.maxDiff = None 394 run_cfg = dedent( 395 """\ 396 logging tls-server test 397 vrf test 398 trustpoint test2 399 tls-hostname test2 400 ! 401 logging file test path test maxfilesize 1024 severity info 402 logging file test2 path test1 maxfilesize 1024 severity debugging 403 logging ipv4 dscp af11 404 logging ipv6 precedence routine 405 logging trap informational 406 logging events filter 407 match test 408 match test1 409 ! 410 logging events threshold 10 411 logging events buffer-size 1024 412 logging events display-location 413 logging events level warnings 414 logging format rfc5424 415 logging archive 416 device disk0 417 severity alerts 418 file-size 1 419 frequency daily 420 archive-size 1 421 archive-length 1 422 ! 423 logging console warning 424 logging console discriminator 425 match1 test 426 nomatch1 test3 427 ! 428 logging history size 10 429 logging history disable 430 logging monitor errors 431 logging monitor discriminator 432 match1 test1 433 ! 434 logging buffered 2097152 435 logging buffered warnings 436 logging buffered discriminator 437 match2 test 438 ! 439 logging 1.1.1.1 vrf default severity critical port default 440 logging correlator rule test type stateful 441 reissue-nonbistate 442 timeout 5 443 reparent 444 context-correlation 445 ! 446 logging correlator rule test1 type nonstateful 447 timeout 6 448 context-correlation 449 ! 450 logging correlator ruleset test 451 rulename test 452 rulename test1 453 ! 454 logging correlator buffer-size 1024 455 logging localfilesize 1024 456 logging source-interface GigabitEthernet0/0/0/0 vrf test 457 logging hostnameprefix test 458 logging suppress duplicates 459 ! 460 """ 461 ) 462 self.get_config.return_value = run_cfg 463 set_module_args(dict(state="deleted")) 464 commands = [ 465 "no logging archive device disk0", 466 "no logging archive frequency daily", 467 "no logging archive severity alerts", 468 "no logging archive archive-size 1", 469 "no logging archive archive-length 1", 470 "no logging archive file-size 1", 471 "no logging buffered 2097152", 472 "no logging buffered warnings", 473 "no logging console warning", 474 "no logging correlator buffer-size 1024", 475 "no logging events threshold 10", 476 "no logging events buffer-size 1024", 477 "no logging events display-location", 478 "no logging events level warnings", 479 "no logging hostnameprefix test", 480 "no logging format rfc5424", 481 "no logging ipv4 dscp af11", 482 "no logging ipv6 precedence routine", 483 "no logging localfilesize 1024", 484 "no logging suppress duplicates", 485 "no logging monitor errors", 486 "no logging history size 10", 487 "no logging history disable", 488 "no logging trap informational", 489 "no logging 1.1.1.1 vrf default severity critical port default", 490 "no logging file test path test maxfilesize 1024 severity info", 491 "no logging file test2 path test1 maxfilesize 1024 severity debugging", 492 "no logging source-interface GigabitEthernet0/0/0/0 vrf test", 493 "no logging tls-server test", 494 "no logging correlator ruleset test rulename test", 495 "no logging correlator ruleset test rulename test1", 496 "no logging correlator rule test type stateful timeout 5", 497 "no logging correlator rule test type stateful reissue-nonbistate", 498 "no logging correlator rule test type stateful reparent", 499 "no logging correlator rule test type stateful context-correlation", 500 "no logging correlator rule test1 type nonstateful timeout 6", 501 "no logging correlator rule test1 type nonstateful context-correlation", 502 "no logging events filter match test", 503 "no logging events filter match test1", 504 "no logging buffered discriminator match2 test", 505 "no logging monitor discriminator match1 test1", 506 "no logging console discriminator match1 test", 507 "no logging console discriminator nomatch1 test3", 508 ] 509 result = self.execute_module(changed=True) 510 self.assertEqual(sorted(result["commands"]), sorted(commands)) 511 512 def test_iosxr_logging_global_replaced(self): 513 self.maxDiff = None 514 run_cfg = dedent( 515 """\ 516 logging tls-server test 517 vrf test 518 trustpoint test2 519 tls-hostname test2 520 ! 521 logging file test path test maxfilesize 1024 severity info 522 logging file test2 path test1 maxfilesize 1024 severity debugging 523 logging ipv4 dscp af11 524 logging ipv6 precedence routine 525 logging trap informational 526 logging events filter 527 match test 528 match test1 529 ! 530 logging events threshold 10 531 logging events buffer-size 1024 532 logging events display-location 533 logging events level warnings 534 logging format rfc5424 535 logging archive 536 device disk0 537 severity alerts 538 file-size 1 539 frequency daily 540 archive-size 1 541 archive-length 1 542 ! 543 logging console warning 544 logging console discriminator 545 match1 test 546 nomatch1 test3 547 ! 548 logging history size 10 549 logging history disable 550 logging monitor errors 551 logging monitor discriminator 552 match1 test1 553 ! 554 logging buffered 2097152 555 logging buffered warnings 556 logging buffered discriminator 557 match2 test 558 ! 559 logging 1.1.1.1 vrf default severity critical port default 560 logging correlator rule test type stateful 561 reissue-nonbistate 562 timeout 5 563 reparent 564 context-correlation 565 ! 566 logging correlator rule test1 type nonstateful 567 timeout 6 568 context-correlation 569 ! 570 logging correlator ruleset test 571 rulename test 572 rulename test1 573 ! 574 logging correlator buffer-size 1024 575 logging localfilesize 1024 576 logging source-interface GigabitEthernet0/0/0/0 vrf test 577 logging hostnameprefix test 578 logging suppress duplicates 579 ! 580 """ 581 ) 582 self.get_config.return_value = run_cfg 583 set_module_args( 584 dict( 585 config=dict( 586 archive=dict( 587 archive_length=1, 588 archive_size=1, 589 device="disk0", 590 file_size=1, 591 severity="alerts", 592 ), 593 buffered=dict(size=2097152, severity="warnings"), 594 console=dict( 595 severity="warning", 596 discriminator=[ 597 dict(match_params="match1", name="test1") 598 ], 599 ), 600 correlator=dict( 601 buffer_size=1024, 602 rules=[ 603 dict( 604 rule_name="test", 605 rule_type="stateful", 606 timeout=6, 607 context_correlation=True, 608 reissue_nonbistate=True, 609 reparent=True, 610 ) 611 ], 612 ), 613 events=dict( 614 severity="warnings", 615 display_location=True, 616 buffer_size=1024, 617 filter_match=["test1"], 618 threshold=12, 619 ), 620 format=True, 621 files=[ 622 dict( 623 maxfilesize=1024, 624 name="test", 625 path="test1", 626 severity="info", 627 ) 628 ], 629 history=dict(state="disabled", size=10), 630 hostnameprefix="test", 631 hosts=[ 632 dict( 633 host="1.1.1.2", 634 port="default", 635 severity="critical", 636 vrf="default", 637 ) 638 ], 639 ipv6=dict(precedence="routine"), 640 ipv4=dict(dscp="af11"), 641 localfilesize=1024, 642 source_interfaces=[ 643 dict(interface="GigabitEthernet0/0/0/0", vrf="test") 644 ], 645 tls_servers=[ 646 dict( 647 name="test", 648 tls_hostname="test2", 649 trustpoint="test3", 650 vrf="test", 651 ) 652 ], 653 ), 654 state="replaced", 655 ) 656 ) 657 commands = [ 658 "logging console discriminator match1 test1", 659 "logging correlator rule test type stateful timeout 6", 660 "logging events threshold 12", 661 "logging 1.1.1.2 vrf default severity critical port default", 662 "logging file test path test1 maxfilesize 1024 severity info", 663 "logging tls-server test trustpoint test3", 664 "no logging 1.1.1.1 vrf default severity critical port default", 665 "no logging archive frequency daily", 666 "no logging buffered discriminator match2 test", 667 "no logging console discriminator match1 test", 668 "no logging console discriminator nomatch1 test3", 669 "no logging correlator rule test1 type nonstateful context-correlation", 670 "no logging correlator rule test1 type nonstateful timeout 6", 671 "no logging correlator ruleset test rulename test", 672 "no logging correlator ruleset test rulename test1", 673 "no logging events filter match test", 674 "no logging file test2 path test1 maxfilesize 1024 severity debugging", 675 "no logging monitor discriminator match1 test1", 676 "no logging monitor errors", 677 "no logging suppress duplicates", 678 "no logging trap informational", 679 ] 680 result = self.execute_module(changed=True) 681 self.assertEqual(sorted(result["commands"]), sorted(commands)) 682 683 def test_iosxr_logging_global_rendered(self): 684 self.maxDiff = None 685 set_module_args( 686 dict( 687 config=dict( 688 archive=dict( 689 archive_length=1, 690 archive_size=1, 691 device="disk0", 692 file_size=1, 693 frequency="daily", 694 severity="alerts", 695 ), 696 buffered=dict( 697 size=2097152, 698 severity="warnings", 699 discriminator=[ 700 dict(match_params="match2", name="test") 701 ], 702 ), 703 console=dict( 704 severity="warning", 705 discriminator=[ 706 dict(match_params="match1", name="test"), 707 dict(match_params="nomatch1", name="test3"), 708 ], 709 ), 710 correlator=dict( 711 buffer_size=1024, 712 rule_sets=[ 713 dict(name="test", rulename=["test1", "test"]) 714 ], 715 rules=[ 716 dict( 717 rule_name="test", 718 rule_type="stateful", 719 timeout=5, 720 context_correlation=True, 721 reissue_nonbistate=True, 722 reparent=True, 723 ), 724 dict( 725 rule_name="test1", 726 rule_type="nonstateful", 727 timeout=6, 728 context_correlation=True, 729 ), 730 ], 731 ), 732 events=dict( 733 severity="warnings", 734 display_location=True, 735 buffer_size=1024, 736 filter_match=["test1", "test"], 737 threshold=10, 738 ), 739 format=True, 740 files=[ 741 dict( 742 maxfilesize=1024, 743 name="test", 744 path="test", 745 severity="info", 746 ), 747 dict( 748 maxfilesize=1024, 749 name="test2", 750 path="test1", 751 severity="debugging", 752 ), 753 ], 754 history=dict(state="disabled", size=10), 755 hostnameprefix="test", 756 hosts=[ 757 dict( 758 host="1.1.1.1", 759 port="default", 760 severity="critical", 761 vrf="default", 762 ) 763 ], 764 ipv6=dict(precedence="routine"), 765 ipv4=dict(dscp="af11"), 766 localfilesize=1024, 767 monitor=dict( 768 severity="errors", 769 discriminator=[ 770 dict(match_params="match1", name="test1") 771 ], 772 ), 773 source_interfaces=[ 774 dict(interface="GigabitEthernet0/0/0/0", vrf="test") 775 ], 776 suppress=dict(duplicates=True), 777 tls_servers=[ 778 dict( 779 name="test", 780 tls_hostname="test2", 781 trustpoint="test2", 782 vrf="test", 783 ) 784 ], 785 trap=dict(severity="informational"), 786 ), 787 state="rendered", 788 ) 789 ) 790 commands = [ 791 "logging archive device disk0", 792 "logging archive frequency daily", 793 "logging archive severity alerts", 794 "logging archive archive-size 1", 795 "logging archive archive-length 1", 796 "logging archive file-size 1", 797 "logging buffered 2097152", 798 "logging buffered warnings", 799 "logging console warning", 800 "logging correlator buffer-size 1024", 801 "logging events threshold 10", 802 "logging events buffer-size 1024", 803 "logging events display-location", 804 "logging events level warnings", 805 "logging hostnameprefix test", 806 "logging format rfc5424", 807 "logging ipv4 dscp af11", 808 "logging ipv6 precedence routine", 809 "logging localfilesize 1024", 810 "logging suppress duplicates", 811 "logging monitor errors", 812 "logging history size 10", 813 "logging history disable", 814 "logging trap informational", 815 "logging 1.1.1.1 vrf default severity critical port default", 816 "logging file test path test maxfilesize 1024 severity info", 817 "logging file test2 path test1 maxfilesize 1024 severity debugging", 818 "logging source-interface GigabitEthernet0/0/0/0 vrf test", 819 "logging tls-server test tls-hostname test2", 820 "logging tls-server test trustpoint test2", 821 "logging tls-server test vrf test", 822 "logging correlator ruleset test rulename test1", 823 "logging correlator ruleset test rulename test", 824 "logging correlator rule test type stateful timeout 5", 825 "logging correlator rule test type stateful reissue-nonbistate", 826 "logging correlator rule test type stateful reparent", 827 "logging correlator rule test type stateful context-correlation", 828 "logging correlator rule test1 type nonstateful timeout 6", 829 "logging correlator rule test1 type nonstateful context-correlation", 830 "logging events filter match test1", 831 "logging events filter match test", 832 "logging buffered discriminator match2 test", 833 "logging monitor discriminator match1 test1", 834 "logging console discriminator match1 test", 835 "logging console discriminator nomatch1 test3", 836 ] 837 result = self.execute_module(changed=False) 838 self.assertEqual(sorted(result["rendered"]), sorted(commands)) 839 840 def test_iosxr_logging_global_overridden(self): 841 self.maxDiff = None 842 run_cfg = dedent( 843 """\ 844 logging tls-server test 845 vrf test 846 trustpoint test2 847 tls-hostname test2 848 ! 849 logging file test path test maxfilesize 1024 severity info 850 logging file test2 path test1 maxfilesize 1024 severity debugging 851 logging ipv4 dscp af11 852 logging ipv6 precedence routine 853 logging trap informational 854 logging events filter 855 match test 856 match test1 857 ! 858 logging events threshold 10 859 logging events buffer-size 1024 860 logging events display-location 861 logging events level warnings 862 logging format rfc5424 863 logging archive 864 device disk0 865 severity alerts 866 file-size 1 867 frequency daily 868 archive-size 1 869 archive-length 1 870 ! 871 logging console warning 872 logging console discriminator 873 match1 test 874 nomatch1 test3 875 ! 876 logging history size 10 877 logging history disable 878 logging monitor errors 879 logging monitor discriminator 880 match1 test1 881 ! 882 logging buffered 2097152 883 logging buffered warnings 884 logging buffered discriminator 885 match2 test 886 ! 887 logging 1.1.1.1 vrf default severity critical port default 888 logging correlator rule test type stateful 889 reissue-nonbistate 890 timeout 5 891 reparent 892 context-correlation 893 ! 894 logging correlator rule test1 type nonstateful 895 timeout 6 896 context-correlation 897 ! 898 logging correlator ruleset test 899 rulename test 900 rulename test1 901 ! 902 logging correlator buffer-size 1024 903 logging localfilesize 1024 904 logging source-interface GigabitEthernet0/0/0/0 vrf test 905 logging hostnameprefix test 906 logging suppress duplicates 907 ! 908 """ 909 ) 910 self.get_config.return_value = run_cfg 911 set_module_args( 912 dict( 913 config=dict( 914 archive=dict( 915 archive_length=1, 916 archive_size=1, 917 device="disk0", 918 file_size=1, 919 severity="alerts", 920 ), 921 buffered=dict(size=2097152, severity="warnings"), 922 console=dict( 923 severity="warning", 924 discriminator=[ 925 dict(match_params="match1", name="test1") 926 ], 927 ), 928 correlator=dict( 929 buffer_size=1024, 930 rules=[ 931 dict( 932 rule_name="test", 933 rule_type="stateful", 934 timeout=6, 935 context_correlation=True, 936 reissue_nonbistate=True, 937 reparent=True, 938 ) 939 ], 940 ), 941 events=dict( 942 severity="warnings", 943 display_location=True, 944 buffer_size=1024, 945 filter_match=["test1"], 946 threshold=12, 947 ), 948 format=True, 949 files=[ 950 dict( 951 maxfilesize=1024, 952 name="test", 953 path="test1", 954 severity="info", 955 ) 956 ], 957 history=dict(state="disabled", size=10), 958 hostnameprefix="test", 959 hosts=[ 960 dict( 961 host="1.1.1.2", 962 port="default", 963 severity="critical", 964 vrf="default", 965 ) 966 ], 967 ipv6=dict(precedence="routine"), 968 ipv4=dict(dscp="af11"), 969 localfilesize=1024, 970 source_interfaces=[ 971 dict(interface="GigabitEthernet0/0/0/0", vrf="test") 972 ], 973 tls_servers=[ 974 dict( 975 name="test", 976 tls_hostname="test2", 977 trustpoint="test3", 978 vrf="test", 979 ) 980 ], 981 ), 982 state="overridden", 983 ) 984 ) 985 commands = [ 986 "logging console discriminator match1 test1", 987 "logging correlator rule test type stateful timeout 6", 988 "logging events threshold 12", 989 "logging 1.1.1.2 vrf default severity critical port default", 990 "logging file test path test1 maxfilesize 1024 severity info", 991 "logging tls-server test trustpoint test3", 992 "no logging 1.1.1.1 vrf default severity critical port default", 993 "no logging archive frequency daily", 994 "no logging buffered discriminator match2 test", 995 "no logging console discriminator match1 test", 996 "no logging console discriminator nomatch1 test3", 997 "no logging correlator rule test1 type nonstateful context-correlation", 998 "no logging correlator rule test1 type nonstateful timeout 6", 999 "no logging correlator ruleset test rulename test", 1000 "no logging correlator ruleset test rulename test1", 1001 "no logging events filter match test", 1002 "no logging file test2 path test1 maxfilesize 1024 severity debugging", 1003 "no logging monitor discriminator match1 test1", 1004 "no logging monitor errors", 1005 "no logging suppress duplicates", 1006 "no logging trap informational", 1007 ] 1008 result = self.execute_module(changed=True) 1009 self.assertEqual(sorted(result["commands"]), sorted(commands)) 1010 1011 def test_iosxr_logging_global_gathered(self): 1012 run_cfg = dedent( 1013 """\ 1014 logging tls-server test 1015 vrf test 1016 trustpoint test2 1017 tls-hostname test2 1018 ! 1019 logging file test path test maxfilesize 1024 severity info 1020 logging ipv4 dscp af11 1021 logging ipv6 precedence routine 1022 logging trap informational 1023 logging events filter 1024 match test 1025 ! 1026 logging events threshold 10 1027 logging events buffer-size 1024 1028 logging events display-location 1029 logging events level warnings 1030 logging format rfc5424 1031 logging archive 1032 device disk0 1033 severity alerts 1034 file-size 1 1035 frequency daily 1036 archive-size 1 1037 archive-length 1 1038 ! 1039 logging console warning 1040 logging console discriminator 1041 match1 test 1042 ! 1043 logging history size 10 1044 logging history disable 1045 logging monitor errors 1046 logging monitor discriminator 1047 match1 test1 1048 ! 1049 logging buffered 2097152 1050 logging buffered warnings 1051 logging buffered discriminator 1052 match2 test 1053 ! 1054 logging 1.1.1.1 vrf default severity critical port default 1055 logging correlator rule test type stateful 1056 reissue-nonbistate 1057 timeout 5 1058 reparent 1059 context-correlation 1060 ! 1061 logging correlator ruleset test 1062 rulename test 1063 ! 1064 logging correlator buffer-size 1024 1065 logging localfilesize 1024 1066 logging source-interface GigabitEthernet0/0/0/0 vrf test 1067 logging hostnameprefix test 1068 logging suppress duplicates 1069 ! 1070 """ 1071 ) 1072 self.get_config.return_value = run_cfg 1073 set_module_args(dict(state="gathered")) 1074 gathered = { 1075 "archive": { 1076 "archive_length": 1, 1077 "archive_size": 1, 1078 "device": "disk0", 1079 "file_size": 1, 1080 "frequency": "daily", 1081 "severity": "alerts", 1082 }, 1083 "buffered": { 1084 "discriminator": [{"match_params": "match2", "name": "test"}], 1085 "severity": "warnings", 1086 "size": 2097152, 1087 }, 1088 "console": { 1089 "discriminator": [{"match_params": "match1", "name": "test"}], 1090 "severity": "warning", 1091 }, 1092 "correlator": { 1093 "buffer_size": 1024, 1094 "rule_sets": [{"name": "test", "rulename": ["test"]}], 1095 "rules": [ 1096 { 1097 "context_correlation": True, 1098 "reissue_nonbistate": True, 1099 "reparent": True, 1100 "rule_name": "test", 1101 "rule_type": "stateful", 1102 "timeout": 5, 1103 } 1104 ], 1105 }, 1106 "events": { 1107 "buffer_size": 1024, 1108 "display_location": True, 1109 "filter_match": ["test"], 1110 "severity": "warnings", 1111 "threshold": 10, 1112 }, 1113 "files": [ 1114 { 1115 "maxfilesize": 1024, 1116 "name": "test", 1117 "path": "test", 1118 "severity": "info", 1119 } 1120 ], 1121 "format": True, 1122 "history": {"state": "disabled", "size": 10}, 1123 "hostnameprefix": "test", 1124 "hosts": [ 1125 { 1126 "host": "1.1.1.1", 1127 "port": "default", 1128 "severity": "critical", 1129 "vrf": "default", 1130 } 1131 ], 1132 "ipv4": {"dscp": "af11"}, 1133 "ipv6": {"precedence": "routine"}, 1134 "localfilesize": 1024, 1135 "monitor": { 1136 "discriminator": [{"match_params": "match1", "name": "test1"}], 1137 "severity": "errors", 1138 }, 1139 "source_interfaces": [ 1140 {"interface": "GigabitEthernet0/0/0/0", "vrf": "test"} 1141 ], 1142 "suppress": {"duplicates": True}, 1143 "tls_servers": [ 1144 { 1145 "name": "test", 1146 "tls_hostname": "test2", 1147 "trustpoint": "test2", 1148 "vrf": "test", 1149 } 1150 ], 1151 "trap": {"severity": "informational"}, 1152 } 1153 result = self.execute_module(changed=False) 1154 self.assertEqual(gathered, result["gathered"]) 1155 1156 def test_iosxr_logging_global_parsed(self): 1157 set_module_args( 1158 dict( 1159 running_config="logging tls-server test\n vrf test\n trustpoint test2\n tls-hostname test2" 1160 "\n!\nlogging file test path test maxfilesize 1024 severity info\nlogging ipv4 dscp" 1161 " af11\nlogging ipv6 precedence routine\nlogging trap informational\nlogging events" 1162 " filter\n match test1\n!\nlogging events threshold " 1163 "10\nlogging events buffer-size 1024\nlogging events display-location" 1164 "\nlogging events level warnings" 1165 "\nlogging format rfc5424\nlogging archive\n device disk0" 1166 "\n severity alerts\n file-size 1\n frequency " 1167 "daily\n archive-size 1\n archive-length 1\n!\nlogging console " 1168 "warning\nlogging console discriminator\n " 1169 "match1 test\n!\nlogging history size " 1170 "10\nlogging history disable\nlogging monitor errors" 1171 "\nlogging monitor discriminator\n match1 test1\n!" 1172 "\nlogging buffered 2097152\nlogging buffered warnings\n" 1173 "logging buffered discriminator\n match2 test\n!\nlogging " 1174 "1.1.1.1 vrf default severity critical port default" 1175 "\nlogging correlator rule test type stateful\n reissue-nonbistate\n " 1176 "timeout 5\n reparent\n context-correlation\n!" 1177 "\n!\nlogging correlator ruleset test\n rulename test1" 1178 "\n!\nlogging correlator buffer-size 1024\nlogging " 1179 "localfilesize 1024\nlogging source-interface" 1180 " GigabitEthernet0/0/0/0 vrf test\nlogging hostnameprefix " 1181 "test\nlogging suppress duplicates", 1182 state="parsed", 1183 ) 1184 ) 1185 result = self.execute_module(changed=False) 1186 parsed_list = { 1187 "archive": { 1188 "archive_length": 1, 1189 "archive_size": 1, 1190 "device": "disk0", 1191 "file_size": 1, 1192 "frequency": "daily", 1193 "severity": "alerts", 1194 }, 1195 "buffered": { 1196 "discriminator": [{"match_params": "match2", "name": "test"}], 1197 "severity": "warnings", 1198 "size": 2097152, 1199 }, 1200 "console": { 1201 "discriminator": [{"match_params": "match1", "name": "test"}], 1202 "severity": "warning", 1203 }, 1204 "correlator": { 1205 "buffer_size": 1024, 1206 "rule_sets": [{"name": "test", "rulename": ["test1"]}], 1207 "rules": [ 1208 { 1209 "context_correlation": True, 1210 "reissue_nonbistate": True, 1211 "reparent": True, 1212 "rule_name": "test", 1213 "rule_type": "stateful", 1214 "timeout": 5, 1215 } 1216 ], 1217 }, 1218 "events": { 1219 "buffer_size": 1024, 1220 "display_location": True, 1221 "filter_match": ["test1"], 1222 "severity": "warnings", 1223 "threshold": 10, 1224 }, 1225 "files": [ 1226 { 1227 "maxfilesize": 1024, 1228 "name": "test", 1229 "path": "test", 1230 "severity": "info", 1231 } 1232 ], 1233 "format": True, 1234 "history": {"state": "disabled", "size": 10}, 1235 "hostnameprefix": "test", 1236 "hosts": [ 1237 { 1238 "host": "1.1.1.1", 1239 "port": "default", 1240 "severity": "critical", 1241 "vrf": "default", 1242 } 1243 ], 1244 "ipv4": {"dscp": "af11"}, 1245 "ipv6": {"precedence": "routine"}, 1246 "localfilesize": 1024, 1247 "monitor": { 1248 "discriminator": [{"match_params": "match1", "name": "test1"}], 1249 "severity": "errors", 1250 }, 1251 "source_interfaces": [ 1252 {"interface": "GigabitEthernet0/0/0/0", "vrf": "test"} 1253 ], 1254 "suppress": {"duplicates": True}, 1255 "tls_servers": [ 1256 { 1257 "name": "test", 1258 "tls_hostname": "test2", 1259 "trustpoint": "test2", 1260 "vrf": "test", 1261 } 1262 ], 1263 "trap": {"severity": "informational"}, 1264 } 1265 1266 self.assertEqual(parsed_list, result["parsed"]) 1267