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_system_snmp_community
27short_description: SNMP community configuration 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 system_snmp feature and community 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    state:
68        description:
69            - Indicates whether to create or remove the object.
70        type: str
71        required: true
72        choices:
73            - present
74            - absent
75    system_snmp_community:
76        description:
77            - SNMP community configuration.
78        default: null
79        type: dict
80        suboptions:
81            events:
82                description:
83                    - SNMP trap events.
84                type: list
85                choices:
86                    - cpu-high
87                    - mem-low
88                    - log-full
89                    - intf-ip
90                    - vpn-tun-up
91                    - vpn-tun-down
92                    - ha-switch
93                    - ha-hb-failure
94                    - ips-signature
95                    - ips-anomaly
96                    - av-virus
97                    - av-oversize
98                    - av-pattern
99                    - av-fragmented
100                    - fm-if-change
101                    - fm-conf-change
102                    - bgp-established
103                    - bgp-backward-transition
104                    - ha-member-up
105                    - ha-member-down
106                    - ent-conf-change
107                    - av-conserve
108                    - av-bypass
109                    - av-oversize-passed
110                    - av-oversize-blocked
111                    - ips-pkg-update
112                    - ips-fail-open
113                    - temperature-high
114                    - voltage-alert
115                    - power-supply-failure
116                    - faz-disconnect
117                    - fan-failure
118                    - wc-ap-up
119                    - wc-ap-down
120                    - fswctl-session-up
121                    - fswctl-session-down
122                    - load-balance-real-server-down
123                    - device-new
124                    - per-cpu-high
125                    - dhcp
126                    - ospf-nbr-state-change
127                    - ospf-virtnbr-state-change
128            hosts:
129                description:
130                    - Configure IPv4 SNMP managers (hosts).
131                type: list
132                suboptions:
133                    ha_direct:
134                        description:
135                            - Enable/disable direct management of HA cluster members.
136                        type: str
137                        choices:
138                            - enable
139                            - disable
140                    host_type:
141                        description:
142                            - Control whether the SNMP manager sends SNMP queries, receives SNMP traps, or both.
143                        type: str
144                        choices:
145                            - any
146                            - query
147                            - trap
148                    id:
149                        description:
150                            - Host entry ID.
151                        required: true
152                        type: int
153                    ip:
154                        description:
155                            - IPv4 address of the SNMP manager (host).
156                        type: str
157                    source_ip:
158                        description:
159                            - Source IPv4 address for SNMP traps.
160                        type: str
161            hosts6:
162                description:
163                    - Configure IPv6 SNMP managers.
164                type: list
165                suboptions:
166                    ha_direct:
167                        description:
168                            - Enable/disable direct management of HA cluster members.
169                        type: str
170                        choices:
171                            - enable
172                            - disable
173                    host_type:
174                        description:
175                            - Control whether the SNMP manager sends SNMP queries, receives SNMP traps, or both.
176                        type: str
177                        choices:
178                            - any
179                            - query
180                            - trap
181                    id:
182                        description:
183                            - Host6 entry ID.
184                        required: true
185                        type: int
186                    ipv6:
187                        description:
188                            - SNMP manager IPv6 address prefix.
189                        type: str
190                    source_ipv6:
191                        description:
192                            - Source IPv6 address for SNMP traps.
193                        type: str
194            id:
195                description:
196                    - Community ID.
197                required: true
198                type: int
199            name:
200                description:
201                    - Community name.
202                type: str
203            query_v1_port:
204                description:
205                    - SNMP v1 query port .
206                type: int
207            query_v1_status:
208                description:
209                    - Enable/disable SNMP v1 queries.
210                type: str
211                choices:
212                    - enable
213                    - disable
214            query_v2c_port:
215                description:
216                    - SNMP v2c query port .
217                type: int
218            query_v2c_status:
219                description:
220                    - Enable/disable SNMP v2c queries.
221                type: str
222                choices:
223                    - enable
224                    - disable
225            status:
226                description:
227                    - Enable/disable this SNMP community.
228                type: str
229                choices:
230                    - enable
231                    - disable
232            trap_v1_lport:
233                description:
234                    - SNMP v1 trap local port .
235                type: int
236            trap_v1_rport:
237                description:
238                    - SNMP v1 trap remote port .
239                type: int
240            trap_v1_status:
241                description:
242                    - Enable/disable SNMP v1 traps.
243                type: str
244                choices:
245                    - enable
246                    - disable
247            trap_v2c_lport:
248                description:
249                    - SNMP v2c trap local port .
250                type: int
251            trap_v2c_rport:
252                description:
253                    - SNMP v2c trap remote port .
254                type: int
255            trap_v2c_status:
256                description:
257                    - Enable/disable SNMP v2c traps.
258                type: str
259                choices:
260                    - enable
261                    - disable
262'''
263
264EXAMPLES = '''
265- hosts: fortigates
266  collections:
267    - fortinet.fortios
268  connection: httpapi
269  vars:
270   vdom: "root"
271   ansible_httpapi_use_ssl: yes
272   ansible_httpapi_validate_certs: no
273   ansible_httpapi_port: 443
274  tasks:
275  - name: SNMP community configuration.
276    fortios_system_snmp_community:
277      vdom:  "{{ vdom }}"
278      state: "present"
279      access_token: "<your_own_value>"
280      system_snmp_community:
281        events: "cpu-high"
282        hosts:
283         -
284            ha_direct: "enable"
285            host_type: "any"
286            id:  "7"
287            ip: "<your_own_value>"
288            source_ip: "84.230.14.43"
289        hosts6:
290         -
291            ha_direct: "enable"
292            host_type: "any"
293            id:  "13"
294            ipv6: "<your_own_value>"
295            source_ipv6: "<your_own_value>"
296        id:  "16"
297        name: "default_name_17"
298        query_v1_port: "18"
299        query_v1_status: "enable"
300        query_v2c_port: "20"
301        query_v2c_status: "enable"
302        status: "enable"
303        trap_v1_lport: "23"
304        trap_v1_rport: "24"
305        trap_v1_status: "enable"
306        trap_v2c_lport: "26"
307        trap_v2c_rport: "27"
308        trap_v2c_status: "enable"
309
310'''
311
312RETURN = '''
313build:
314  description: Build number of the fortigate image
315  returned: always
316  type: str
317  sample: '1547'
318http_method:
319  description: Last method used to provision the content into FortiGate
320  returned: always
321  type: str
322  sample: 'PUT'
323http_status:
324  description: Last result given by FortiGate on last operation applied
325  returned: always
326  type: str
327  sample: "200"
328mkey:
329  description: Master key (id) used in the last call to FortiGate
330  returned: success
331  type: str
332  sample: "id"
333name:
334  description: Name of the table used to fulfill the request
335  returned: always
336  type: str
337  sample: "urlfilter"
338path:
339  description: Path of the table used to fulfill the request
340  returned: always
341  type: str
342  sample: "webfilter"
343revision:
344  description: Internal revision number
345  returned: always
346  type: str
347  sample: "17.0.2.10658"
348serial:
349  description: Serial number of the unit
350  returned: always
351  type: str
352  sample: "FGVMEVYYQT3AB5352"
353status:
354  description: Indication of the operation's result
355  returned: always
356  type: str
357  sample: "success"
358vdom:
359  description: Virtual domain used
360  returned: always
361  type: str
362  sample: "root"
363version:
364  description: Version of the FortiGate
365  returned: always
366  type: str
367  sample: "v5.6.3"
368
369'''
370from ansible.module_utils.basic import AnsibleModule
371from ansible.module_utils.connection import Connection
372from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler
373from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi
374from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec
375from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning
376from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG
377from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison
378from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize
379
380
381def filter_system_snmp_community_data(json):
382    option_list = ['events', 'hosts', 'hosts6',
383                   'id', 'name', 'query_v1_port',
384                   'query_v1_status', 'query_v2c_port', 'query_v2c_status',
385                   'status', 'trap_v1_lport', 'trap_v1_rport',
386                   'trap_v1_status', 'trap_v2c_lport', 'trap_v2c_rport',
387                   'trap_v2c_status']
388    dictionary = {}
389
390    for attribute in option_list:
391        if attribute in json and json[attribute] is not None:
392            dictionary[attribute] = json[attribute]
393
394    return dictionary
395
396
397def flatten_single_path(data, path, index):
398    if not data or index == len(path) or path[index] not in data or not data[path[index]]:
399        return
400
401    if index == len(path) - 1:
402        data[path[index]] = ' '.join(str(elem) for elem in data[path[index]])
403    elif isinstance(data[path[index]], list):
404        for value in data[path[index]]:
405            flatten_single_path(value, path, index + 1)
406    else:
407        flatten_single_path(data[path[index]], path, index + 1)
408
409
410def flatten_multilists_attributes(data):
411    multilist_attrs = [[u'events']]
412
413    for attr in multilist_attrs:
414        flatten_single_path(data, attr, 0)
415
416    return data
417
418
419def underscore_to_hyphen(data):
420    if isinstance(data, list):
421        for i, elem in enumerate(data):
422            data[i] = underscore_to_hyphen(elem)
423    elif isinstance(data, dict):
424        new_data = {}
425        for k, v in data.items():
426            new_data[k.replace('_', '-')] = underscore_to_hyphen(v)
427        data = new_data
428
429    return data
430
431
432def system_snmp_community(data, fos, check_mode=False):
433
434    vdom = data['vdom']
435
436    state = data['state']
437
438    system_snmp_community_data = data['system_snmp_community']
439    system_snmp_community_data = flatten_multilists_attributes(system_snmp_community_data)
440    filtered_data = underscore_to_hyphen(filter_system_snmp_community_data(system_snmp_community_data))
441
442    # check_mode starts from here
443    if check_mode:
444        mkey = fos.get_mkey('system', 'interface', filtered_data, vdom=vdom)
445        current_data = fos.get('system', 'interface', vdom=vdom, mkey=mkey)
446        is_existed = current_data and current_data.get('http_status') == 200 \
447            and isinstance(current_data.get('results'), list) \
448            and len(current_data['results']) > 0
449
450        # 2. if it exists and the state is 'present' then compare current settings with desired
451        if state == 'present' or state is True:
452            if mkey is None:
453                return False, True, filtered_data
454
455            # if mkey exists then compare each other
456            # record exits and they're matched or not
457            if is_existed:
458                is_same = is_same_comparison(
459                    serialize(current_data['results'][0]), serialize(filtered_data))
460                return False, not is_same, filtered_data
461
462            # record does not exist
463            return False, True, filtered_data
464
465        if state == 'absent':
466            if mkey is None:
467                return False, False, filtered_data
468
469            if is_existed:
470                return False, True, filtered_data
471            return False, False, filtered_data
472
473        return True, False, {'reason: ': 'Must provide state parameter'}
474
475    if state == "present" or state is True:
476        return fos.set('system.snmp',
477                       'community',
478                       data=filtered_data,
479                       vdom=vdom)
480
481    elif state == "absent":
482        return fos.delete('system.snmp',
483                          'community',
484                          mkey=filtered_data['id'],
485                          vdom=vdom)
486    else:
487        fos._module.fail_json(msg='state must be present or absent!')
488
489
490def is_successful_status(status):
491    return status['status'] == "success" or \
492        status['http_method'] == "DELETE" and status['http_status'] == 404
493
494
495def fortios_system_snmp(data, fos, check_mode):
496
497    if data['system_snmp_community']:
498        resp = system_snmp_community(data, fos, check_mode)
499    else:
500        fos._module.fail_json(msg='missing task body: %s' % ('system_snmp_community'))
501    if check_mode:
502        return resp
503    return not is_successful_status(resp), \
504        resp['status'] == "success" and \
505        (resp['revision_changed'] if 'revision_changed' in resp else True), \
506        resp
507
508
509versioned_schema = {
510    "type": "list",
511    "children": {
512        "status": {
513            "type": "string",
514            "options": [
515                {
516                    "value": "enable",
517                    "revisions": {
518                        "v6.0.0": True,
519                        "v7.0.0": True,
520                        "v6.0.5": True,
521                        "v6.4.4": True,
522                        "v6.4.0": True,
523                        "v6.4.1": True,
524                        "v6.2.0": True,
525                        "v6.2.3": True,
526                        "v6.2.5": True,
527                        "v6.2.7": True,
528                        "v6.0.11": True
529                    }
530                },
531                {
532                    "value": "disable",
533                    "revisions": {
534                        "v6.0.0": True,
535                        "v7.0.0": True,
536                        "v6.0.5": True,
537                        "v6.4.4": True,
538                        "v6.4.0": True,
539                        "v6.4.1": True,
540                        "v6.2.0": True,
541                        "v6.2.3": True,
542                        "v6.2.5": True,
543                        "v6.2.7": True,
544                        "v6.0.11": True
545                    }
546                }
547            ],
548            "revisions": {
549                "v6.0.0": True,
550                "v7.0.0": True,
551                "v6.0.5": True,
552                "v6.4.4": True,
553                "v6.4.0": True,
554                "v6.4.1": True,
555                "v6.2.0": True,
556                "v6.2.3": True,
557                "v6.2.5": True,
558                "v6.2.7": True,
559                "v6.0.11": True
560            }
561        },
562        "hosts6": {
563            "type": "list",
564            "children": {
565                "ipv6": {
566                    "type": "string",
567                    "revisions": {
568                        "v6.0.0": True,
569                        "v7.0.0": True,
570                        "v6.0.5": True,
571                        "v6.4.4": True,
572                        "v6.4.0": True,
573                        "v6.4.1": True,
574                        "v6.2.0": True,
575                        "v6.2.3": True,
576                        "v6.2.5": True,
577                        "v6.2.7": True,
578                        "v6.0.11": True
579                    }
580                },
581                "host_type": {
582                    "type": "string",
583                    "options": [
584                        {
585                            "value": "any",
586                            "revisions": {
587                                "v6.0.0": True,
588                                "v7.0.0": True,
589                                "v6.0.5": 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                                "v6.0.11": True
598                            }
599                        },
600                        {
601                            "value": "query",
602                            "revisions": {
603                                "v6.0.0": True,
604                                "v7.0.0": True,
605                                "v6.0.5": True,
606                                "v6.4.4": True,
607                                "v6.4.0": True,
608                                "v6.4.1": True,
609                                "v6.2.0": True,
610                                "v6.2.3": True,
611                                "v6.2.5": True,
612                                "v6.2.7": True,
613                                "v6.0.11": True
614                            }
615                        },
616                        {
617                            "value": "trap",
618                            "revisions": {
619                                "v6.0.0": True,
620                                "v7.0.0": True,
621                                "v6.0.5": True,
622                                "v6.4.4": True,
623                                "v6.4.0": True,
624                                "v6.4.1": True,
625                                "v6.2.0": True,
626                                "v6.2.3": True,
627                                "v6.2.5": True,
628                                "v6.2.7": True,
629                                "v6.0.11": True
630                            }
631                        }
632                    ],
633                    "revisions": {
634                        "v6.0.0": True,
635                        "v7.0.0": True,
636                        "v6.0.5": True,
637                        "v6.4.4": True,
638                        "v6.4.0": True,
639                        "v6.4.1": True,
640                        "v6.2.0": True,
641                        "v6.2.3": True,
642                        "v6.2.5": True,
643                        "v6.2.7": True,
644                        "v6.0.11": True
645                    }
646                },
647                "ha_direct": {
648                    "type": "string",
649                    "options": [
650                        {
651                            "value": "enable",
652                            "revisions": {
653                                "v6.0.0": True,
654                                "v7.0.0": True,
655                                "v6.0.5": True,
656                                "v6.4.4": True,
657                                "v6.4.0": True,
658                                "v6.4.1": True,
659                                "v6.2.0": True,
660                                "v6.2.3": True,
661                                "v6.2.5": True,
662                                "v6.2.7": True,
663                                "v6.0.11": True
664                            }
665                        },
666                        {
667                            "value": "disable",
668                            "revisions": {
669                                "v6.0.0": True,
670                                "v7.0.0": True,
671                                "v6.0.5": True,
672                                "v6.4.4": True,
673                                "v6.4.0": True,
674                                "v6.4.1": True,
675                                "v6.2.0": True,
676                                "v6.2.3": True,
677                                "v6.2.5": True,
678                                "v6.2.7": True,
679                                "v6.0.11": True
680                            }
681                        }
682                    ],
683                    "revisions": {
684                        "v6.0.0": True,
685                        "v7.0.0": True,
686                        "v6.0.5": True,
687                        "v6.4.4": True,
688                        "v6.4.0": True,
689                        "v6.4.1": True,
690                        "v6.2.0": True,
691                        "v6.2.3": True,
692                        "v6.2.5": True,
693                        "v6.2.7": True,
694                        "v6.0.11": True
695                    }
696                },
697                "source_ipv6": {
698                    "type": "string",
699                    "revisions": {
700                        "v6.0.0": True,
701                        "v7.0.0": True,
702                        "v6.0.5": True,
703                        "v6.4.4": True,
704                        "v6.4.0": True,
705                        "v6.4.1": True,
706                        "v6.2.0": True,
707                        "v6.2.3": True,
708                        "v6.2.5": True,
709                        "v6.2.7": True,
710                        "v6.0.11": True
711                    }
712                },
713                "id": {
714                    "type": "integer",
715                    "revisions": {
716                        "v6.0.0": True,
717                        "v7.0.0": True,
718                        "v6.0.5": True,
719                        "v6.4.4": True,
720                        "v6.4.0": True,
721                        "v6.4.1": True,
722                        "v6.2.0": True,
723                        "v6.2.3": True,
724                        "v6.2.5": True,
725                        "v6.2.7": True,
726                        "v6.0.11": True
727                    }
728                }
729            },
730            "revisions": {
731                "v6.0.0": True,
732                "v7.0.0": True,
733                "v6.0.5": True,
734                "v6.4.4": True,
735                "v6.4.0": True,
736                "v6.4.1": True,
737                "v6.2.0": True,
738                "v6.2.3": True,
739                "v6.2.5": True,
740                "v6.2.7": True,
741                "v6.0.11": True
742            }
743        },
744        "name": {
745            "type": "string",
746            "revisions": {
747                "v6.0.0": True,
748                "v7.0.0": True,
749                "v6.0.5": True,
750                "v6.4.4": True,
751                "v6.4.0": True,
752                "v6.4.1": True,
753                "v6.2.0": True,
754                "v6.2.3": True,
755                "v6.2.5": True,
756                "v6.2.7": True,
757                "v6.0.11": True
758            }
759        },
760        "query_v1_status": {
761            "type": "string",
762            "options": [
763                {
764                    "value": "enable",
765                    "revisions": {
766                        "v6.0.0": True,
767                        "v7.0.0": True,
768                        "v6.0.5": True,
769                        "v6.4.4": True,
770                        "v6.4.0": True,
771                        "v6.4.1": True,
772                        "v6.2.0": True,
773                        "v6.2.3": True,
774                        "v6.2.5": True,
775                        "v6.2.7": True,
776                        "v6.0.11": True
777                    }
778                },
779                {
780                    "value": "disable",
781                    "revisions": {
782                        "v6.0.0": True,
783                        "v7.0.0": True,
784                        "v6.0.5": 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                        "v6.0.11": True
793                    }
794                }
795            ],
796            "revisions": {
797                "v6.0.0": True,
798                "v7.0.0": True,
799                "v6.0.5": True,
800                "v6.4.4": True,
801                "v6.4.0": True,
802                "v6.4.1": True,
803                "v6.2.0": True,
804                "v6.2.3": True,
805                "v6.2.5": True,
806                "v6.2.7": True,
807                "v6.0.11": True
808            }
809        },
810        "id": {
811            "type": "integer",
812            "revisions": {
813                "v6.0.0": True,
814                "v7.0.0": True,
815                "v6.0.5": True,
816                "v6.4.4": True,
817                "v6.4.0": True,
818                "v6.4.1": True,
819                "v6.2.0": True,
820                "v6.2.3": True,
821                "v6.2.5": True,
822                "v6.2.7": True,
823                "v6.0.11": True
824            }
825        },
826        "trap_v2c_rport": {
827            "type": "integer",
828            "revisions": {
829                "v6.0.0": True,
830                "v7.0.0": True,
831                "v6.0.5": True,
832                "v6.4.4": True,
833                "v6.4.0": True,
834                "v6.4.1": True,
835                "v6.2.0": True,
836                "v6.2.3": True,
837                "v6.2.5": True,
838                "v6.2.7": True,
839                "v6.0.11": True
840            }
841        },
842        "query_v1_port": {
843            "type": "integer",
844            "revisions": {
845                "v6.0.0": True,
846                "v7.0.0": True,
847                "v6.0.5": True,
848                "v6.4.4": True,
849                "v6.4.0": True,
850                "v6.4.1": True,
851                "v6.2.0": True,
852                "v6.2.3": True,
853                "v6.2.5": True,
854                "v6.2.7": True,
855                "v6.0.11": True
856            }
857        },
858        "hosts": {
859            "type": "list",
860            "children": {
861                "ip": {
862                    "type": "string",
863                    "revisions": {
864                        "v6.0.0": True,
865                        "v7.0.0": True,
866                        "v6.0.5": True,
867                        "v6.4.4": True,
868                        "v6.4.0": True,
869                        "v6.4.1": True,
870                        "v6.2.0": True,
871                        "v6.2.3": True,
872                        "v6.2.5": True,
873                        "v6.2.7": True,
874                        "v6.0.11": True
875                    }
876                },
877                "source_ip": {
878                    "type": "string",
879                    "revisions": {
880                        "v6.0.0": True,
881                        "v7.0.0": True,
882                        "v6.0.5": 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                        "v6.0.11": True
891                    }
892                },
893                "id": {
894                    "type": "integer",
895                    "revisions": {
896                        "v6.0.0": True,
897                        "v7.0.0": True,
898                        "v6.0.5": True,
899                        "v6.4.4": True,
900                        "v6.4.0": True,
901                        "v6.4.1": True,
902                        "v6.2.0": True,
903                        "v6.2.3": True,
904                        "v6.2.5": True,
905                        "v6.2.7": True,
906                        "v6.0.11": True
907                    }
908                },
909                "ha_direct": {
910                    "type": "string",
911                    "options": [
912                        {
913                            "value": "enable",
914                            "revisions": {
915                                "v6.0.0": True,
916                                "v7.0.0": True,
917                                "v6.0.5": True,
918                                "v6.4.4": True,
919                                "v6.4.0": True,
920                                "v6.4.1": True,
921                                "v6.2.0": True,
922                                "v6.2.3": True,
923                                "v6.2.5": True,
924                                "v6.2.7": True,
925                                "v6.0.11": True
926                            }
927                        },
928                        {
929                            "value": "disable",
930                            "revisions": {
931                                "v6.0.0": True,
932                                "v7.0.0": True,
933                                "v6.0.5": True,
934                                "v6.4.4": True,
935                                "v6.4.0": True,
936                                "v6.4.1": True,
937                                "v6.2.0": True,
938                                "v6.2.3": True,
939                                "v6.2.5": True,
940                                "v6.2.7": True,
941                                "v6.0.11": True
942                            }
943                        }
944                    ],
945                    "revisions": {
946                        "v6.0.0": True,
947                        "v7.0.0": True,
948                        "v6.0.5": True,
949                        "v6.4.4": True,
950                        "v6.4.0": True,
951                        "v6.4.1": True,
952                        "v6.2.0": True,
953                        "v6.2.3": True,
954                        "v6.2.5": True,
955                        "v6.2.7": True,
956                        "v6.0.11": True
957                    }
958                },
959                "host_type": {
960                    "type": "string",
961                    "options": [
962                        {
963                            "value": "any",
964                            "revisions": {
965                                "v6.0.0": True,
966                                "v7.0.0": True,
967                                "v6.0.5": True,
968                                "v6.4.4": True,
969                                "v6.4.0": True,
970                                "v6.4.1": True,
971                                "v6.2.0": True,
972                                "v6.2.3": True,
973                                "v6.2.5": True,
974                                "v6.2.7": True,
975                                "v6.0.11": True
976                            }
977                        },
978                        {
979                            "value": "query",
980                            "revisions": {
981                                "v6.0.0": True,
982                                "v7.0.0": True,
983                                "v6.0.5": True,
984                                "v6.4.4": True,
985                                "v6.4.0": True,
986                                "v6.4.1": True,
987                                "v6.2.0": True,
988                                "v6.2.3": True,
989                                "v6.2.5": True,
990                                "v6.2.7": True,
991                                "v6.0.11": True
992                            }
993                        },
994                        {
995                            "value": "trap",
996                            "revisions": {
997                                "v6.0.0": True,
998                                "v7.0.0": True,
999                                "v6.0.5": True,
1000                                "v6.4.4": True,
1001                                "v6.4.0": True,
1002                                "v6.4.1": True,
1003                                "v6.2.0": True,
1004                                "v6.2.3": True,
1005                                "v6.2.5": True,
1006                                "v6.2.7": True,
1007                                "v6.0.11": True
1008                            }
1009                        }
1010                    ],
1011                    "revisions": {
1012                        "v6.0.0": True,
1013                        "v7.0.0": True,
1014                        "v6.0.5": 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                        "v6.0.11": True
1023                    }
1024                }
1025            },
1026            "revisions": {
1027                "v6.0.0": True,
1028                "v7.0.0": True,
1029                "v6.0.5": True,
1030                "v6.4.4": True,
1031                "v6.4.0": True,
1032                "v6.4.1": True,
1033                "v6.2.0": True,
1034                "v6.2.3": True,
1035                "v6.2.5": True,
1036                "v6.2.7": True,
1037                "v6.0.11": True
1038            }
1039        },
1040        "trap_v1_status": {
1041            "type": "string",
1042            "options": [
1043                {
1044                    "value": "enable",
1045                    "revisions": {
1046                        "v6.0.0": True,
1047                        "v7.0.0": True,
1048                        "v6.0.5": True,
1049                        "v6.4.4": True,
1050                        "v6.4.0": True,
1051                        "v6.4.1": True,
1052                        "v6.2.0": True,
1053                        "v6.2.3": True,
1054                        "v6.2.5": True,
1055                        "v6.2.7": True,
1056                        "v6.0.11": True
1057                    }
1058                },
1059                {
1060                    "value": "disable",
1061                    "revisions": {
1062                        "v6.0.0": True,
1063                        "v7.0.0": True,
1064                        "v6.0.5": True,
1065                        "v6.4.4": True,
1066                        "v6.4.0": True,
1067                        "v6.4.1": True,
1068                        "v6.2.0": True,
1069                        "v6.2.3": True,
1070                        "v6.2.5": True,
1071                        "v6.2.7": True,
1072                        "v6.0.11": True
1073                    }
1074                }
1075            ],
1076            "revisions": {
1077                "v6.0.0": True,
1078                "v7.0.0": True,
1079                "v6.0.5": True,
1080                "v6.4.4": True,
1081                "v6.4.0": True,
1082                "v6.4.1": True,
1083                "v6.2.0": True,
1084                "v6.2.3": True,
1085                "v6.2.5": True,
1086                "v6.2.7": True,
1087                "v6.0.11": True
1088            }
1089        },
1090        "trap_v1_lport": {
1091            "type": "integer",
1092            "revisions": {
1093                "v6.0.0": True,
1094                "v7.0.0": True,
1095                "v6.0.5": True,
1096                "v6.4.4": True,
1097                "v6.4.0": True,
1098                "v6.4.1": True,
1099                "v6.2.0": True,
1100                "v6.2.3": True,
1101                "v6.2.5": True,
1102                "v6.2.7": True,
1103                "v6.0.11": True
1104            }
1105        },
1106        "trap_v2c_status": {
1107            "type": "string",
1108            "options": [
1109                {
1110                    "value": "enable",
1111                    "revisions": {
1112                        "v6.0.0": True,
1113                        "v7.0.0": True,
1114                        "v6.0.5": True,
1115                        "v6.4.4": True,
1116                        "v6.4.0": True,
1117                        "v6.4.1": True,
1118                        "v6.2.0": True,
1119                        "v6.2.3": True,
1120                        "v6.2.5": True,
1121                        "v6.2.7": True,
1122                        "v6.0.11": True
1123                    }
1124                },
1125                {
1126                    "value": "disable",
1127                    "revisions": {
1128                        "v6.0.0": True,
1129                        "v7.0.0": True,
1130                        "v6.0.5": True,
1131                        "v6.4.4": True,
1132                        "v6.4.0": True,
1133                        "v6.4.1": True,
1134                        "v6.2.0": True,
1135                        "v6.2.3": True,
1136                        "v6.2.5": True,
1137                        "v6.2.7": True,
1138                        "v6.0.11": True
1139                    }
1140                }
1141            ],
1142            "revisions": {
1143                "v6.0.0": True,
1144                "v7.0.0": True,
1145                "v6.0.5": True,
1146                "v6.4.4": True,
1147                "v6.4.0": True,
1148                "v6.4.1": True,
1149                "v6.2.0": True,
1150                "v6.2.3": True,
1151                "v6.2.5": True,
1152                "v6.2.7": True,
1153                "v6.0.11": True
1154            }
1155        },
1156        "trap_v1_rport": {
1157            "type": "integer",
1158            "revisions": {
1159                "v6.0.0": True,
1160                "v7.0.0": True,
1161                "v6.0.5": True,
1162                "v6.4.4": True,
1163                "v6.4.0": True,
1164                "v6.4.1": True,
1165                "v6.2.0": True,
1166                "v6.2.3": True,
1167                "v6.2.5": True,
1168                "v6.2.7": True,
1169                "v6.0.11": True
1170            }
1171        },
1172        "events": {
1173            "multiple_values": True,
1174            "type": "list",
1175            "options": [
1176                {
1177                    "value": "cpu-high",
1178                    "revisions": {
1179                        "v6.0.0": True,
1180                        "v7.0.0": True,
1181                        "v6.0.5": True,
1182                        "v6.4.4": True,
1183                        "v6.4.0": True,
1184                        "v6.4.1": True,
1185                        "v6.2.0": True,
1186                        "v6.2.3": True,
1187                        "v6.2.5": True,
1188                        "v6.2.7": True,
1189                        "v6.0.11": True
1190                    }
1191                },
1192                {
1193                    "value": "mem-low",
1194                    "revisions": {
1195                        "v6.0.0": True,
1196                        "v7.0.0": True,
1197                        "v6.0.5": True,
1198                        "v6.4.4": True,
1199                        "v6.4.0": True,
1200                        "v6.4.1": True,
1201                        "v6.2.0": True,
1202                        "v6.2.3": True,
1203                        "v6.2.5": True,
1204                        "v6.2.7": True,
1205                        "v6.0.11": True
1206                    }
1207                },
1208                {
1209                    "value": "log-full",
1210                    "revisions": {
1211                        "v6.0.0": True,
1212                        "v7.0.0": True,
1213                        "v6.0.5": True,
1214                        "v6.4.4": True,
1215                        "v6.4.0": True,
1216                        "v6.4.1": True,
1217                        "v6.2.0": True,
1218                        "v6.2.3": True,
1219                        "v6.2.5": True,
1220                        "v6.2.7": True,
1221                        "v6.0.11": True
1222                    }
1223                },
1224                {
1225                    "value": "intf-ip",
1226                    "revisions": {
1227                        "v6.0.0": True,
1228                        "v7.0.0": True,
1229                        "v6.0.5": True,
1230                        "v6.4.4": True,
1231                        "v6.4.0": True,
1232                        "v6.4.1": True,
1233                        "v6.2.0": True,
1234                        "v6.2.3": True,
1235                        "v6.2.5": True,
1236                        "v6.2.7": True,
1237                        "v6.0.11": True
1238                    }
1239                },
1240                {
1241                    "value": "vpn-tun-up",
1242                    "revisions": {
1243                        "v6.0.0": True,
1244                        "v7.0.0": True,
1245                        "v6.0.5": True,
1246                        "v6.4.4": True,
1247                        "v6.4.0": True,
1248                        "v6.4.1": True,
1249                        "v6.2.0": True,
1250                        "v6.2.3": True,
1251                        "v6.2.5": True,
1252                        "v6.2.7": True,
1253                        "v6.0.11": True
1254                    }
1255                },
1256                {
1257                    "value": "vpn-tun-down",
1258                    "revisions": {
1259                        "v6.0.0": True,
1260                        "v7.0.0": True,
1261                        "v6.0.5": True,
1262                        "v6.4.4": True,
1263                        "v6.4.0": True,
1264                        "v6.4.1": True,
1265                        "v6.2.0": True,
1266                        "v6.2.3": True,
1267                        "v6.2.5": True,
1268                        "v6.2.7": True,
1269                        "v6.0.11": True
1270                    }
1271                },
1272                {
1273                    "value": "ha-switch",
1274                    "revisions": {
1275                        "v6.0.0": True,
1276                        "v7.0.0": True,
1277                        "v6.0.5": True,
1278                        "v6.4.4": True,
1279                        "v6.4.0": True,
1280                        "v6.4.1": True,
1281                        "v6.2.0": True,
1282                        "v6.2.3": True,
1283                        "v6.2.5": True,
1284                        "v6.2.7": True,
1285                        "v6.0.11": True
1286                    }
1287                },
1288                {
1289                    "value": "ha-hb-failure",
1290                    "revisions": {
1291                        "v6.0.0": True,
1292                        "v7.0.0": True,
1293                        "v6.0.5": True,
1294                        "v6.4.4": True,
1295                        "v6.4.0": True,
1296                        "v6.4.1": True,
1297                        "v6.2.0": True,
1298                        "v6.2.3": True,
1299                        "v6.2.5": True,
1300                        "v6.2.7": True,
1301                        "v6.0.11": True
1302                    }
1303                },
1304                {
1305                    "value": "ips-signature",
1306                    "revisions": {
1307                        "v6.0.0": True,
1308                        "v7.0.0": True,
1309                        "v6.0.5": True,
1310                        "v6.4.4": True,
1311                        "v6.4.0": True,
1312                        "v6.4.1": True,
1313                        "v6.2.0": True,
1314                        "v6.2.3": True,
1315                        "v6.2.5": True,
1316                        "v6.2.7": True,
1317                        "v6.0.11": True
1318                    }
1319                },
1320                {
1321                    "value": "ips-anomaly",
1322                    "revisions": {
1323                        "v6.0.0": True,
1324                        "v7.0.0": True,
1325                        "v6.0.5": True,
1326                        "v6.4.4": True,
1327                        "v6.4.0": True,
1328                        "v6.4.1": True,
1329                        "v6.2.0": True,
1330                        "v6.2.3": True,
1331                        "v6.2.5": True,
1332                        "v6.2.7": True,
1333                        "v6.0.11": True
1334                    }
1335                },
1336                {
1337                    "value": "av-virus",
1338                    "revisions": {
1339                        "v6.0.0": True,
1340                        "v7.0.0": True,
1341                        "v6.0.5": True,
1342                        "v6.4.4": True,
1343                        "v6.4.0": True,
1344                        "v6.4.1": True,
1345                        "v6.2.0": True,
1346                        "v6.2.3": True,
1347                        "v6.2.5": True,
1348                        "v6.2.7": True,
1349                        "v6.0.11": True
1350                    }
1351                },
1352                {
1353                    "value": "av-oversize",
1354                    "revisions": {
1355                        "v6.0.0": True,
1356                        "v7.0.0": True,
1357                        "v6.0.5": True,
1358                        "v6.4.4": True,
1359                        "v6.4.0": True,
1360                        "v6.4.1": True,
1361                        "v6.2.0": True,
1362                        "v6.2.3": True,
1363                        "v6.2.5": True,
1364                        "v6.2.7": True,
1365                        "v6.0.11": True
1366                    }
1367                },
1368                {
1369                    "value": "av-pattern",
1370                    "revisions": {
1371                        "v6.0.0": True,
1372                        "v7.0.0": True,
1373                        "v6.0.5": True,
1374                        "v6.4.4": True,
1375                        "v6.4.0": True,
1376                        "v6.4.1": True,
1377                        "v6.2.0": True,
1378                        "v6.2.3": True,
1379                        "v6.2.5": True,
1380                        "v6.2.7": True,
1381                        "v6.0.11": True
1382                    }
1383                },
1384                {
1385                    "value": "av-fragmented",
1386                    "revisions": {
1387                        "v6.0.0": True,
1388                        "v7.0.0": True,
1389                        "v6.0.5": True,
1390                        "v6.4.4": True,
1391                        "v6.4.0": True,
1392                        "v6.4.1": True,
1393                        "v6.2.0": True,
1394                        "v6.2.3": True,
1395                        "v6.2.5": True,
1396                        "v6.2.7": True,
1397                        "v6.0.11": True
1398                    }
1399                },
1400                {
1401                    "value": "fm-if-change",
1402                    "revisions": {
1403                        "v6.0.0": True,
1404                        "v7.0.0": True,
1405                        "v6.0.5": True,
1406                        "v6.4.4": True,
1407                        "v6.4.0": True,
1408                        "v6.4.1": True,
1409                        "v6.2.0": True,
1410                        "v6.2.3": True,
1411                        "v6.2.5": True,
1412                        "v6.2.7": True,
1413                        "v6.0.11": True
1414                    }
1415                },
1416                {
1417                    "value": "fm-conf-change",
1418                    "revisions": {
1419                        "v6.0.0": True,
1420                        "v7.0.0": True,
1421                        "v6.0.5": True,
1422                        "v6.4.4": True,
1423                        "v6.4.0": True,
1424                        "v6.4.1": True,
1425                        "v6.2.0": True,
1426                        "v6.2.3": True,
1427                        "v6.2.5": True,
1428                        "v6.2.7": True,
1429                        "v6.0.11": True
1430                    }
1431                },
1432                {
1433                    "value": "bgp-established",
1434                    "revisions": {
1435                        "v6.0.0": True,
1436                        "v7.0.0": True,
1437                        "v6.0.5": True,
1438                        "v6.4.4": True,
1439                        "v6.4.0": True,
1440                        "v6.4.1": True,
1441                        "v6.2.0": True,
1442                        "v6.2.3": True,
1443                        "v6.2.5": True,
1444                        "v6.2.7": True,
1445                        "v6.0.11": True
1446                    }
1447                },
1448                {
1449                    "value": "bgp-backward-transition",
1450                    "revisions": {
1451                        "v6.0.0": True,
1452                        "v7.0.0": True,
1453                        "v6.0.5": True,
1454                        "v6.4.4": True,
1455                        "v6.4.0": True,
1456                        "v6.4.1": True,
1457                        "v6.2.0": True,
1458                        "v6.2.3": True,
1459                        "v6.2.5": True,
1460                        "v6.2.7": True,
1461                        "v6.0.11": True
1462                    }
1463                },
1464                {
1465                    "value": "ha-member-up",
1466                    "revisions": {
1467                        "v6.0.0": True,
1468                        "v7.0.0": True,
1469                        "v6.0.5": True,
1470                        "v6.4.4": True,
1471                        "v6.4.0": True,
1472                        "v6.4.1": True,
1473                        "v6.2.0": True,
1474                        "v6.2.3": True,
1475                        "v6.2.5": True,
1476                        "v6.2.7": True,
1477                        "v6.0.11": True
1478                    }
1479                },
1480                {
1481                    "value": "ha-member-down",
1482                    "revisions": {
1483                        "v6.0.0": True,
1484                        "v7.0.0": True,
1485                        "v6.0.5": True,
1486                        "v6.4.4": True,
1487                        "v6.4.0": True,
1488                        "v6.4.1": True,
1489                        "v6.2.0": True,
1490                        "v6.2.3": True,
1491                        "v6.2.5": True,
1492                        "v6.2.7": True,
1493                        "v6.0.11": True
1494                    }
1495                },
1496                {
1497                    "value": "ent-conf-change",
1498                    "revisions": {
1499                        "v6.0.0": True,
1500                        "v7.0.0": True,
1501                        "v6.0.5": True,
1502                        "v6.4.4": True,
1503                        "v6.4.0": True,
1504                        "v6.4.1": True,
1505                        "v6.2.0": True,
1506                        "v6.2.3": True,
1507                        "v6.2.5": True,
1508                        "v6.2.7": True,
1509                        "v6.0.11": True
1510                    }
1511                },
1512                {
1513                    "value": "av-conserve",
1514                    "revisions": {
1515                        "v6.0.0": True,
1516                        "v7.0.0": True,
1517                        "v6.0.5": True,
1518                        "v6.4.4": True,
1519                        "v6.4.0": True,
1520                        "v6.4.1": True,
1521                        "v6.2.0": True,
1522                        "v6.2.3": True,
1523                        "v6.2.5": True,
1524                        "v6.2.7": True,
1525                        "v6.0.11": True
1526                    }
1527                },
1528                {
1529                    "value": "av-bypass",
1530                    "revisions": {
1531                        "v6.0.0": True,
1532                        "v7.0.0": True,
1533                        "v6.0.5": True,
1534                        "v6.4.4": True,
1535                        "v6.4.0": True,
1536                        "v6.4.1": True,
1537                        "v6.2.0": True,
1538                        "v6.2.3": True,
1539                        "v6.2.5": True,
1540                        "v6.2.7": True,
1541                        "v6.0.11": True
1542                    }
1543                },
1544                {
1545                    "value": "av-oversize-passed",
1546                    "revisions": {
1547                        "v6.0.0": True,
1548                        "v7.0.0": True,
1549                        "v6.0.5": True,
1550                        "v6.4.4": True,
1551                        "v6.4.0": True,
1552                        "v6.4.1": True,
1553                        "v6.2.0": True,
1554                        "v6.2.3": True,
1555                        "v6.2.5": True,
1556                        "v6.2.7": True,
1557                        "v6.0.11": True
1558                    }
1559                },
1560                {
1561                    "value": "av-oversize-blocked",
1562                    "revisions": {
1563                        "v6.0.0": True,
1564                        "v7.0.0": True,
1565                        "v6.0.5": True,
1566                        "v6.4.4": True,
1567                        "v6.4.0": True,
1568                        "v6.4.1": True,
1569                        "v6.2.0": True,
1570                        "v6.2.3": True,
1571                        "v6.2.5": True,
1572                        "v6.2.7": True,
1573                        "v6.0.11": True
1574                    }
1575                },
1576                {
1577                    "value": "ips-pkg-update",
1578                    "revisions": {
1579                        "v6.0.0": True,
1580                        "v7.0.0": True,
1581                        "v6.0.5": True,
1582                        "v6.4.4": True,
1583                        "v6.4.0": True,
1584                        "v6.4.1": True,
1585                        "v6.2.0": True,
1586                        "v6.2.3": True,
1587                        "v6.2.5": True,
1588                        "v6.2.7": True,
1589                        "v6.0.11": True
1590                    }
1591                },
1592                {
1593                    "value": "ips-fail-open",
1594                    "revisions": {
1595                        "v6.0.0": True,
1596                        "v7.0.0": True,
1597                        "v6.0.5": True,
1598                        "v6.4.4": True,
1599                        "v6.4.0": True,
1600                        "v6.4.1": True,
1601                        "v6.2.0": True,
1602                        "v6.2.3": True,
1603                        "v6.2.5": True,
1604                        "v6.2.7": True,
1605                        "v6.0.11": True
1606                    }
1607                },
1608                {
1609                    "value": "temperature-high",
1610                    "revisions": {
1611                        "v6.0.0": True,
1612                        "v7.0.0": False,
1613                        "v6.0.5": True,
1614                        "v6.4.4": True,
1615                        "v6.4.0": True,
1616                        "v6.4.1": True,
1617                        "v6.2.0": True,
1618                        "v6.2.3": True,
1619                        "v6.2.5": True,
1620                        "v6.2.7": True,
1621                        "v6.0.11": True
1622                    }
1623                },
1624                {
1625                    "value": "voltage-alert",
1626                    "revisions": {
1627                        "v6.0.0": True,
1628                        "v7.0.0": False,
1629                        "v6.0.5": True,
1630                        "v6.4.4": True,
1631                        "v6.4.0": True,
1632                        "v6.4.1": True,
1633                        "v6.2.0": True,
1634                        "v6.2.3": True,
1635                        "v6.2.5": True,
1636                        "v6.2.7": True,
1637                        "v6.0.11": True
1638                    }
1639                },
1640                {
1641                    "value": "power-supply-failure",
1642                    "revisions": {
1643                        "v6.0.0": True,
1644                        "v7.0.0": False,
1645                        "v6.0.5": True,
1646                        "v6.4.4": True,
1647                        "v6.4.0": True,
1648                        "v6.4.1": True,
1649                        "v6.2.0": True,
1650                        "v6.2.3": True,
1651                        "v6.2.5": True,
1652                        "v6.2.7": True,
1653                        "v6.0.11": True
1654                    }
1655                },
1656                {
1657                    "value": "faz-disconnect",
1658                    "revisions": {
1659                        "v6.0.0": True,
1660                        "v7.0.0": True,
1661                        "v6.0.5": True,
1662                        "v6.4.4": True,
1663                        "v6.4.0": True,
1664                        "v6.4.1": True,
1665                        "v6.2.0": True,
1666                        "v6.2.3": True,
1667                        "v6.2.5": True,
1668                        "v6.2.7": True,
1669                        "v6.0.11": True
1670                    }
1671                },
1672                {
1673                    "value": "fan-failure",
1674                    "revisions": {
1675                        "v6.0.0": True,
1676                        "v7.0.0": False,
1677                        "v6.0.5": True,
1678                        "v6.4.4": True,
1679                        "v6.4.0": True,
1680                        "v6.4.1": True,
1681                        "v6.2.0": True,
1682                        "v6.2.3": True,
1683                        "v6.2.5": True,
1684                        "v6.2.7": True,
1685                        "v6.0.11": True
1686                    }
1687                },
1688                {
1689                    "value": "wc-ap-up",
1690                    "revisions": {
1691                        "v6.0.0": True,
1692                        "v7.0.0": True,
1693                        "v6.0.5": True,
1694                        "v6.4.4": True,
1695                        "v6.4.0": True,
1696                        "v6.4.1": True,
1697                        "v6.2.0": True,
1698                        "v6.2.3": True,
1699                        "v6.2.5": True,
1700                        "v6.2.7": True,
1701                        "v6.0.11": True
1702                    }
1703                },
1704                {
1705                    "value": "wc-ap-down",
1706                    "revisions": {
1707                        "v6.0.0": True,
1708                        "v7.0.0": True,
1709                        "v6.0.5": True,
1710                        "v6.4.4": True,
1711                        "v6.4.0": True,
1712                        "v6.4.1": True,
1713                        "v6.2.0": True,
1714                        "v6.2.3": True,
1715                        "v6.2.5": True,
1716                        "v6.2.7": True,
1717                        "v6.0.11": True
1718                    }
1719                },
1720                {
1721                    "value": "fswctl-session-up",
1722                    "revisions": {
1723                        "v6.0.0": True,
1724                        "v7.0.0": True,
1725                        "v6.0.5": True,
1726                        "v6.4.4": True,
1727                        "v6.4.0": True,
1728                        "v6.4.1": True,
1729                        "v6.2.0": True,
1730                        "v6.2.3": True,
1731                        "v6.2.5": True,
1732                        "v6.2.7": True,
1733                        "v6.0.11": True
1734                    }
1735                },
1736                {
1737                    "value": "fswctl-session-down",
1738                    "revisions": {
1739                        "v6.0.0": True,
1740                        "v7.0.0": True,
1741                        "v6.0.5": True,
1742                        "v6.4.4": True,
1743                        "v6.4.0": True,
1744                        "v6.4.1": True,
1745                        "v6.2.0": True,
1746                        "v6.2.3": True,
1747                        "v6.2.5": True,
1748                        "v6.2.7": True,
1749                        "v6.0.11": True
1750                    }
1751                },
1752                {
1753                    "value": "load-balance-real-server-down",
1754                    "revisions": {
1755                        "v6.0.0": True,
1756                        "v7.0.0": True,
1757                        "v6.0.5": True,
1758                        "v6.4.4": True,
1759                        "v6.4.0": True,
1760                        "v6.4.1": True,
1761                        "v6.2.0": True,
1762                        "v6.2.3": True,
1763                        "v6.2.5": True,
1764                        "v6.2.7": True,
1765                        "v6.0.11": True
1766                    }
1767                },
1768                {
1769                    "value": "device-new",
1770                    "revisions": {
1771                        "v6.0.0": True,
1772                        "v7.0.0": True,
1773                        "v6.0.5": True,
1774                        "v6.4.4": True,
1775                        "v6.4.0": True,
1776                        "v6.4.1": True,
1777                        "v6.2.0": True,
1778                        "v6.2.3": True,
1779                        "v6.2.5": True,
1780                        "v6.2.7": True,
1781                        "v6.0.11": True
1782                    }
1783                },
1784                {
1785                    "value": "per-cpu-high",
1786                    "revisions": {
1787                        "v6.0.0": True,
1788                        "v7.0.0": True,
1789                        "v6.0.5": True,
1790                        "v6.4.4": True,
1791                        "v6.4.0": True,
1792                        "v6.4.1": True,
1793                        "v6.2.0": True,
1794                        "v6.2.3": True,
1795                        "v6.2.5": True,
1796                        "v6.2.7": True,
1797                        "v6.0.11": True
1798                    }
1799                },
1800                {
1801                    "value": "dhcp",
1802                    "revisions": {
1803                        "v6.4.4": True,
1804                        "v7.0.0": True,
1805                        "v6.4.0": True,
1806                        "v6.4.1": True
1807                    }
1808                },
1809                {
1810                    "value": "ospf-nbr-state-change",
1811                    "revisions": {
1812                        "v7.0.0": True
1813                    }
1814                },
1815                {
1816                    "value": "ospf-virtnbr-state-change",
1817                    "revisions": {
1818                        "v7.0.0": True
1819                    }
1820                }
1821            ],
1822            "revisions": {
1823                "v6.0.0": True,
1824                "v7.0.0": True,
1825                "v6.0.5": True,
1826                "v6.4.4": True,
1827                "v6.4.0": True,
1828                "v6.4.1": True,
1829                "v6.2.0": True,
1830                "v6.2.3": True,
1831                "v6.2.5": True,
1832                "v6.2.7": True,
1833                "v6.0.11": True
1834            }
1835        },
1836        "query_v2c_status": {
1837            "type": "string",
1838            "options": [
1839                {
1840                    "value": "enable",
1841                    "revisions": {
1842                        "v6.0.0": True,
1843                        "v7.0.0": True,
1844                        "v6.0.5": True,
1845                        "v6.4.4": True,
1846                        "v6.4.0": True,
1847                        "v6.4.1": True,
1848                        "v6.2.0": True,
1849                        "v6.2.3": True,
1850                        "v6.2.5": True,
1851                        "v6.2.7": True,
1852                        "v6.0.11": True
1853                    }
1854                },
1855                {
1856                    "value": "disable",
1857                    "revisions": {
1858                        "v6.0.0": True,
1859                        "v7.0.0": True,
1860                        "v6.0.5": True,
1861                        "v6.4.4": True,
1862                        "v6.4.0": True,
1863                        "v6.4.1": True,
1864                        "v6.2.0": True,
1865                        "v6.2.3": True,
1866                        "v6.2.5": True,
1867                        "v6.2.7": True,
1868                        "v6.0.11": True
1869                    }
1870                }
1871            ],
1872            "revisions": {
1873                "v6.0.0": True,
1874                "v7.0.0": True,
1875                "v6.0.5": True,
1876                "v6.4.4": True,
1877                "v6.4.0": True,
1878                "v6.4.1": True,
1879                "v6.2.0": True,
1880                "v6.2.3": True,
1881                "v6.2.5": True,
1882                "v6.2.7": True,
1883                "v6.0.11": True
1884            }
1885        },
1886        "trap_v2c_lport": {
1887            "type": "integer",
1888            "revisions": {
1889                "v6.0.0": True,
1890                "v7.0.0": True,
1891                "v6.0.5": True,
1892                "v6.4.4": True,
1893                "v6.4.0": True,
1894                "v6.4.1": True,
1895                "v6.2.0": True,
1896                "v6.2.3": True,
1897                "v6.2.5": True,
1898                "v6.2.7": True,
1899                "v6.0.11": True
1900            }
1901        },
1902        "query_v2c_port": {
1903            "type": "integer",
1904            "revisions": {
1905                "v6.0.0": True,
1906                "v7.0.0": True,
1907                "v6.0.5": True,
1908                "v6.4.4": True,
1909                "v6.4.0": True,
1910                "v6.4.1": True,
1911                "v6.2.0": True,
1912                "v6.2.3": True,
1913                "v6.2.5": True,
1914                "v6.2.7": True,
1915                "v6.0.11": True
1916            }
1917        }
1918    },
1919    "revisions": {
1920        "v6.0.0": True,
1921        "v7.0.0": True,
1922        "v6.0.5": True,
1923        "v6.4.4": True,
1924        "v6.4.0": True,
1925        "v6.4.1": True,
1926        "v6.2.0": True,
1927        "v6.2.3": True,
1928        "v6.2.5": True,
1929        "v6.2.7": True,
1930        "v6.0.11": True
1931    }
1932}
1933
1934
1935def main():
1936    module_spec = schema_to_module_spec(versioned_schema)
1937    mkeyname = 'id'
1938    fields = {
1939        "access_token": {"required": False, "type": "str", "no_log": True},
1940        "enable_log": {"required": False, "type": bool},
1941        "vdom": {"required": False, "type": "str", "default": "root"},
1942        "state": {"required": True, "type": "str",
1943                  "choices": ["present", "absent"]},
1944        "system_snmp_community": {
1945            "required": False, "type": "dict", "default": None,
1946            "options": {
1947            }
1948        }
1949    }
1950    for attribute_name in module_spec['options']:
1951        fields["system_snmp_community"]['options'][attribute_name] = module_spec['options'][attribute_name]
1952        if mkeyname and mkeyname == attribute_name:
1953            fields["system_snmp_community"]['options'][attribute_name]['required'] = True
1954
1955    check_legacy_fortiosapi()
1956    module = AnsibleModule(argument_spec=fields,
1957                           supports_check_mode=True)
1958
1959    versions_check_result = None
1960    if module._socket_path:
1961        connection = Connection(module._socket_path)
1962        if 'access_token' in module.params:
1963            connection.set_option('access_token', module.params['access_token'])
1964
1965        if 'enable_log' in module.params:
1966            connection.set_option('enable_log', module.params['enable_log'])
1967        else:
1968            connection.set_option('enable_log', False)
1969        fos = FortiOSHandler(connection, module, mkeyname)
1970        versions_check_result = check_schema_versioning(fos, versioned_schema, "system_snmp_community")
1971
1972        is_error, has_changed, result = fortios_system_snmp(module.params, fos, module.check_mode)
1973
1974    else:
1975        module.fail_json(**FAIL_SOCKET_MSG)
1976
1977    if versions_check_result and versions_check_result['matched'] is False:
1978        module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv")
1979
1980    if not is_error:
1981        if versions_check_result and versions_check_result['matched'] is False:
1982            module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result)
1983        else:
1984            module.exit_json(changed=has_changed, meta=result)
1985    else:
1986        if versions_check_result and versions_check_result['matched'] is False:
1987            module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result)
1988        else:
1989            module.fail_json(msg="Error in repo", meta=result)
1990
1991
1992if __name__ == '__main__':
1993    main()
1994