1#!/usr/local/bin/python3.8 2from __future__ import (absolute_import, division, print_function) 3# Copyright 2019-2020 Fortinet, Inc. 4# 5# This program 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# This program 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 this program. If not, see <https://www.gnu.org/licenses/>. 17 18__metaclass__ = type 19 20ANSIBLE_METADATA = {'status': ['preview'], 21 'supported_by': 'community', 22 'metadata_version': '1.1'} 23 24DOCUMENTATION = ''' 25--- 26module: fortios_log_syslogd3_setting 27short_description: Global settings for remote syslog server in Fortinet's FortiOS and FortiGate. 28description: 29 - This module is able to configure a FortiGate or FortiOS (FOS) device by allowing the 30 user to set and modify log_syslogd3 feature and setting category. 31 Examples include all parameters and values need to be adjusted to datasources before usage. 32 Tested with FOS v6.0.0 33version_added: "2.10" 34author: 35 - Link Zheng (@chillancezen) 36 - Jie Xue (@JieX19) 37 - Hongbin Lu (@fgtdev-hblu) 38 - Frank Shen (@frankshen01) 39 - Miguel Angel Munoz (@mamunozgonzalez) 40 - Nicolas Thomas (@thomnico) 41notes: 42 - Legacy fortiosapi has been deprecated, httpapi is the preferred way to run playbooks 43 44requirements: 45 - ansible>=2.9.0 46options: 47 access_token: 48 description: 49 - Token-based authentication. 50 Generated from GUI of Fortigate. 51 type: str 52 required: false 53 enable_log: 54 description: 55 - Enable/Disable logging for task. 56 type: bool 57 required: false 58 default: false 59 vdom: 60 description: 61 - Virtual domain, among those defined previously. A vdom is a 62 virtual instance of the FortiGate that can be configured and 63 used as a different unit. 64 type: str 65 default: root 66 67 log_syslogd3_setting: 68 description: 69 - Global settings for remote syslog server. 70 default: null 71 type: dict 72 suboptions: 73 certificate: 74 description: 75 - Certificate used to communicate with Syslog server. Source certificate.local.name. 76 type: str 77 custom_field_name: 78 description: 79 - Custom field name for CEF format logging. 80 type: list 81 suboptions: 82 custom: 83 description: 84 - Field custom name. 85 type: str 86 id: 87 description: 88 - Entry ID. 89 required: true 90 type: int 91 name: 92 description: 93 - Field name. 94 type: str 95 enc_algorithm: 96 description: 97 - Enable/disable reliable syslogging with TLS encryption. 98 type: str 99 choices: 100 - high-medium 101 - high 102 - low 103 - disable 104 facility: 105 description: 106 - Remote syslog facility. 107 type: str 108 choices: 109 - kernel 110 - user 111 - mail 112 - daemon 113 - auth 114 - syslog 115 - lpr 116 - news 117 - uucp 118 - cron 119 - authpriv 120 - ftp 121 - ntp 122 - audit 123 - alert 124 - clock 125 - local0 126 - local1 127 - local2 128 - local3 129 - local4 130 - local5 131 - local6 132 - local7 133 format: 134 description: 135 - Log format. 136 type: str 137 choices: 138 - default 139 - csv 140 - cef 141 - rfc5424 142 interface: 143 description: 144 - Specify outgoing interface to reach server. Source system.interface.name. 145 type: str 146 interface_select_method: 147 description: 148 - Specify how to select outgoing interface to reach server. 149 type: str 150 choices: 151 - auto 152 - sdwan 153 - specify 154 max_log_rate: 155 description: 156 - Syslog maximum log rate in MBps (0 = unlimited). 157 type: int 158 mode: 159 description: 160 - Remote syslog logging over UDP/Reliable TCP. 161 type: str 162 choices: 163 - udp 164 - legacy-reliable 165 - reliable 166 port: 167 description: 168 - Server listen port. 169 type: int 170 priority: 171 description: 172 - Set log transmission priority. 173 type: str 174 choices: 175 - default 176 - low 177 server: 178 description: 179 - Address of remote syslog server. 180 type: str 181 source_ip: 182 description: 183 - Source IP address of syslog. 184 type: str 185 ssl_min_proto_version: 186 description: 187 - Minimum supported protocol version for SSL/TLS connections . 188 type: str 189 choices: 190 - default 191 - SSLv3 192 - TLSv1 193 - TLSv1-1 194 - TLSv1-2 195 status: 196 description: 197 - Enable/disable remote syslog logging. 198 type: str 199 choices: 200 - enable 201 - disable 202 syslog_type: 203 description: 204 - Hidden setting index of Syslog. 205 type: int 206''' 207 208EXAMPLES = ''' 209- hosts: fortigates 210 collections: 211 - fortinet.fortios 212 connection: httpapi 213 vars: 214 vdom: "root" 215 ansible_httpapi_use_ssl: yes 216 ansible_httpapi_validate_certs: no 217 ansible_httpapi_port: 443 218 tasks: 219 - name: Global settings for remote syslog server. 220 fortios_log_syslogd3_setting: 221 vdom: "{{ vdom }}" 222 log_syslogd3_setting: 223 certificate: "<your_own_value> (source certificate.local.name)" 224 custom_field_name: 225 - 226 custom: "<your_own_value>" 227 id: "6" 228 name: "default_name_7" 229 enc_algorithm: "high-medium" 230 facility: "kernel" 231 format: "default" 232 interface: "<your_own_value> (source system.interface.name)" 233 interface_select_method: "auto" 234 max_log_rate: "13" 235 mode: "udp" 236 port: "15" 237 priority: "default" 238 server: "192.168.100.40" 239 source_ip: "84.230.14.43" 240 ssl_min_proto_version: "default" 241 status: "enable" 242 syslog_type: "21" 243 244''' 245 246RETURN = ''' 247build: 248 description: Build number of the fortigate image 249 returned: always 250 type: str 251 sample: '1547' 252http_method: 253 description: Last method used to provision the content into FortiGate 254 returned: always 255 type: str 256 sample: 'PUT' 257http_status: 258 description: Last result given by FortiGate on last operation applied 259 returned: always 260 type: str 261 sample: "200" 262mkey: 263 description: Master key (id) used in the last call to FortiGate 264 returned: success 265 type: str 266 sample: "id" 267name: 268 description: Name of the table used to fulfill the request 269 returned: always 270 type: str 271 sample: "urlfilter" 272path: 273 description: Path of the table used to fulfill the request 274 returned: always 275 type: str 276 sample: "webfilter" 277revision: 278 description: Internal revision number 279 returned: always 280 type: str 281 sample: "17.0.2.10658" 282serial: 283 description: Serial number of the unit 284 returned: always 285 type: str 286 sample: "FGVMEVYYQT3AB5352" 287status: 288 description: Indication of the operation's result 289 returned: always 290 type: str 291 sample: "success" 292vdom: 293 description: Virtual domain used 294 returned: always 295 type: str 296 sample: "root" 297version: 298 description: Version of the FortiGate 299 returned: always 300 type: str 301 sample: "v5.6.3" 302 303''' 304from ansible.module_utils.basic import AnsibleModule 305from ansible.module_utils.connection import Connection 306from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler 307from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi 308from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec 309from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning 310from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG 311from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison 312from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize 313 314 315def filter_log_syslogd3_setting_data(json): 316 option_list = ['certificate', 'custom_field_name', 'enc_algorithm', 317 'facility', 'format', 'interface', 318 'interface_select_method', 'max_log_rate', 'mode', 319 'port', 'priority', 'server', 320 'source_ip', 'ssl_min_proto_version', 'status', 321 'syslog_type'] 322 dictionary = {} 323 324 for attribute in option_list: 325 if attribute in json and json[attribute] is not None: 326 dictionary[attribute] = json[attribute] 327 328 return dictionary 329 330 331def underscore_to_hyphen(data): 332 if isinstance(data, list): 333 for i, elem in enumerate(data): 334 data[i] = underscore_to_hyphen(elem) 335 elif isinstance(data, dict): 336 new_data = {} 337 for k, v in data.items(): 338 new_data[k.replace('_', '-')] = underscore_to_hyphen(v) 339 data = new_data 340 341 return data 342 343 344def log_syslogd3_setting(data, fos): 345 vdom = data['vdom'] 346 log_syslogd3_setting_data = data['log_syslogd3_setting'] 347 filtered_data = underscore_to_hyphen(filter_log_syslogd3_setting_data(log_syslogd3_setting_data)) 348 349 return fos.set('log.syslogd3', 350 'setting', 351 data=filtered_data, 352 vdom=vdom) 353 354 355def is_successful_status(status): 356 return status['status'] == "success" or \ 357 status['http_method'] == "DELETE" and status['http_status'] == 404 358 359 360def fortios_log_syslogd3(data, fos): 361 362 if data['log_syslogd3_setting']: 363 resp = log_syslogd3_setting(data, fos) 364 else: 365 fos._module.fail_json(msg='missing task body: %s' % ('log_syslogd3_setting')) 366 367 return not is_successful_status(resp), \ 368 resp['status'] == "success" and \ 369 (resp['revision_changed'] if 'revision_changed' in resp else True), \ 370 resp 371 372 373versioned_schema = { 374 "type": "dict", 375 "children": { 376 "status": { 377 "type": "string", 378 "options": [ 379 { 380 "value": "enable", 381 "revisions": { 382 "v6.0.0": True, 383 "v7.0.0": True, 384 "v6.0.5": True, 385 "v6.4.4": True, 386 "v6.4.0": True, 387 "v6.4.1": True, 388 "v6.2.0": True, 389 "v6.2.3": True, 390 "v6.2.5": True, 391 "v6.2.7": True, 392 "v6.0.11": True 393 } 394 }, 395 { 396 "value": "disable", 397 "revisions": { 398 "v6.0.0": True, 399 "v7.0.0": True, 400 "v6.0.5": True, 401 "v6.4.4": True, 402 "v6.4.0": True, 403 "v6.4.1": True, 404 "v6.2.0": True, 405 "v6.2.3": True, 406 "v6.2.5": True, 407 "v6.2.7": True, 408 "v6.0.11": True 409 } 410 } 411 ], 412 "revisions": { 413 "v6.0.0": True, 414 "v7.0.0": True, 415 "v6.0.5": True, 416 "v6.4.4": True, 417 "v6.4.0": True, 418 "v6.4.1": True, 419 "v6.2.0": True, 420 "v6.2.3": True, 421 "v6.2.5": True, 422 "v6.2.7": True, 423 "v6.0.11": True 424 } 425 }, 426 "custom_field_name": { 427 "type": "list", 428 "children": { 429 "custom": { 430 "type": "string", 431 "revisions": { 432 "v6.0.0": True, 433 "v7.0.0": True, 434 "v6.0.5": True, 435 "v6.4.4": True, 436 "v6.4.0": True, 437 "v6.4.1": True, 438 "v6.2.0": True, 439 "v6.2.3": True, 440 "v6.2.5": True, 441 "v6.2.7": True, 442 "v6.0.11": True 443 } 444 }, 445 "id": { 446 "type": "integer", 447 "revisions": { 448 "v6.0.0": True, 449 "v7.0.0": True, 450 "v6.0.5": True, 451 "v6.4.4": True, 452 "v6.4.0": True, 453 "v6.4.1": True, 454 "v6.2.0": True, 455 "v6.2.3": True, 456 "v6.2.5": True, 457 "v6.2.7": True, 458 "v6.0.11": True 459 } 460 }, 461 "name": { 462 "type": "string", 463 "revisions": { 464 "v6.0.0": True, 465 "v7.0.0": True, 466 "v6.0.5": True, 467 "v6.4.4": True, 468 "v6.4.0": True, 469 "v6.4.1": True, 470 "v6.2.0": True, 471 "v6.2.3": True, 472 "v6.2.5": True, 473 "v6.2.7": True, 474 "v6.0.11": True 475 } 476 } 477 }, 478 "revisions": { 479 "v6.0.0": True, 480 "v7.0.0": True, 481 "v6.0.5": True, 482 "v6.4.4": True, 483 "v6.4.0": True, 484 "v6.4.1": True, 485 "v6.2.0": True, 486 "v6.2.3": True, 487 "v6.2.5": True, 488 "v6.2.7": True, 489 "v6.0.11": True 490 } 491 }, 492 "certificate": { 493 "type": "string", 494 "revisions": { 495 "v6.0.0": True, 496 "v7.0.0": True, 497 "v6.0.5": True, 498 "v6.4.4": True, 499 "v6.4.0": True, 500 "v6.4.1": True, 501 "v6.2.0": True, 502 "v6.2.3": True, 503 "v6.2.5": True, 504 "v6.2.7": True, 505 "v6.0.11": True 506 } 507 }, 508 "facility": { 509 "type": "string", 510 "options": [ 511 { 512 "value": "kernel", 513 "revisions": { 514 "v6.0.0": True, 515 "v7.0.0": True, 516 "v6.0.5": True, 517 "v6.4.4": True, 518 "v6.4.0": True, 519 "v6.4.1": True, 520 "v6.2.0": True, 521 "v6.2.3": True, 522 "v6.2.5": True, 523 "v6.2.7": True, 524 "v6.0.11": True 525 } 526 }, 527 { 528 "value": "user", 529 "revisions": { 530 "v6.0.0": True, 531 "v7.0.0": True, 532 "v6.0.5": True, 533 "v6.4.4": True, 534 "v6.4.0": True, 535 "v6.4.1": True, 536 "v6.2.0": True, 537 "v6.2.3": True, 538 "v6.2.5": True, 539 "v6.2.7": True, 540 "v6.0.11": True 541 } 542 }, 543 { 544 "value": "mail", 545 "revisions": { 546 "v6.0.0": True, 547 "v7.0.0": True, 548 "v6.0.5": True, 549 "v6.4.4": True, 550 "v6.4.0": True, 551 "v6.4.1": True, 552 "v6.2.0": True, 553 "v6.2.3": True, 554 "v6.2.5": True, 555 "v6.2.7": True, 556 "v6.0.11": True 557 } 558 }, 559 { 560 "value": "daemon", 561 "revisions": { 562 "v6.0.0": True, 563 "v7.0.0": True, 564 "v6.0.5": True, 565 "v6.4.4": True, 566 "v6.4.0": True, 567 "v6.4.1": True, 568 "v6.2.0": True, 569 "v6.2.3": True, 570 "v6.2.5": True, 571 "v6.2.7": True, 572 "v6.0.11": True 573 } 574 }, 575 { 576 "value": "auth", 577 "revisions": { 578 "v6.0.0": True, 579 "v7.0.0": True, 580 "v6.0.5": True, 581 "v6.4.4": True, 582 "v6.4.0": True, 583 "v6.4.1": True, 584 "v6.2.0": True, 585 "v6.2.3": True, 586 "v6.2.5": True, 587 "v6.2.7": True, 588 "v6.0.11": True 589 } 590 }, 591 { 592 "value": "syslog", 593 "revisions": { 594 "v6.0.0": True, 595 "v7.0.0": True, 596 "v6.0.5": True, 597 "v6.4.4": True, 598 "v6.4.0": True, 599 "v6.4.1": True, 600 "v6.2.0": True, 601 "v6.2.3": True, 602 "v6.2.5": True, 603 "v6.2.7": True, 604 "v6.0.11": True 605 } 606 }, 607 { 608 "value": "lpr", 609 "revisions": { 610 "v6.0.0": True, 611 "v7.0.0": True, 612 "v6.0.5": True, 613 "v6.4.4": True, 614 "v6.4.0": True, 615 "v6.4.1": True, 616 "v6.2.0": True, 617 "v6.2.3": True, 618 "v6.2.5": True, 619 "v6.2.7": True, 620 "v6.0.11": True 621 } 622 }, 623 { 624 "value": "news", 625 "revisions": { 626 "v6.0.0": True, 627 "v7.0.0": True, 628 "v6.0.5": True, 629 "v6.4.4": True, 630 "v6.4.0": True, 631 "v6.4.1": True, 632 "v6.2.0": True, 633 "v6.2.3": True, 634 "v6.2.5": True, 635 "v6.2.7": True, 636 "v6.0.11": True 637 } 638 }, 639 { 640 "value": "uucp", 641 "revisions": { 642 "v6.0.0": True, 643 "v7.0.0": True, 644 "v6.0.5": True, 645 "v6.4.4": True, 646 "v6.4.0": True, 647 "v6.4.1": True, 648 "v6.2.0": True, 649 "v6.2.3": True, 650 "v6.2.5": True, 651 "v6.2.7": True, 652 "v6.0.11": True 653 } 654 }, 655 { 656 "value": "cron", 657 "revisions": { 658 "v6.0.0": True, 659 "v7.0.0": True, 660 "v6.0.5": True, 661 "v6.4.4": True, 662 "v6.4.0": True, 663 "v6.4.1": True, 664 "v6.2.0": True, 665 "v6.2.3": True, 666 "v6.2.5": True, 667 "v6.2.7": True, 668 "v6.0.11": True 669 } 670 }, 671 { 672 "value": "authpriv", 673 "revisions": { 674 "v6.0.0": True, 675 "v7.0.0": True, 676 "v6.0.5": True, 677 "v6.4.4": True, 678 "v6.4.0": True, 679 "v6.4.1": True, 680 "v6.2.0": True, 681 "v6.2.3": True, 682 "v6.2.5": True, 683 "v6.2.7": True, 684 "v6.0.11": True 685 } 686 }, 687 { 688 "value": "ftp", 689 "revisions": { 690 "v6.0.0": True, 691 "v7.0.0": True, 692 "v6.0.5": True, 693 "v6.4.4": True, 694 "v6.4.0": True, 695 "v6.4.1": True, 696 "v6.2.0": True, 697 "v6.2.3": True, 698 "v6.2.5": True, 699 "v6.2.7": True, 700 "v6.0.11": True 701 } 702 }, 703 { 704 "value": "ntp", 705 "revisions": { 706 "v6.0.0": True, 707 "v7.0.0": True, 708 "v6.0.5": True, 709 "v6.4.4": True, 710 "v6.4.0": True, 711 "v6.4.1": True, 712 "v6.2.0": True, 713 "v6.2.3": True, 714 "v6.2.5": True, 715 "v6.2.7": True, 716 "v6.0.11": True 717 } 718 }, 719 { 720 "value": "audit", 721 "revisions": { 722 "v6.0.0": True, 723 "v7.0.0": True, 724 "v6.0.5": True, 725 "v6.4.4": True, 726 "v6.4.0": True, 727 "v6.4.1": True, 728 "v6.2.0": True, 729 "v6.2.3": True, 730 "v6.2.5": True, 731 "v6.2.7": True, 732 "v6.0.11": True 733 } 734 }, 735 { 736 "value": "alert", 737 "revisions": { 738 "v6.0.0": True, 739 "v7.0.0": True, 740 "v6.0.5": True, 741 "v6.4.4": True, 742 "v6.4.0": True, 743 "v6.4.1": True, 744 "v6.2.0": True, 745 "v6.2.3": True, 746 "v6.2.5": True, 747 "v6.2.7": True, 748 "v6.0.11": True 749 } 750 }, 751 { 752 "value": "clock", 753 "revisions": { 754 "v6.0.0": True, 755 "v7.0.0": True, 756 "v6.0.5": True, 757 "v6.4.4": True, 758 "v6.4.0": True, 759 "v6.4.1": True, 760 "v6.2.0": True, 761 "v6.2.3": True, 762 "v6.2.5": True, 763 "v6.2.7": True, 764 "v6.0.11": True 765 } 766 }, 767 { 768 "value": "local0", 769 "revisions": { 770 "v6.0.0": True, 771 "v7.0.0": True, 772 "v6.0.5": True, 773 "v6.4.4": True, 774 "v6.4.0": True, 775 "v6.4.1": True, 776 "v6.2.0": True, 777 "v6.2.3": True, 778 "v6.2.5": True, 779 "v6.2.7": True, 780 "v6.0.11": True 781 } 782 }, 783 { 784 "value": "local1", 785 "revisions": { 786 "v6.0.0": True, 787 "v7.0.0": True, 788 "v6.0.5": True, 789 "v6.4.4": True, 790 "v6.4.0": True, 791 "v6.4.1": True, 792 "v6.2.0": True, 793 "v6.2.3": True, 794 "v6.2.5": True, 795 "v6.2.7": True, 796 "v6.0.11": True 797 } 798 }, 799 { 800 "value": "local2", 801 "revisions": { 802 "v6.0.0": True, 803 "v7.0.0": True, 804 "v6.0.5": True, 805 "v6.4.4": True, 806 "v6.4.0": True, 807 "v6.4.1": True, 808 "v6.2.0": True, 809 "v6.2.3": True, 810 "v6.2.5": True, 811 "v6.2.7": True, 812 "v6.0.11": True 813 } 814 }, 815 { 816 "value": "local3", 817 "revisions": { 818 "v6.0.0": True, 819 "v7.0.0": True, 820 "v6.0.5": True, 821 "v6.4.4": True, 822 "v6.4.0": True, 823 "v6.4.1": True, 824 "v6.2.0": True, 825 "v6.2.3": True, 826 "v6.2.5": True, 827 "v6.2.7": True, 828 "v6.0.11": True 829 } 830 }, 831 { 832 "value": "local4", 833 "revisions": { 834 "v6.0.0": True, 835 "v7.0.0": True, 836 "v6.0.5": True, 837 "v6.4.4": True, 838 "v6.4.0": True, 839 "v6.4.1": True, 840 "v6.2.0": True, 841 "v6.2.3": True, 842 "v6.2.5": True, 843 "v6.2.7": True, 844 "v6.0.11": True 845 } 846 }, 847 { 848 "value": "local5", 849 "revisions": { 850 "v6.0.0": True, 851 "v7.0.0": True, 852 "v6.0.5": True, 853 "v6.4.4": True, 854 "v6.4.0": True, 855 "v6.4.1": True, 856 "v6.2.0": True, 857 "v6.2.3": True, 858 "v6.2.5": True, 859 "v6.2.7": True, 860 "v6.0.11": True 861 } 862 }, 863 { 864 "value": "local6", 865 "revisions": { 866 "v6.0.0": True, 867 "v7.0.0": True, 868 "v6.0.5": True, 869 "v6.4.4": True, 870 "v6.4.0": True, 871 "v6.4.1": True, 872 "v6.2.0": True, 873 "v6.2.3": True, 874 "v6.2.5": True, 875 "v6.2.7": True, 876 "v6.0.11": True 877 } 878 }, 879 { 880 "value": "local7", 881 "revisions": { 882 "v6.0.0": True, 883 "v7.0.0": True, 884 "v6.0.5": True, 885 "v6.4.4": True, 886 "v6.4.0": True, 887 "v6.4.1": True, 888 "v6.2.0": True, 889 "v6.2.3": True, 890 "v6.2.5": True, 891 "v6.2.7": True, 892 "v6.0.11": True 893 } 894 } 895 ], 896 "revisions": { 897 "v6.0.0": True, 898 "v7.0.0": True, 899 "v6.0.5": True, 900 "v6.4.4": True, 901 "v6.4.0": True, 902 "v6.4.1": True, 903 "v6.2.0": True, 904 "v6.2.3": True, 905 "v6.2.5": True, 906 "v6.2.7": True, 907 "v6.0.11": True 908 } 909 }, 910 "format": { 911 "type": "string", 912 "options": [ 913 { 914 "value": "default", 915 "revisions": { 916 "v6.0.0": True, 917 "v7.0.0": True, 918 "v6.0.5": True, 919 "v6.4.4": True, 920 "v6.4.0": True, 921 "v6.4.1": True, 922 "v6.2.0": True, 923 "v6.2.3": True, 924 "v6.2.5": True, 925 "v6.2.7": True, 926 "v6.0.11": True 927 } 928 }, 929 { 930 "value": "csv", 931 "revisions": { 932 "v6.0.0": True, 933 "v7.0.0": True, 934 "v6.0.5": True, 935 "v6.4.4": True, 936 "v6.4.0": True, 937 "v6.4.1": True, 938 "v6.2.0": True, 939 "v6.2.3": True, 940 "v6.2.5": True, 941 "v6.2.7": True, 942 "v6.0.11": True 943 } 944 }, 945 { 946 "value": "cef", 947 "revisions": { 948 "v6.0.0": True, 949 "v7.0.0": True, 950 "v6.0.5": True, 951 "v6.4.4": True, 952 "v6.4.0": True, 953 "v6.4.1": True, 954 "v6.2.0": True, 955 "v6.2.3": True, 956 "v6.2.5": True, 957 "v6.2.7": True, 958 "v6.0.11": True 959 } 960 }, 961 { 962 "value": "rfc5424", 963 "revisions": { 964 "v7.0.0": True 965 } 966 } 967 ], 968 "revisions": { 969 "v6.0.0": True, 970 "v7.0.0": True, 971 "v6.0.5": True, 972 "v6.4.4": True, 973 "v6.4.0": True, 974 "v6.4.1": True, 975 "v6.2.0": True, 976 "v6.2.3": True, 977 "v6.2.5": True, 978 "v6.2.7": True, 979 "v6.0.11": True 980 } 981 }, 982 "source_ip": { 983 "type": "string", 984 "revisions": { 985 "v6.0.0": True, 986 "v7.0.0": True, 987 "v6.0.5": True, 988 "v6.4.4": True, 989 "v6.4.0": True, 990 "v6.4.1": True, 991 "v6.2.0": True, 992 "v6.2.3": True, 993 "v6.2.5": True, 994 "v6.2.7": True, 995 "v6.0.11": True 996 } 997 }, 998 "max_log_rate": { 999 "type": "integer", 1000 "revisions": { 1001 "v7.0.0": True, 1002 "v6.4.4": True, 1003 "v6.4.0": True, 1004 "v6.4.1": True, 1005 "v6.2.0": True, 1006 "v6.2.3": True, 1007 "v6.2.5": True, 1008 "v6.2.7": True 1009 } 1010 }, 1011 "server": { 1012 "type": "string", 1013 "revisions": { 1014 "v6.0.0": True, 1015 "v7.0.0": True, 1016 "v6.0.5": True, 1017 "v6.4.4": True, 1018 "v6.4.0": True, 1019 "v6.4.1": True, 1020 "v6.2.0": True, 1021 "v6.2.3": True, 1022 "v6.2.5": True, 1023 "v6.2.7": True, 1024 "v6.0.11": True 1025 } 1026 }, 1027 "priority": { 1028 "type": "string", 1029 "options": [ 1030 { 1031 "value": "default", 1032 "revisions": { 1033 "v7.0.0": True, 1034 "v6.4.4": True, 1035 "v6.4.0": True, 1036 "v6.4.1": True, 1037 "v6.2.0": True, 1038 "v6.2.3": True, 1039 "v6.2.5": True, 1040 "v6.2.7": True 1041 } 1042 }, 1043 { 1044 "value": "low", 1045 "revisions": { 1046 "v7.0.0": True, 1047 "v6.4.4": True, 1048 "v6.4.0": True, 1049 "v6.4.1": True, 1050 "v6.2.0": True, 1051 "v6.2.3": True, 1052 "v6.2.5": True, 1053 "v6.2.7": True 1054 } 1055 } 1056 ], 1057 "revisions": { 1058 "v7.0.0": True, 1059 "v6.4.4": True, 1060 "v6.4.0": True, 1061 "v6.4.1": True, 1062 "v6.2.0": True, 1063 "v6.2.3": True, 1064 "v6.2.5": True, 1065 "v6.2.7": True 1066 } 1067 }, 1068 "syslog_type": { 1069 "type": "integer", 1070 "revisions": { 1071 "v7.0.0": False, 1072 "v6.4.4": False, 1073 "v6.4.0": False, 1074 "v6.4.1": False, 1075 "v6.2.3": True, 1076 "v6.2.5": False, 1077 "v6.2.7": False 1078 } 1079 }, 1080 "interface_select_method": { 1081 "type": "string", 1082 "options": [ 1083 { 1084 "value": "auto", 1085 "revisions": { 1086 "v6.4.4": True, 1087 "v7.0.0": True, 1088 "v6.4.0": True, 1089 "v6.2.7": True 1090 } 1091 }, 1092 { 1093 "value": "sdwan", 1094 "revisions": { 1095 "v6.4.4": True, 1096 "v7.0.0": True, 1097 "v6.4.0": True, 1098 "v6.2.7": True 1099 } 1100 }, 1101 { 1102 "value": "specify", 1103 "revisions": { 1104 "v6.4.4": True, 1105 "v7.0.0": True, 1106 "v6.4.0": True, 1107 "v6.2.7": True 1108 } 1109 } 1110 ], 1111 "revisions": { 1112 "v7.0.0": True, 1113 "v6.4.4": True, 1114 "v6.4.1": False, 1115 "v6.4.0": True, 1116 "v6.2.7": True 1117 } 1118 }, 1119 "ssl_min_proto_version": { 1120 "type": "string", 1121 "options": [ 1122 { 1123 "value": "default", 1124 "revisions": { 1125 "v6.0.0": True, 1126 "v7.0.0": True, 1127 "v6.0.5": True, 1128 "v6.4.4": True, 1129 "v6.4.0": True, 1130 "v6.4.1": True, 1131 "v6.2.0": True, 1132 "v6.2.3": True, 1133 "v6.2.5": True, 1134 "v6.2.7": True, 1135 "v6.0.11": True 1136 } 1137 }, 1138 { 1139 "value": "SSLv3", 1140 "revisions": { 1141 "v6.0.0": True, 1142 "v7.0.0": True, 1143 "v6.0.5": True, 1144 "v6.4.4": True, 1145 "v6.4.0": True, 1146 "v6.4.1": True, 1147 "v6.2.0": True, 1148 "v6.2.3": True, 1149 "v6.2.5": True, 1150 "v6.2.7": True, 1151 "v6.0.11": True 1152 } 1153 }, 1154 { 1155 "value": "TLSv1", 1156 "revisions": { 1157 "v6.0.0": True, 1158 "v7.0.0": True, 1159 "v6.0.5": True, 1160 "v6.4.4": True, 1161 "v6.4.0": True, 1162 "v6.4.1": True, 1163 "v6.2.0": True, 1164 "v6.2.3": True, 1165 "v6.2.5": True, 1166 "v6.2.7": True, 1167 "v6.0.11": True 1168 } 1169 }, 1170 { 1171 "value": "TLSv1-1", 1172 "revisions": { 1173 "v6.0.0": True, 1174 "v7.0.0": True, 1175 "v6.0.5": True, 1176 "v6.4.4": True, 1177 "v6.4.0": True, 1178 "v6.4.1": True, 1179 "v6.2.0": True, 1180 "v6.2.3": True, 1181 "v6.2.5": True, 1182 "v6.2.7": True, 1183 "v6.0.11": True 1184 } 1185 }, 1186 { 1187 "value": "TLSv1-2", 1188 "revisions": { 1189 "v6.0.0": True, 1190 "v7.0.0": True, 1191 "v6.0.5": True, 1192 "v6.4.4": True, 1193 "v6.4.0": True, 1194 "v6.4.1": True, 1195 "v6.2.0": True, 1196 "v6.2.3": True, 1197 "v6.2.5": True, 1198 "v6.2.7": True, 1199 "v6.0.11": True 1200 } 1201 } 1202 ], 1203 "revisions": { 1204 "v6.0.0": True, 1205 "v7.0.0": True, 1206 "v6.0.5": True, 1207 "v6.4.4": True, 1208 "v6.4.0": True, 1209 "v6.4.1": True, 1210 "v6.2.0": True, 1211 "v6.2.3": True, 1212 "v6.2.5": True, 1213 "v6.2.7": True, 1214 "v6.0.11": True 1215 } 1216 }, 1217 "mode": { 1218 "type": "string", 1219 "options": [ 1220 { 1221 "value": "udp", 1222 "revisions": { 1223 "v6.0.0": True, 1224 "v7.0.0": True, 1225 "v6.0.5": True, 1226 "v6.4.4": True, 1227 "v6.4.0": True, 1228 "v6.4.1": True, 1229 "v6.2.0": True, 1230 "v6.2.3": True, 1231 "v6.2.5": True, 1232 "v6.2.7": True, 1233 "v6.0.11": True 1234 } 1235 }, 1236 { 1237 "value": "legacy-reliable", 1238 "revisions": { 1239 "v6.0.0": True, 1240 "v7.0.0": True, 1241 "v6.0.5": True, 1242 "v6.4.4": True, 1243 "v6.4.0": True, 1244 "v6.4.1": True, 1245 "v6.2.0": True, 1246 "v6.2.3": True, 1247 "v6.2.5": True, 1248 "v6.2.7": True, 1249 "v6.0.11": True 1250 } 1251 }, 1252 { 1253 "value": "reliable", 1254 "revisions": { 1255 "v6.0.0": True, 1256 "v7.0.0": True, 1257 "v6.0.5": True, 1258 "v6.4.4": True, 1259 "v6.4.0": True, 1260 "v6.4.1": True, 1261 "v6.2.0": True, 1262 "v6.2.3": True, 1263 "v6.2.5": True, 1264 "v6.2.7": True, 1265 "v6.0.11": True 1266 } 1267 } 1268 ], 1269 "revisions": { 1270 "v6.0.0": True, 1271 "v7.0.0": True, 1272 "v6.0.5": True, 1273 "v6.4.4": True, 1274 "v6.4.0": True, 1275 "v6.4.1": True, 1276 "v6.2.0": True, 1277 "v6.2.3": True, 1278 "v6.2.5": True, 1279 "v6.2.7": True, 1280 "v6.0.11": True 1281 } 1282 }, 1283 "interface": { 1284 "type": "string", 1285 "revisions": { 1286 "v7.0.0": True, 1287 "v6.4.4": True, 1288 "v6.4.1": False, 1289 "v6.4.0": True, 1290 "v6.2.7": True 1291 } 1292 }, 1293 "enc_algorithm": { 1294 "type": "string", 1295 "options": [ 1296 { 1297 "value": "high-medium", 1298 "revisions": { 1299 "v6.0.0": True, 1300 "v7.0.0": True, 1301 "v6.0.5": True, 1302 "v6.4.4": True, 1303 "v6.4.0": True, 1304 "v6.4.1": True, 1305 "v6.2.0": True, 1306 "v6.2.3": True, 1307 "v6.2.5": True, 1308 "v6.2.7": True, 1309 "v6.0.11": True 1310 } 1311 }, 1312 { 1313 "value": "high", 1314 "revisions": { 1315 "v6.0.0": True, 1316 "v7.0.0": True, 1317 "v6.0.5": True, 1318 "v6.4.4": True, 1319 "v6.4.0": True, 1320 "v6.4.1": True, 1321 "v6.2.0": True, 1322 "v6.2.3": True, 1323 "v6.2.5": True, 1324 "v6.2.7": True, 1325 "v6.0.11": True 1326 } 1327 }, 1328 { 1329 "value": "low", 1330 "revisions": { 1331 "v6.0.0": True, 1332 "v7.0.0": True, 1333 "v6.0.5": True, 1334 "v6.4.4": True, 1335 "v6.4.0": True, 1336 "v6.4.1": True, 1337 "v6.2.0": True, 1338 "v6.2.3": True, 1339 "v6.2.5": True, 1340 "v6.2.7": True, 1341 "v6.0.11": True 1342 } 1343 }, 1344 { 1345 "value": "disable", 1346 "revisions": { 1347 "v6.0.0": True, 1348 "v7.0.0": True, 1349 "v6.0.5": True, 1350 "v6.4.4": True, 1351 "v6.4.0": True, 1352 "v6.4.1": True, 1353 "v6.2.0": True, 1354 "v6.2.3": True, 1355 "v6.2.5": True, 1356 "v6.2.7": True, 1357 "v6.0.11": True 1358 } 1359 } 1360 ], 1361 "revisions": { 1362 "v6.0.0": True, 1363 "v7.0.0": True, 1364 "v6.0.5": True, 1365 "v6.4.4": True, 1366 "v6.4.0": True, 1367 "v6.4.1": True, 1368 "v6.2.0": True, 1369 "v6.2.3": True, 1370 "v6.2.5": True, 1371 "v6.2.7": True, 1372 "v6.0.11": True 1373 } 1374 }, 1375 "port": { 1376 "type": "integer", 1377 "revisions": { 1378 "v6.0.0": True, 1379 "v7.0.0": True, 1380 "v6.0.5": True, 1381 "v6.4.4": True, 1382 "v6.4.0": True, 1383 "v6.4.1": True, 1384 "v6.2.0": True, 1385 "v6.2.3": True, 1386 "v6.2.5": True, 1387 "v6.2.7": True, 1388 "v6.0.11": True 1389 } 1390 } 1391 }, 1392 "revisions": { 1393 "v6.0.0": True, 1394 "v7.0.0": True, 1395 "v6.0.5": True, 1396 "v6.4.4": True, 1397 "v6.4.0": True, 1398 "v6.4.1": True, 1399 "v6.2.0": True, 1400 "v6.2.3": True, 1401 "v6.2.5": True, 1402 "v6.2.7": True, 1403 "v6.0.11": True 1404 } 1405} 1406 1407 1408def main(): 1409 module_spec = schema_to_module_spec(versioned_schema) 1410 mkeyname = None 1411 fields = { 1412 "access_token": {"required": False, "type": "str", "no_log": True}, 1413 "enable_log": {"required": False, "type": bool}, 1414 "vdom": {"required": False, "type": "str", "default": "root"}, 1415 "log_syslogd3_setting": { 1416 "required": False, "type": "dict", "default": None, 1417 "options": { 1418 } 1419 } 1420 } 1421 for attribute_name in module_spec['options']: 1422 fields["log_syslogd3_setting"]['options'][attribute_name] = module_spec['options'][attribute_name] 1423 if mkeyname and mkeyname == attribute_name: 1424 fields["log_syslogd3_setting"]['options'][attribute_name]['required'] = True 1425 1426 check_legacy_fortiosapi() 1427 module = AnsibleModule(argument_spec=fields, 1428 supports_check_mode=False) 1429 1430 versions_check_result = None 1431 if module._socket_path: 1432 connection = Connection(module._socket_path) 1433 if 'access_token' in module.params: 1434 connection.set_option('access_token', module.params['access_token']) 1435 1436 if 'enable_log' in module.params: 1437 connection.set_option('enable_log', module.params['enable_log']) 1438 else: 1439 connection.set_option('enable_log', False) 1440 fos = FortiOSHandler(connection, module, mkeyname) 1441 versions_check_result = check_schema_versioning(fos, versioned_schema, "log_syslogd3_setting") 1442 1443 is_error, has_changed, result = fortios_log_syslogd3(module.params, fos) 1444 1445 else: 1446 module.fail_json(**FAIL_SOCKET_MSG) 1447 1448 if versions_check_result and versions_check_result['matched'] is False: 1449 module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv") 1450 1451 if not is_error: 1452 if versions_check_result and versions_check_result['matched'] is False: 1453 module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result) 1454 else: 1455 module.exit_json(changed=has_changed, meta=result) 1456 else: 1457 if versions_check_result and versions_check_result['matched'] is False: 1458 module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result) 1459 else: 1460 module.fail_json(msg="Error in repo", meta=result) 1461 1462 1463if __name__ == '__main__': 1464 main() 1465