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_override_setting
27short_description: Override 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 override_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_override_setting:
68        description:
69            - Override 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            override:
167                description:
168                    - Enable/disable override syslog settings.
169                type: str
170                choices:
171                    - enable
172                    - disable
173            port:
174                description:
175                    - Server listen port.
176                type: int
177            priority:
178                description:
179                    - Set log transmission priority.
180                type: str
181                choices:
182                    - default
183                    - low
184            server:
185                description:
186                    - Address of remote syslog server.
187                type: str
188            source_ip:
189                description:
190                    - Source IP address of syslog.
191                type: str
192            ssl_min_proto_version:
193                description:
194                    - Minimum supported protocol version for SSL/TLS connections .
195                type: str
196                choices:
197                    - default
198                    - SSLv3
199                    - TLSv1
200                    - TLSv1-1
201                    - TLSv1-2
202            status:
203                description:
204                    - Enable/disable remote syslog logging.
205                type: str
206                choices:
207                    - enable
208                    - disable
209            syslog_type:
210                description:
211                    - Hidden setting index of Syslog.
212                type: int
213'''
214
215EXAMPLES = '''
216- hosts: fortigates
217  collections:
218    - fortinet.fortios
219  connection: httpapi
220  vars:
221   vdom: "root"
222   ansible_httpapi_use_ssl: yes
223   ansible_httpapi_validate_certs: no
224   ansible_httpapi_port: 443
225  tasks:
226  - name: Override settings for remote syslog server.
227    fortios_log_syslogd3_override_setting:
228      vdom:  "{{ vdom }}"
229      log_syslogd3_override_setting:
230        certificate: "<your_own_value> (source certificate.local.name)"
231        custom_field_name:
232         -
233            custom: "<your_own_value>"
234            id:  "6"
235            name: "default_name_7"
236        enc_algorithm: "high-medium"
237        facility: "kernel"
238        format: "default"
239        interface: "<your_own_value> (source system.interface.name)"
240        interface_select_method: "auto"
241        max_log_rate: "13"
242        mode: "udp"
243        override: "enable"
244        port: "16"
245        priority: "default"
246        server: "192.168.100.40"
247        source_ip: "84.230.14.43"
248        ssl_min_proto_version: "default"
249        status: "enable"
250        syslog_type: "22"
251
252'''
253
254RETURN = '''
255build:
256  description: Build number of the fortigate image
257  returned: always
258  type: str
259  sample: '1547'
260http_method:
261  description: Last method used to provision the content into FortiGate
262  returned: always
263  type: str
264  sample: 'PUT'
265http_status:
266  description: Last result given by FortiGate on last operation applied
267  returned: always
268  type: str
269  sample: "200"
270mkey:
271  description: Master key (id) used in the last call to FortiGate
272  returned: success
273  type: str
274  sample: "id"
275name:
276  description: Name of the table used to fulfill the request
277  returned: always
278  type: str
279  sample: "urlfilter"
280path:
281  description: Path of the table used to fulfill the request
282  returned: always
283  type: str
284  sample: "webfilter"
285revision:
286  description: Internal revision number
287  returned: always
288  type: str
289  sample: "17.0.2.10658"
290serial:
291  description: Serial number of the unit
292  returned: always
293  type: str
294  sample: "FGVMEVYYQT3AB5352"
295status:
296  description: Indication of the operation's result
297  returned: always
298  type: str
299  sample: "success"
300vdom:
301  description: Virtual domain used
302  returned: always
303  type: str
304  sample: "root"
305version:
306  description: Version of the FortiGate
307  returned: always
308  type: str
309  sample: "v5.6.3"
310
311'''
312from ansible.module_utils.basic import AnsibleModule
313from ansible.module_utils.connection import Connection
314from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler
315from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi
316from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec
317from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning
318from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG
319from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison
320from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize
321
322
323def filter_log_syslogd3_override_setting_data(json):
324    option_list = ['certificate', 'custom_field_name', 'enc_algorithm',
325                   'facility', 'format', 'interface',
326                   'interface_select_method', 'max_log_rate', 'mode',
327                   'override', 'port', 'priority',
328                   'server', 'source_ip', 'ssl_min_proto_version',
329                   'status', 'syslog_type']
330    dictionary = {}
331
332    for attribute in option_list:
333        if attribute in json and json[attribute] is not None:
334            dictionary[attribute] = json[attribute]
335
336    return dictionary
337
338
339def underscore_to_hyphen(data):
340    if isinstance(data, list):
341        for i, elem in enumerate(data):
342            data[i] = underscore_to_hyphen(elem)
343    elif isinstance(data, dict):
344        new_data = {}
345        for k, v in data.items():
346            new_data[k.replace('_', '-')] = underscore_to_hyphen(v)
347        data = new_data
348
349    return data
350
351
352def log_syslogd3_override_setting(data, fos):
353    vdom = data['vdom']
354    log_syslogd3_override_setting_data = data['log_syslogd3_override_setting']
355    filtered_data = underscore_to_hyphen(filter_log_syslogd3_override_setting_data(log_syslogd3_override_setting_data))
356
357    return fos.set('log.syslogd3',
358                   'override-setting',
359                   data=filtered_data,
360                   vdom=vdom)
361
362
363def is_successful_status(status):
364    return status['status'] == "success" or \
365        status['http_method'] == "DELETE" and status['http_status'] == 404
366
367
368def fortios_log_syslogd3(data, fos):
369
370    if data['log_syslogd3_override_setting']:
371        resp = log_syslogd3_override_setting(data, fos)
372    else:
373        fos._module.fail_json(msg='missing task body: %s' % ('log_syslogd3_override_setting'))
374
375    return not is_successful_status(resp), \
376        resp['status'] == "success" and \
377        (resp['revision_changed'] if 'revision_changed' in resp else True), \
378        resp
379
380
381versioned_schema = {
382    "type": "dict",
383    "children": {
384        "status": {
385            "type": "string",
386            "options": [
387                {
388                    "value": "enable",
389                    "revisions": {
390                        "v7.0.0": True,
391                        "v6.4.4": True,
392                        "v6.4.0": True,
393                        "v6.4.1": True,
394                        "v6.2.0": True,
395                        "v6.2.3": True,
396                        "v6.2.5": True,
397                        "v6.2.7": True
398                    }
399                },
400                {
401                    "value": "disable",
402                    "revisions": {
403                        "v7.0.0": True,
404                        "v6.4.4": True,
405                        "v6.4.0": True,
406                        "v6.4.1": True,
407                        "v6.2.0": True,
408                        "v6.2.3": True,
409                        "v6.2.5": True,
410                        "v6.2.7": True
411                    }
412                }
413            ],
414            "revisions": {
415                "v7.0.0": 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            }
424        },
425        "custom_field_name": {
426            "type": "list",
427            "children": {
428                "custom": {
429                    "type": "string",
430                    "revisions": {
431                        "v7.0.0": True,
432                        "v6.4.4": True,
433                        "v6.4.0": True,
434                        "v6.4.1": True,
435                        "v6.2.0": True,
436                        "v6.2.3": True,
437                        "v6.2.5": True,
438                        "v6.2.7": True
439                    }
440                },
441                "id": {
442                    "type": "integer",
443                    "revisions": {
444                        "v7.0.0": True,
445                        "v6.4.4": True,
446                        "v6.4.0": True,
447                        "v6.4.1": True,
448                        "v6.2.0": True,
449                        "v6.2.3": True,
450                        "v6.2.5": True,
451                        "v6.2.7": True
452                    }
453                },
454                "name": {
455                    "type": "string",
456                    "revisions": {
457                        "v7.0.0": True,
458                        "v6.4.4": True,
459                        "v6.4.0": True,
460                        "v6.4.1": True,
461                        "v6.2.0": True,
462                        "v6.2.3": True,
463                        "v6.2.5": True,
464                        "v6.2.7": True
465                    }
466                }
467            },
468            "revisions": {
469                "v7.0.0": True,
470                "v6.4.4": True,
471                "v6.4.0": True,
472                "v6.4.1": True,
473                "v6.2.0": True,
474                "v6.2.3": True,
475                "v6.2.5": True,
476                "v6.2.7": True
477            }
478        },
479        "certificate": {
480            "type": "string",
481            "revisions": {
482                "v7.0.0": True,
483                "v6.4.4": True,
484                "v6.4.0": True,
485                "v6.4.1": True,
486                "v6.2.0": True,
487                "v6.2.3": True,
488                "v6.2.5": True,
489                "v6.2.7": True
490            }
491        },
492        "facility": {
493            "type": "string",
494            "options": [
495                {
496                    "value": "kernel",
497                    "revisions": {
498                        "v7.0.0": True,
499                        "v6.4.4": True,
500                        "v6.4.0": True,
501                        "v6.4.1": True,
502                        "v6.2.0": True,
503                        "v6.2.3": True,
504                        "v6.2.5": True,
505                        "v6.2.7": True
506                    }
507                },
508                {
509                    "value": "user",
510                    "revisions": {
511                        "v7.0.0": True,
512                        "v6.4.4": True,
513                        "v6.4.0": True,
514                        "v6.4.1": True,
515                        "v6.2.0": True,
516                        "v6.2.3": True,
517                        "v6.2.5": True,
518                        "v6.2.7": True
519                    }
520                },
521                {
522                    "value": "mail",
523                    "revisions": {
524                        "v7.0.0": True,
525                        "v6.4.4": True,
526                        "v6.4.0": True,
527                        "v6.4.1": True,
528                        "v6.2.0": True,
529                        "v6.2.3": True,
530                        "v6.2.5": True,
531                        "v6.2.7": True
532                    }
533                },
534                {
535                    "value": "daemon",
536                    "revisions": {
537                        "v7.0.0": True,
538                        "v6.4.4": True,
539                        "v6.4.0": True,
540                        "v6.4.1": True,
541                        "v6.2.0": True,
542                        "v6.2.3": True,
543                        "v6.2.5": True,
544                        "v6.2.7": True
545                    }
546                },
547                {
548                    "value": "auth",
549                    "revisions": {
550                        "v7.0.0": True,
551                        "v6.4.4": True,
552                        "v6.4.0": True,
553                        "v6.4.1": True,
554                        "v6.2.0": True,
555                        "v6.2.3": True,
556                        "v6.2.5": True,
557                        "v6.2.7": True
558                    }
559                },
560                {
561                    "value": "syslog",
562                    "revisions": {
563                        "v7.0.0": True,
564                        "v6.4.4": True,
565                        "v6.4.0": True,
566                        "v6.4.1": True,
567                        "v6.2.0": True,
568                        "v6.2.3": True,
569                        "v6.2.5": True,
570                        "v6.2.7": True
571                    }
572                },
573                {
574                    "value": "lpr",
575                    "revisions": {
576                        "v7.0.0": True,
577                        "v6.4.4": True,
578                        "v6.4.0": True,
579                        "v6.4.1": True,
580                        "v6.2.0": True,
581                        "v6.2.3": True,
582                        "v6.2.5": True,
583                        "v6.2.7": True
584                    }
585                },
586                {
587                    "value": "news",
588                    "revisions": {
589                        "v7.0.0": True,
590                        "v6.4.4": True,
591                        "v6.4.0": True,
592                        "v6.4.1": True,
593                        "v6.2.0": True,
594                        "v6.2.3": True,
595                        "v6.2.5": True,
596                        "v6.2.7": True
597                    }
598                },
599                {
600                    "value": "uucp",
601                    "revisions": {
602                        "v7.0.0": True,
603                        "v6.4.4": True,
604                        "v6.4.0": True,
605                        "v6.4.1": True,
606                        "v6.2.0": True,
607                        "v6.2.3": True,
608                        "v6.2.5": True,
609                        "v6.2.7": True
610                    }
611                },
612                {
613                    "value": "cron",
614                    "revisions": {
615                        "v7.0.0": True,
616                        "v6.4.4": True,
617                        "v6.4.0": True,
618                        "v6.4.1": True,
619                        "v6.2.0": True,
620                        "v6.2.3": True,
621                        "v6.2.5": True,
622                        "v6.2.7": True
623                    }
624                },
625                {
626                    "value": "authpriv",
627                    "revisions": {
628                        "v7.0.0": 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                    }
637                },
638                {
639                    "value": "ftp",
640                    "revisions": {
641                        "v7.0.0": True,
642                        "v6.4.4": True,
643                        "v6.4.0": True,
644                        "v6.4.1": True,
645                        "v6.2.0": True,
646                        "v6.2.3": True,
647                        "v6.2.5": True,
648                        "v6.2.7": True
649                    }
650                },
651                {
652                    "value": "ntp",
653                    "revisions": {
654                        "v7.0.0": True,
655                        "v6.4.4": True,
656                        "v6.4.0": True,
657                        "v6.4.1": True,
658                        "v6.2.0": True,
659                        "v6.2.3": True,
660                        "v6.2.5": True,
661                        "v6.2.7": True
662                    }
663                },
664                {
665                    "value": "audit",
666                    "revisions": {
667                        "v7.0.0": True,
668                        "v6.4.4": True,
669                        "v6.4.0": True,
670                        "v6.4.1": True,
671                        "v6.2.0": True,
672                        "v6.2.3": True,
673                        "v6.2.5": True,
674                        "v6.2.7": True
675                    }
676                },
677                {
678                    "value": "alert",
679                    "revisions": {
680                        "v7.0.0": True,
681                        "v6.4.4": True,
682                        "v6.4.0": True,
683                        "v6.4.1": True,
684                        "v6.2.0": True,
685                        "v6.2.3": True,
686                        "v6.2.5": True,
687                        "v6.2.7": True
688                    }
689                },
690                {
691                    "value": "clock",
692                    "revisions": {
693                        "v7.0.0": True,
694                        "v6.4.4": True,
695                        "v6.4.0": True,
696                        "v6.4.1": True,
697                        "v6.2.0": True,
698                        "v6.2.3": True,
699                        "v6.2.5": True,
700                        "v6.2.7": True
701                    }
702                },
703                {
704                    "value": "local0",
705                    "revisions": {
706                        "v7.0.0": True,
707                        "v6.4.4": True,
708                        "v6.4.0": True,
709                        "v6.4.1": True,
710                        "v6.2.0": True,
711                        "v6.2.3": True,
712                        "v6.2.5": True,
713                        "v6.2.7": True
714                    }
715                },
716                {
717                    "value": "local1",
718                    "revisions": {
719                        "v7.0.0": True,
720                        "v6.4.4": True,
721                        "v6.4.0": True,
722                        "v6.4.1": True,
723                        "v6.2.0": True,
724                        "v6.2.3": True,
725                        "v6.2.5": True,
726                        "v6.2.7": True
727                    }
728                },
729                {
730                    "value": "local2",
731                    "revisions": {
732                        "v7.0.0": True,
733                        "v6.4.4": True,
734                        "v6.4.0": True,
735                        "v6.4.1": True,
736                        "v6.2.0": True,
737                        "v6.2.3": True,
738                        "v6.2.5": True,
739                        "v6.2.7": True
740                    }
741                },
742                {
743                    "value": "local3",
744                    "revisions": {
745                        "v7.0.0": True,
746                        "v6.4.4": True,
747                        "v6.4.0": True,
748                        "v6.4.1": True,
749                        "v6.2.0": True,
750                        "v6.2.3": True,
751                        "v6.2.5": True,
752                        "v6.2.7": True
753                    }
754                },
755                {
756                    "value": "local4",
757                    "revisions": {
758                        "v7.0.0": True,
759                        "v6.4.4": True,
760                        "v6.4.0": True,
761                        "v6.4.1": True,
762                        "v6.2.0": True,
763                        "v6.2.3": True,
764                        "v6.2.5": True,
765                        "v6.2.7": True
766                    }
767                },
768                {
769                    "value": "local5",
770                    "revisions": {
771                        "v7.0.0": True,
772                        "v6.4.4": True,
773                        "v6.4.0": True,
774                        "v6.4.1": True,
775                        "v6.2.0": True,
776                        "v6.2.3": True,
777                        "v6.2.5": True,
778                        "v6.2.7": True
779                    }
780                },
781                {
782                    "value": "local6",
783                    "revisions": {
784                        "v7.0.0": True,
785                        "v6.4.4": True,
786                        "v6.4.0": True,
787                        "v6.4.1": True,
788                        "v6.2.0": True,
789                        "v6.2.3": True,
790                        "v6.2.5": True,
791                        "v6.2.7": True
792                    }
793                },
794                {
795                    "value": "local7",
796                    "revisions": {
797                        "v7.0.0": True,
798                        "v6.4.4": True,
799                        "v6.4.0": True,
800                        "v6.4.1": True,
801                        "v6.2.0": True,
802                        "v6.2.3": True,
803                        "v6.2.5": True,
804                        "v6.2.7": True
805                    }
806                }
807            ],
808            "revisions": {
809                "v7.0.0": True,
810                "v6.4.4": True,
811                "v6.4.0": True,
812                "v6.4.1": True,
813                "v6.2.0": True,
814                "v6.2.3": True,
815                "v6.2.5": True,
816                "v6.2.7": True
817            }
818        },
819        "format": {
820            "type": "string",
821            "options": [
822                {
823                    "value": "default",
824                    "revisions": {
825                        "v7.0.0": True,
826                        "v6.4.4": True,
827                        "v6.4.0": True,
828                        "v6.4.1": True,
829                        "v6.2.0": True,
830                        "v6.2.3": True,
831                        "v6.2.5": True,
832                        "v6.2.7": True
833                    }
834                },
835                {
836                    "value": "csv",
837                    "revisions": {
838                        "v7.0.0": True,
839                        "v6.4.4": True,
840                        "v6.4.0": True,
841                        "v6.4.1": True,
842                        "v6.2.0": True,
843                        "v6.2.3": True,
844                        "v6.2.5": True,
845                        "v6.2.7": True
846                    }
847                },
848                {
849                    "value": "cef",
850                    "revisions": {
851                        "v7.0.0": True,
852                        "v6.4.4": True,
853                        "v6.4.0": True,
854                        "v6.4.1": True,
855                        "v6.2.0": True,
856                        "v6.2.3": True,
857                        "v6.2.5": True,
858                        "v6.2.7": True
859                    }
860                },
861                {
862                    "value": "rfc5424",
863                    "revisions": {
864                        "v7.0.0": True
865                    }
866                }
867            ],
868            "revisions": {
869                "v7.0.0": True,
870                "v6.4.4": True,
871                "v6.4.0": True,
872                "v6.4.1": True,
873                "v6.2.0": True,
874                "v6.2.3": True,
875                "v6.2.5": True,
876                "v6.2.7": True
877            }
878        },
879        "source_ip": {
880            "type": "string",
881            "revisions": {
882                "v7.0.0": True,
883                "v6.4.4": True,
884                "v6.4.0": True,
885                "v6.4.1": True,
886                "v6.2.0": True,
887                "v6.2.3": True,
888                "v6.2.5": True,
889                "v6.2.7": True
890            }
891        },
892        "max_log_rate": {
893            "type": "integer",
894            "revisions": {
895                "v7.0.0": True,
896                "v6.4.4": True,
897                "v6.4.0": True,
898                "v6.4.1": True,
899                "v6.2.0": True,
900                "v6.2.3": True,
901                "v6.2.5": True,
902                "v6.2.7": True
903            }
904        },
905        "server": {
906            "type": "string",
907            "revisions": {
908                "v7.0.0": True,
909                "v6.4.4": True,
910                "v6.4.0": True,
911                "v6.4.1": True,
912                "v6.2.0": True,
913                "v6.2.3": True,
914                "v6.2.5": True,
915                "v6.2.7": True
916            }
917        },
918        "priority": {
919            "type": "string",
920            "options": [
921                {
922                    "value": "default",
923                    "revisions": {
924                        "v7.0.0": True,
925                        "v6.4.4": True,
926                        "v6.4.0": True,
927                        "v6.4.1": True,
928                        "v6.2.0": True,
929                        "v6.2.3": True,
930                        "v6.2.5": True,
931                        "v6.2.7": True
932                    }
933                },
934                {
935                    "value": "low",
936                    "revisions": {
937                        "v7.0.0": True,
938                        "v6.4.4": True,
939                        "v6.4.0": True,
940                        "v6.4.1": True,
941                        "v6.2.0": True,
942                        "v6.2.3": True,
943                        "v6.2.5": True,
944                        "v6.2.7": True
945                    }
946                }
947            ],
948            "revisions": {
949                "v7.0.0": True,
950                "v6.4.4": True,
951                "v6.4.0": True,
952                "v6.4.1": True,
953                "v6.2.0": True,
954                "v6.2.3": True,
955                "v6.2.5": True,
956                "v6.2.7": True
957            }
958        },
959        "interface": {
960            "type": "string",
961            "revisions": {
962                "v7.0.0": True,
963                "v6.4.4": True,
964                "v6.4.1": False,
965                "v6.4.0": True,
966                "v6.2.7": True
967            }
968        },
969        "interface_select_method": {
970            "type": "string",
971            "options": [
972                {
973                    "value": "auto",
974                    "revisions": {
975                        "v6.4.4": True,
976                        "v7.0.0": True,
977                        "v6.4.0": True,
978                        "v6.2.7": True
979                    }
980                },
981                {
982                    "value": "sdwan",
983                    "revisions": {
984                        "v6.4.4": True,
985                        "v7.0.0": True,
986                        "v6.4.0": True,
987                        "v6.2.7": True
988                    }
989                },
990                {
991                    "value": "specify",
992                    "revisions": {
993                        "v6.4.4": True,
994                        "v7.0.0": True,
995                        "v6.4.0": True,
996                        "v6.2.7": True
997                    }
998                }
999            ],
1000            "revisions": {
1001                "v7.0.0": True,
1002                "v6.4.4": True,
1003                "v6.4.1": False,
1004                "v6.4.0": True,
1005                "v6.2.7": True
1006            }
1007        },
1008        "ssl_min_proto_version": {
1009            "type": "string",
1010            "options": [
1011                {
1012                    "value": "default",
1013                    "revisions": {
1014                        "v7.0.0": True,
1015                        "v6.4.4": True,
1016                        "v6.4.0": True,
1017                        "v6.4.1": True,
1018                        "v6.2.0": True,
1019                        "v6.2.3": True,
1020                        "v6.2.5": True,
1021                        "v6.2.7": True
1022                    }
1023                },
1024                {
1025                    "value": "SSLv3",
1026                    "revisions": {
1027                        "v7.0.0": True,
1028                        "v6.4.4": True,
1029                        "v6.4.0": True,
1030                        "v6.4.1": True,
1031                        "v6.2.0": True,
1032                        "v6.2.3": True,
1033                        "v6.2.5": True,
1034                        "v6.2.7": True
1035                    }
1036                },
1037                {
1038                    "value": "TLSv1",
1039                    "revisions": {
1040                        "v7.0.0": True,
1041                        "v6.4.4": True,
1042                        "v6.4.0": True,
1043                        "v6.4.1": True,
1044                        "v6.2.0": True,
1045                        "v6.2.3": True,
1046                        "v6.2.5": True,
1047                        "v6.2.7": True
1048                    }
1049                },
1050                {
1051                    "value": "TLSv1-1",
1052                    "revisions": {
1053                        "v7.0.0": True,
1054                        "v6.4.4": True,
1055                        "v6.4.0": True,
1056                        "v6.4.1": True,
1057                        "v6.2.0": True,
1058                        "v6.2.3": True,
1059                        "v6.2.5": True,
1060                        "v6.2.7": True
1061                    }
1062                },
1063                {
1064                    "value": "TLSv1-2",
1065                    "revisions": {
1066                        "v7.0.0": True,
1067                        "v6.4.4": True,
1068                        "v6.4.0": True,
1069                        "v6.4.1": True,
1070                        "v6.2.0": True,
1071                        "v6.2.3": True,
1072                        "v6.2.5": True,
1073                        "v6.2.7": True
1074                    }
1075                }
1076            ],
1077            "revisions": {
1078                "v7.0.0": True,
1079                "v6.4.4": True,
1080                "v6.4.0": True,
1081                "v6.4.1": True,
1082                "v6.2.0": True,
1083                "v6.2.3": True,
1084                "v6.2.5": True,
1085                "v6.2.7": True
1086            }
1087        },
1088        "mode": {
1089            "type": "string",
1090            "options": [
1091                {
1092                    "value": "udp",
1093                    "revisions": {
1094                        "v7.0.0": True,
1095                        "v6.4.4": True,
1096                        "v6.4.0": True,
1097                        "v6.4.1": True,
1098                        "v6.2.0": True,
1099                        "v6.2.3": True,
1100                        "v6.2.5": True,
1101                        "v6.2.7": True
1102                    }
1103                },
1104                {
1105                    "value": "legacy-reliable",
1106                    "revisions": {
1107                        "v7.0.0": True,
1108                        "v6.4.4": True,
1109                        "v6.4.0": True,
1110                        "v6.4.1": True,
1111                        "v6.2.0": True,
1112                        "v6.2.3": True,
1113                        "v6.2.5": True,
1114                        "v6.2.7": True
1115                    }
1116                },
1117                {
1118                    "value": "reliable",
1119                    "revisions": {
1120                        "v7.0.0": True,
1121                        "v6.4.4": True,
1122                        "v6.4.0": True,
1123                        "v6.4.1": True,
1124                        "v6.2.0": True,
1125                        "v6.2.3": True,
1126                        "v6.2.5": True,
1127                        "v6.2.7": True
1128                    }
1129                }
1130            ],
1131            "revisions": {
1132                "v7.0.0": True,
1133                "v6.4.4": True,
1134                "v6.4.0": True,
1135                "v6.4.1": True,
1136                "v6.2.0": True,
1137                "v6.2.3": True,
1138                "v6.2.5": True,
1139                "v6.2.7": True
1140            }
1141        },
1142        "syslog_type": {
1143            "type": "integer",
1144            "revisions": {
1145                "v7.0.0": False,
1146                "v6.4.4": False,
1147                "v6.4.0": False,
1148                "v6.4.1": False,
1149                "v6.2.3": True,
1150                "v6.2.5": False,
1151                "v6.2.7": False
1152            }
1153        },
1154        "override": {
1155            "type": "string",
1156            "options": [
1157                {
1158                    "value": "enable",
1159                    "revisions": {
1160                        "v6.2.3": True
1161                    }
1162                },
1163                {
1164                    "value": "disable",
1165                    "revisions": {
1166                        "v6.2.3": True
1167                    }
1168                }
1169            ],
1170            "revisions": {
1171                "v7.0.0": False,
1172                "v6.4.4": False,
1173                "v6.4.0": False,
1174                "v6.4.1": False,
1175                "v6.2.3": True,
1176                "v6.2.5": False,
1177                "v6.2.7": False
1178            }
1179        },
1180        "enc_algorithm": {
1181            "type": "string",
1182            "options": [
1183                {
1184                    "value": "high-medium",
1185                    "revisions": {
1186                        "v7.0.0": True,
1187                        "v6.4.4": True,
1188                        "v6.4.0": True,
1189                        "v6.4.1": True,
1190                        "v6.2.0": True,
1191                        "v6.2.3": True,
1192                        "v6.2.5": True,
1193                        "v6.2.7": True
1194                    }
1195                },
1196                {
1197                    "value": "high",
1198                    "revisions": {
1199                        "v7.0.0": True,
1200                        "v6.4.4": True,
1201                        "v6.4.0": True,
1202                        "v6.4.1": True,
1203                        "v6.2.0": True,
1204                        "v6.2.3": True,
1205                        "v6.2.5": True,
1206                        "v6.2.7": True
1207                    }
1208                },
1209                {
1210                    "value": "low",
1211                    "revisions": {
1212                        "v7.0.0": True,
1213                        "v6.4.4": True,
1214                        "v6.4.0": True,
1215                        "v6.4.1": True,
1216                        "v6.2.0": True,
1217                        "v6.2.3": True,
1218                        "v6.2.5": True,
1219                        "v6.2.7": True
1220                    }
1221                },
1222                {
1223                    "value": "disable",
1224                    "revisions": {
1225                        "v7.0.0": 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                    }
1234                }
1235            ],
1236            "revisions": {
1237                "v7.0.0": True,
1238                "v6.4.4": True,
1239                "v6.4.0": True,
1240                "v6.4.1": True,
1241                "v6.2.0": True,
1242                "v6.2.3": True,
1243                "v6.2.5": True,
1244                "v6.2.7": True
1245            }
1246        },
1247        "port": {
1248            "type": "integer",
1249            "revisions": {
1250                "v7.0.0": True,
1251                "v6.4.4": True,
1252                "v6.4.0": True,
1253                "v6.4.1": True,
1254                "v6.2.0": True,
1255                "v6.2.3": True,
1256                "v6.2.5": True,
1257                "v6.2.7": True
1258            }
1259        }
1260    },
1261    "revisions": {
1262        "v7.0.0": True,
1263        "v6.4.4": True,
1264        "v6.4.0": True,
1265        "v6.4.1": True,
1266        "v6.2.0": True,
1267        "v6.2.3": True,
1268        "v6.2.5": True,
1269        "v6.2.7": True
1270    }
1271}
1272
1273
1274def main():
1275    module_spec = schema_to_module_spec(versioned_schema)
1276    mkeyname = None
1277    fields = {
1278        "access_token": {"required": False, "type": "str", "no_log": True},
1279        "enable_log": {"required": False, "type": bool},
1280        "vdom": {"required": False, "type": "str", "default": "root"},
1281        "log_syslogd3_override_setting": {
1282            "required": False, "type": "dict", "default": None,
1283            "options": {
1284            }
1285        }
1286    }
1287    for attribute_name in module_spec['options']:
1288        fields["log_syslogd3_override_setting"]['options'][attribute_name] = module_spec['options'][attribute_name]
1289        if mkeyname and mkeyname == attribute_name:
1290            fields["log_syslogd3_override_setting"]['options'][attribute_name]['required'] = True
1291
1292    check_legacy_fortiosapi()
1293    module = AnsibleModule(argument_spec=fields,
1294                           supports_check_mode=False)
1295
1296    versions_check_result = None
1297    if module._socket_path:
1298        connection = Connection(module._socket_path)
1299        if 'access_token' in module.params:
1300            connection.set_option('access_token', module.params['access_token'])
1301
1302        if 'enable_log' in module.params:
1303            connection.set_option('enable_log', module.params['enable_log'])
1304        else:
1305            connection.set_option('enable_log', False)
1306        fos = FortiOSHandler(connection, module, mkeyname)
1307        versions_check_result = check_schema_versioning(fos, versioned_schema, "log_syslogd3_override_setting")
1308
1309        is_error, has_changed, result = fortios_log_syslogd3(module.params, fos)
1310
1311    else:
1312        module.fail_json(**FAIL_SOCKET_MSG)
1313
1314    if versions_check_result and versions_check_result['matched'] is False:
1315        module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv")
1316
1317    if not is_error:
1318        if versions_check_result and versions_check_result['matched'] is False:
1319            module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result)
1320        else:
1321            module.exit_json(changed=has_changed, meta=result)
1322    else:
1323        if versions_check_result and versions_check_result['matched'] is False:
1324            module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result)
1325        else:
1326            module.fail_json(msg="Error in repo", meta=result)
1327
1328
1329if __name__ == '__main__':
1330    main()
1331