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