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_switch_controller_qos_dot1p_map
27short_description: Configure FortiSwitch QoS 802.1p 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 switch_controller_qos feature and dot1p_map 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    switch_controller_qos_dot1p_map:
76        description:
77            - Configure FortiSwitch QoS 802.1p.
78        default: null
79        type: dict
80        suboptions:
81            description:
82                description:
83                    - Description of the 802.1p name.
84                type: str
85            egress_pri_tagging:
86                description:
87                    - Enable/disable egress priority-tag frame.
88                type: str
89                choices:
90                    - disable
91                    - enable
92            name:
93                description:
94                    - Dot1p map name.
95                required: true
96                type: str
97            priority_0:
98                description:
99                    - COS queue mapped to dot1p priority number.
100                type: str
101                choices:
102                    - queue-0
103                    - queue-1
104                    - queue-2
105                    - queue-3
106                    - queue-4
107                    - queue-5
108                    - queue-6
109                    - queue-7
110            priority_1:
111                description:
112                    - COS queue mapped to dot1p priority number.
113                type: str
114                choices:
115                    - queue-0
116                    - queue-1
117                    - queue-2
118                    - queue-3
119                    - queue-4
120                    - queue-5
121                    - queue-6
122                    - queue-7
123            priority_2:
124                description:
125                    - COS queue mapped to dot1p priority number.
126                type: str
127                choices:
128                    - queue-0
129                    - queue-1
130                    - queue-2
131                    - queue-3
132                    - queue-4
133                    - queue-5
134                    - queue-6
135                    - queue-7
136            priority_3:
137                description:
138                    - COS queue mapped to dot1p priority number.
139                type: str
140                choices:
141                    - queue-0
142                    - queue-1
143                    - queue-2
144                    - queue-3
145                    - queue-4
146                    - queue-5
147                    - queue-6
148                    - queue-7
149            priority_4:
150                description:
151                    - COS queue mapped to dot1p priority number.
152                type: str
153                choices:
154                    - queue-0
155                    - queue-1
156                    - queue-2
157                    - queue-3
158                    - queue-4
159                    - queue-5
160                    - queue-6
161                    - queue-7
162            priority_5:
163                description:
164                    - COS queue mapped to dot1p priority number.
165                type: str
166                choices:
167                    - queue-0
168                    - queue-1
169                    - queue-2
170                    - queue-3
171                    - queue-4
172                    - queue-5
173                    - queue-6
174                    - queue-7
175            priority_6:
176                description:
177                    - COS queue mapped to dot1p priority number.
178                type: str
179                choices:
180                    - queue-0
181                    - queue-1
182                    - queue-2
183                    - queue-3
184                    - queue-4
185                    - queue-5
186                    - queue-6
187                    - queue-7
188            priority_7:
189                description:
190                    - COS queue mapped to dot1p priority number.
191                type: str
192                choices:
193                    - queue-0
194                    - queue-1
195                    - queue-2
196                    - queue-3
197                    - queue-4
198                    - queue-5
199                    - queue-6
200                    - queue-7
201'''
202
203EXAMPLES = '''
204- hosts: fortigates
205  collections:
206    - fortinet.fortios
207  connection: httpapi
208  vars:
209   vdom: "root"
210   ansible_httpapi_use_ssl: yes
211   ansible_httpapi_validate_certs: no
212   ansible_httpapi_port: 443
213  tasks:
214  - name: Configure FortiSwitch QoS 802.1p.
215    fortios_switch_controller_qos_dot1p_map:
216      vdom:  "{{ vdom }}"
217      state: "present"
218      access_token: "<your_own_value>"
219      switch_controller_qos_dot1p_map:
220        description: "<your_own_value>"
221        egress_pri_tagging: "disable"
222        name: "default_name_5"
223        priority_0: "queue-0"
224        priority_1: "queue-0"
225        priority_2: "queue-0"
226        priority_3: "queue-0"
227        priority_4: "queue-0"
228        priority_5: "queue-0"
229        priority_6: "queue-0"
230        priority_7: "queue-0"
231
232'''
233
234RETURN = '''
235build:
236  description: Build number of the fortigate image
237  returned: always
238  type: str
239  sample: '1547'
240http_method:
241  description: Last method used to provision the content into FortiGate
242  returned: always
243  type: str
244  sample: 'PUT'
245http_status:
246  description: Last result given by FortiGate on last operation applied
247  returned: always
248  type: str
249  sample: "200"
250mkey:
251  description: Master key (id) used in the last call to FortiGate
252  returned: success
253  type: str
254  sample: "id"
255name:
256  description: Name of the table used to fulfill the request
257  returned: always
258  type: str
259  sample: "urlfilter"
260path:
261  description: Path of the table used to fulfill the request
262  returned: always
263  type: str
264  sample: "webfilter"
265revision:
266  description: Internal revision number
267  returned: always
268  type: str
269  sample: "17.0.2.10658"
270serial:
271  description: Serial number of the unit
272  returned: always
273  type: str
274  sample: "FGVMEVYYQT3AB5352"
275status:
276  description: Indication of the operation's result
277  returned: always
278  type: str
279  sample: "success"
280vdom:
281  description: Virtual domain used
282  returned: always
283  type: str
284  sample: "root"
285version:
286  description: Version of the FortiGate
287  returned: always
288  type: str
289  sample: "v5.6.3"
290
291'''
292from ansible.module_utils.basic import AnsibleModule
293from ansible.module_utils.connection import Connection
294from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler
295from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi
296from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec
297from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning
298from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG
299from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison
300from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize
301
302
303def filter_switch_controller_qos_dot1p_map_data(json):
304    option_list = ['description', 'egress_pri_tagging', 'name',
305                   'priority_0', 'priority_1', 'priority_2',
306                   'priority_3', 'priority_4', 'priority_5',
307                   'priority_6', 'priority_7']
308    dictionary = {}
309
310    for attribute in option_list:
311        if attribute in json and json[attribute] is not None:
312            dictionary[attribute] = json[attribute]
313
314    return dictionary
315
316
317def underscore_to_hyphen(data):
318    if isinstance(data, list):
319        for i, elem in enumerate(data):
320            data[i] = underscore_to_hyphen(elem)
321    elif isinstance(data, dict):
322        new_data = {}
323        for k, v in data.items():
324            new_data[k.replace('_', '-')] = underscore_to_hyphen(v)
325        data = new_data
326
327    return data
328
329
330def switch_controller_qos_dot1p_map(data, fos, check_mode=False):
331
332    vdom = data['vdom']
333
334    state = data['state']
335
336    switch_controller_qos_dot1p_map_data = data['switch_controller_qos_dot1p_map']
337    filtered_data = underscore_to_hyphen(filter_switch_controller_qos_dot1p_map_data(switch_controller_qos_dot1p_map_data))
338
339    # check_mode starts from here
340    if check_mode:
341        mkey = fos.get_mkey('system', 'interface', filtered_data, vdom=vdom)
342        current_data = fos.get('system', 'interface', vdom=vdom, mkey=mkey)
343        is_existed = current_data and current_data.get('http_status') == 200 \
344            and isinstance(current_data.get('results'), list) \
345            and len(current_data['results']) > 0
346
347        # 2. if it exists and the state is 'present' then compare current settings with desired
348        if state == 'present' or state is True:
349            if mkey is None:
350                return False, True, filtered_data
351
352            # if mkey exists then compare each other
353            # record exits and they're matched or not
354            if is_existed:
355                is_same = is_same_comparison(
356                    serialize(current_data['results'][0]), serialize(filtered_data))
357                return False, not is_same, filtered_data
358
359            # record does not exist
360            return False, True, filtered_data
361
362        if state == 'absent':
363            if mkey is None:
364                return False, False, filtered_data
365
366            if is_existed:
367                return False, True, filtered_data
368            return False, False, filtered_data
369
370        return True, False, {'reason: ': 'Must provide state parameter'}
371
372    if state == "present" or state is True:
373        return fos.set('switch-controller.qos',
374                       'dot1p-map',
375                       data=filtered_data,
376                       vdom=vdom)
377
378    elif state == "absent":
379        return fos.delete('switch-controller.qos',
380                          'dot1p-map',
381                          mkey=filtered_data['name'],
382                          vdom=vdom)
383    else:
384        fos._module.fail_json(msg='state must be present or absent!')
385
386
387def is_successful_status(status):
388    return status['status'] == "success" or \
389        status['http_method'] == "DELETE" and status['http_status'] == 404
390
391
392def fortios_switch_controller_qos(data, fos, check_mode):
393
394    if data['switch_controller_qos_dot1p_map']:
395        resp = switch_controller_qos_dot1p_map(data, fos, check_mode)
396    else:
397        fos._module.fail_json(msg='missing task body: %s' % ('switch_controller_qos_dot1p_map'))
398    if check_mode:
399        return resp
400    return not is_successful_status(resp), \
401        resp['status'] == "success" and \
402        (resp['revision_changed'] if 'revision_changed' in resp else True), \
403        resp
404
405
406versioned_schema = {
407    "type": "list",
408    "children": {
409        "name": {
410            "type": "string",
411            "revisions": {
412                "v6.0.0": True,
413                "v7.0.0": True,
414                "v6.0.5": True,
415                "v6.4.4": True,
416                "v6.4.0": True,
417                "v6.4.1": True,
418                "v6.2.0": True,
419                "v6.2.3": True,
420                "v6.2.5": True,
421                "v6.2.7": True,
422                "v6.0.11": True
423            }
424        },
425        "description": {
426            "type": "string",
427            "revisions": {
428                "v6.0.0": True,
429                "v7.0.0": True,
430                "v6.0.5": True,
431                "v6.4.4": True,
432                "v6.4.0": True,
433                "v6.4.1": True,
434                "v6.2.0": True,
435                "v6.2.3": True,
436                "v6.2.5": True,
437                "v6.2.7": True,
438                "v6.0.11": True
439            }
440        },
441        "egress_pri_tagging": {
442            "type": "string",
443            "options": [
444                {
445                    "value": "disable",
446                    "revisions": {
447                        "v7.0.0": True,
448                        "v6.4.4": True,
449                        "v6.4.0": True,
450                        "v6.4.1": True,
451                        "v6.2.0": True,
452                        "v6.2.3": True,
453                        "v6.2.5": True,
454                        "v6.2.7": True
455                    }
456                },
457                {
458                    "value": "enable",
459                    "revisions": {
460                        "v7.0.0": True,
461                        "v6.4.4": True,
462                        "v6.4.0": True,
463                        "v6.4.1": True,
464                        "v6.2.0": True,
465                        "v6.2.3": True,
466                        "v6.2.5": True,
467                        "v6.2.7": True
468                    }
469                }
470            ],
471            "revisions": {
472                "v7.0.0": True,
473                "v6.4.4": True,
474                "v6.4.0": True,
475                "v6.4.1": True,
476                "v6.2.0": True,
477                "v6.2.3": True,
478                "v6.2.5": True,
479                "v6.2.7": True
480            }
481        },
482        "priority_7": {
483            "type": "string",
484            "options": [
485                {
486                    "value": "queue-0",
487                    "revisions": {
488                        "v6.0.0": True,
489                        "v7.0.0": True,
490                        "v6.0.5": True,
491                        "v6.4.4": True,
492                        "v6.4.0": True,
493                        "v6.4.1": True,
494                        "v6.2.0": True,
495                        "v6.2.3": True,
496                        "v6.2.5": True,
497                        "v6.2.7": True,
498                        "v6.0.11": True
499                    }
500                },
501                {
502                    "value": "queue-1",
503                    "revisions": {
504                        "v6.0.0": True,
505                        "v7.0.0": True,
506                        "v6.0.5": True,
507                        "v6.4.4": True,
508                        "v6.4.0": True,
509                        "v6.4.1": True,
510                        "v6.2.0": True,
511                        "v6.2.3": True,
512                        "v6.2.5": True,
513                        "v6.2.7": True,
514                        "v6.0.11": True
515                    }
516                },
517                {
518                    "value": "queue-2",
519                    "revisions": {
520                        "v6.0.0": True,
521                        "v7.0.0": True,
522                        "v6.0.5": True,
523                        "v6.4.4": True,
524                        "v6.4.0": True,
525                        "v6.4.1": True,
526                        "v6.2.0": True,
527                        "v6.2.3": True,
528                        "v6.2.5": True,
529                        "v6.2.7": True,
530                        "v6.0.11": True
531                    }
532                },
533                {
534                    "value": "queue-3",
535                    "revisions": {
536                        "v6.0.0": True,
537                        "v7.0.0": True,
538                        "v6.0.5": True,
539                        "v6.4.4": True,
540                        "v6.4.0": True,
541                        "v6.4.1": True,
542                        "v6.2.0": True,
543                        "v6.2.3": True,
544                        "v6.2.5": True,
545                        "v6.2.7": True,
546                        "v6.0.11": True
547                    }
548                },
549                {
550                    "value": "queue-4",
551                    "revisions": {
552                        "v6.0.0": True,
553                        "v7.0.0": True,
554                        "v6.0.5": True,
555                        "v6.4.4": True,
556                        "v6.4.0": True,
557                        "v6.4.1": True,
558                        "v6.2.0": True,
559                        "v6.2.3": True,
560                        "v6.2.5": True,
561                        "v6.2.7": True,
562                        "v6.0.11": True
563                    }
564                },
565                {
566                    "value": "queue-5",
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                {
582                    "value": "queue-6",
583                    "revisions": {
584                        "v6.0.0": True,
585                        "v7.0.0": True,
586                        "v6.0.5": True,
587                        "v6.4.4": True,
588                        "v6.4.0": True,
589                        "v6.4.1": True,
590                        "v6.2.0": True,
591                        "v6.2.3": True,
592                        "v6.2.5": True,
593                        "v6.2.7": True,
594                        "v6.0.11": True
595                    }
596                },
597                {
598                    "value": "queue-7",
599                    "revisions": {
600                        "v6.0.0": True,
601                        "v7.0.0": True,
602                        "v6.0.5": True,
603                        "v6.4.4": True,
604                        "v6.4.0": True,
605                        "v6.4.1": True,
606                        "v6.2.0": True,
607                        "v6.2.3": True,
608                        "v6.2.5": True,
609                        "v6.2.7": True,
610                        "v6.0.11": True
611                    }
612                }
613            ],
614            "revisions": {
615                "v6.0.0": True,
616                "v7.0.0": True,
617                "v6.0.5": True,
618                "v6.4.4": True,
619                "v6.4.0": True,
620                "v6.4.1": True,
621                "v6.2.0": True,
622                "v6.2.3": True,
623                "v6.2.5": True,
624                "v6.2.7": True,
625                "v6.0.11": True
626            }
627        },
628        "priority_6": {
629            "type": "string",
630            "options": [
631                {
632                    "value": "queue-0",
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                {
648                    "value": "queue-1",
649                    "revisions": {
650                        "v6.0.0": True,
651                        "v7.0.0": True,
652                        "v6.0.5": True,
653                        "v6.4.4": True,
654                        "v6.4.0": True,
655                        "v6.4.1": True,
656                        "v6.2.0": True,
657                        "v6.2.3": True,
658                        "v6.2.5": True,
659                        "v6.2.7": True,
660                        "v6.0.11": True
661                    }
662                },
663                {
664                    "value": "queue-2",
665                    "revisions": {
666                        "v6.0.0": True,
667                        "v7.0.0": True,
668                        "v6.0.5": True,
669                        "v6.4.4": True,
670                        "v6.4.0": True,
671                        "v6.4.1": True,
672                        "v6.2.0": True,
673                        "v6.2.3": True,
674                        "v6.2.5": True,
675                        "v6.2.7": True,
676                        "v6.0.11": True
677                    }
678                },
679                {
680                    "value": "queue-3",
681                    "revisions": {
682                        "v6.0.0": True,
683                        "v7.0.0": True,
684                        "v6.0.5": True,
685                        "v6.4.4": True,
686                        "v6.4.0": True,
687                        "v6.4.1": True,
688                        "v6.2.0": True,
689                        "v6.2.3": True,
690                        "v6.2.5": True,
691                        "v6.2.7": True,
692                        "v6.0.11": True
693                    }
694                },
695                {
696                    "value": "queue-4",
697                    "revisions": {
698                        "v6.0.0": True,
699                        "v7.0.0": True,
700                        "v6.0.5": True,
701                        "v6.4.4": True,
702                        "v6.4.0": True,
703                        "v6.4.1": True,
704                        "v6.2.0": True,
705                        "v6.2.3": True,
706                        "v6.2.5": True,
707                        "v6.2.7": True,
708                        "v6.0.11": True
709                    }
710                },
711                {
712                    "value": "queue-5",
713                    "revisions": {
714                        "v6.0.0": True,
715                        "v7.0.0": True,
716                        "v6.0.5": True,
717                        "v6.4.4": True,
718                        "v6.4.0": True,
719                        "v6.4.1": True,
720                        "v6.2.0": True,
721                        "v6.2.3": True,
722                        "v6.2.5": True,
723                        "v6.2.7": True,
724                        "v6.0.11": True
725                    }
726                },
727                {
728                    "value": "queue-6",
729                    "revisions": {
730                        "v6.0.0": True,
731                        "v7.0.0": True,
732                        "v6.0.5": True,
733                        "v6.4.4": True,
734                        "v6.4.0": True,
735                        "v6.4.1": True,
736                        "v6.2.0": True,
737                        "v6.2.3": True,
738                        "v6.2.5": True,
739                        "v6.2.7": True,
740                        "v6.0.11": True
741                    }
742                },
743                {
744                    "value": "queue-7",
745                    "revisions": {
746                        "v6.0.0": True,
747                        "v7.0.0": True,
748                        "v6.0.5": True,
749                        "v6.4.4": True,
750                        "v6.4.0": True,
751                        "v6.4.1": True,
752                        "v6.2.0": True,
753                        "v6.2.3": True,
754                        "v6.2.5": True,
755                        "v6.2.7": True,
756                        "v6.0.11": True
757                    }
758                }
759            ],
760            "revisions": {
761                "v6.0.0": True,
762                "v7.0.0": True,
763                "v6.0.5": True,
764                "v6.4.4": True,
765                "v6.4.0": True,
766                "v6.4.1": True,
767                "v6.2.0": True,
768                "v6.2.3": True,
769                "v6.2.5": True,
770                "v6.2.7": True,
771                "v6.0.11": True
772            }
773        },
774        "priority_5": {
775            "type": "string",
776            "options": [
777                {
778                    "value": "queue-0",
779                    "revisions": {
780                        "v6.0.0": True,
781                        "v7.0.0": True,
782                        "v6.0.5": True,
783                        "v6.4.4": True,
784                        "v6.4.0": True,
785                        "v6.4.1": True,
786                        "v6.2.0": True,
787                        "v6.2.3": True,
788                        "v6.2.5": True,
789                        "v6.2.7": True,
790                        "v6.0.11": True
791                    }
792                },
793                {
794                    "value": "queue-1",
795                    "revisions": {
796                        "v6.0.0": True,
797                        "v7.0.0": True,
798                        "v6.0.5": True,
799                        "v6.4.4": True,
800                        "v6.4.0": True,
801                        "v6.4.1": True,
802                        "v6.2.0": True,
803                        "v6.2.3": True,
804                        "v6.2.5": True,
805                        "v6.2.7": True,
806                        "v6.0.11": True
807                    }
808                },
809                {
810                    "value": "queue-2",
811                    "revisions": {
812                        "v6.0.0": True,
813                        "v7.0.0": True,
814                        "v6.0.5": True,
815                        "v6.4.4": True,
816                        "v6.4.0": True,
817                        "v6.4.1": True,
818                        "v6.2.0": True,
819                        "v6.2.3": True,
820                        "v6.2.5": True,
821                        "v6.2.7": True,
822                        "v6.0.11": True
823                    }
824                },
825                {
826                    "value": "queue-3",
827                    "revisions": {
828                        "v6.0.0": True,
829                        "v7.0.0": True,
830                        "v6.0.5": True,
831                        "v6.4.4": True,
832                        "v6.4.0": True,
833                        "v6.4.1": True,
834                        "v6.2.0": True,
835                        "v6.2.3": True,
836                        "v6.2.5": True,
837                        "v6.2.7": True,
838                        "v6.0.11": True
839                    }
840                },
841                {
842                    "value": "queue-4",
843                    "revisions": {
844                        "v6.0.0": True,
845                        "v7.0.0": True,
846                        "v6.0.5": True,
847                        "v6.4.4": True,
848                        "v6.4.0": True,
849                        "v6.4.1": True,
850                        "v6.2.0": True,
851                        "v6.2.3": True,
852                        "v6.2.5": True,
853                        "v6.2.7": True,
854                        "v6.0.11": True
855                    }
856                },
857                {
858                    "value": "queue-5",
859                    "revisions": {
860                        "v6.0.0": True,
861                        "v7.0.0": True,
862                        "v6.0.5": True,
863                        "v6.4.4": True,
864                        "v6.4.0": True,
865                        "v6.4.1": True,
866                        "v6.2.0": True,
867                        "v6.2.3": True,
868                        "v6.2.5": True,
869                        "v6.2.7": True,
870                        "v6.0.11": True
871                    }
872                },
873                {
874                    "value": "queue-6",
875                    "revisions": {
876                        "v6.0.0": True,
877                        "v7.0.0": True,
878                        "v6.0.5": True,
879                        "v6.4.4": True,
880                        "v6.4.0": True,
881                        "v6.4.1": True,
882                        "v6.2.0": True,
883                        "v6.2.3": True,
884                        "v6.2.5": True,
885                        "v6.2.7": True,
886                        "v6.0.11": True
887                    }
888                },
889                {
890                    "value": "queue-7",
891                    "revisions": {
892                        "v6.0.0": True,
893                        "v7.0.0": True,
894                        "v6.0.5": True,
895                        "v6.4.4": True,
896                        "v6.4.0": True,
897                        "v6.4.1": True,
898                        "v6.2.0": True,
899                        "v6.2.3": True,
900                        "v6.2.5": True,
901                        "v6.2.7": True,
902                        "v6.0.11": True
903                    }
904                }
905            ],
906            "revisions": {
907                "v6.0.0": True,
908                "v7.0.0": True,
909                "v6.0.5": True,
910                "v6.4.4": True,
911                "v6.4.0": True,
912                "v6.4.1": True,
913                "v6.2.0": True,
914                "v6.2.3": True,
915                "v6.2.5": True,
916                "v6.2.7": True,
917                "v6.0.11": True
918            }
919        },
920        "priority_4": {
921            "type": "string",
922            "options": [
923                {
924                    "value": "queue-0",
925                    "revisions": {
926                        "v6.0.0": True,
927                        "v7.0.0": True,
928                        "v6.0.5": True,
929                        "v6.4.4": True,
930                        "v6.4.0": True,
931                        "v6.4.1": True,
932                        "v6.2.0": True,
933                        "v6.2.3": True,
934                        "v6.2.5": True,
935                        "v6.2.7": True,
936                        "v6.0.11": True
937                    }
938                },
939                {
940                    "value": "queue-1",
941                    "revisions": {
942                        "v6.0.0": True,
943                        "v7.0.0": True,
944                        "v6.0.5": True,
945                        "v6.4.4": True,
946                        "v6.4.0": True,
947                        "v6.4.1": True,
948                        "v6.2.0": True,
949                        "v6.2.3": True,
950                        "v6.2.5": True,
951                        "v6.2.7": True,
952                        "v6.0.11": True
953                    }
954                },
955                {
956                    "value": "queue-2",
957                    "revisions": {
958                        "v6.0.0": True,
959                        "v7.0.0": True,
960                        "v6.0.5": True,
961                        "v6.4.4": True,
962                        "v6.4.0": True,
963                        "v6.4.1": True,
964                        "v6.2.0": True,
965                        "v6.2.3": True,
966                        "v6.2.5": True,
967                        "v6.2.7": True,
968                        "v6.0.11": True
969                    }
970                },
971                {
972                    "value": "queue-3",
973                    "revisions": {
974                        "v6.0.0": True,
975                        "v7.0.0": True,
976                        "v6.0.5": True,
977                        "v6.4.4": True,
978                        "v6.4.0": True,
979                        "v6.4.1": True,
980                        "v6.2.0": True,
981                        "v6.2.3": True,
982                        "v6.2.5": True,
983                        "v6.2.7": True,
984                        "v6.0.11": True
985                    }
986                },
987                {
988                    "value": "queue-4",
989                    "revisions": {
990                        "v6.0.0": True,
991                        "v7.0.0": True,
992                        "v6.0.5": True,
993                        "v6.4.4": True,
994                        "v6.4.0": True,
995                        "v6.4.1": True,
996                        "v6.2.0": True,
997                        "v6.2.3": True,
998                        "v6.2.5": True,
999                        "v6.2.7": True,
1000                        "v6.0.11": True
1001                    }
1002                },
1003                {
1004                    "value": "queue-5",
1005                    "revisions": {
1006                        "v6.0.0": True,
1007                        "v7.0.0": True,
1008                        "v6.0.5": True,
1009                        "v6.4.4": True,
1010                        "v6.4.0": True,
1011                        "v6.4.1": True,
1012                        "v6.2.0": True,
1013                        "v6.2.3": True,
1014                        "v6.2.5": True,
1015                        "v6.2.7": True,
1016                        "v6.0.11": True
1017                    }
1018                },
1019                {
1020                    "value": "queue-6",
1021                    "revisions": {
1022                        "v6.0.0": True,
1023                        "v7.0.0": True,
1024                        "v6.0.5": True,
1025                        "v6.4.4": True,
1026                        "v6.4.0": True,
1027                        "v6.4.1": True,
1028                        "v6.2.0": True,
1029                        "v6.2.3": True,
1030                        "v6.2.5": True,
1031                        "v6.2.7": True,
1032                        "v6.0.11": True
1033                    }
1034                },
1035                {
1036                    "value": "queue-7",
1037                    "revisions": {
1038                        "v6.0.0": True,
1039                        "v7.0.0": True,
1040                        "v6.0.5": True,
1041                        "v6.4.4": True,
1042                        "v6.4.0": True,
1043                        "v6.4.1": True,
1044                        "v6.2.0": True,
1045                        "v6.2.3": True,
1046                        "v6.2.5": True,
1047                        "v6.2.7": True,
1048                        "v6.0.11": True
1049                    }
1050                }
1051            ],
1052            "revisions": {
1053                "v6.0.0": True,
1054                "v7.0.0": True,
1055                "v6.0.5": True,
1056                "v6.4.4": True,
1057                "v6.4.0": True,
1058                "v6.4.1": True,
1059                "v6.2.0": True,
1060                "v6.2.3": True,
1061                "v6.2.5": True,
1062                "v6.2.7": True,
1063                "v6.0.11": True
1064            }
1065        },
1066        "priority_3": {
1067            "type": "string",
1068            "options": [
1069                {
1070                    "value": "queue-0",
1071                    "revisions": {
1072                        "v6.0.0": True,
1073                        "v7.0.0": True,
1074                        "v6.0.5": True,
1075                        "v6.4.4": True,
1076                        "v6.4.0": True,
1077                        "v6.4.1": True,
1078                        "v6.2.0": True,
1079                        "v6.2.3": True,
1080                        "v6.2.5": True,
1081                        "v6.2.7": True,
1082                        "v6.0.11": True
1083                    }
1084                },
1085                {
1086                    "value": "queue-1",
1087                    "revisions": {
1088                        "v6.0.0": True,
1089                        "v7.0.0": True,
1090                        "v6.0.5": True,
1091                        "v6.4.4": True,
1092                        "v6.4.0": True,
1093                        "v6.4.1": True,
1094                        "v6.2.0": True,
1095                        "v6.2.3": True,
1096                        "v6.2.5": True,
1097                        "v6.2.7": True,
1098                        "v6.0.11": True
1099                    }
1100                },
1101                {
1102                    "value": "queue-2",
1103                    "revisions": {
1104                        "v6.0.0": True,
1105                        "v7.0.0": True,
1106                        "v6.0.5": True,
1107                        "v6.4.4": True,
1108                        "v6.4.0": True,
1109                        "v6.4.1": True,
1110                        "v6.2.0": True,
1111                        "v6.2.3": True,
1112                        "v6.2.5": True,
1113                        "v6.2.7": True,
1114                        "v6.0.11": True
1115                    }
1116                },
1117                {
1118                    "value": "queue-3",
1119                    "revisions": {
1120                        "v6.0.0": True,
1121                        "v7.0.0": True,
1122                        "v6.0.5": True,
1123                        "v6.4.4": True,
1124                        "v6.4.0": True,
1125                        "v6.4.1": True,
1126                        "v6.2.0": True,
1127                        "v6.2.3": True,
1128                        "v6.2.5": True,
1129                        "v6.2.7": True,
1130                        "v6.0.11": True
1131                    }
1132                },
1133                {
1134                    "value": "queue-4",
1135                    "revisions": {
1136                        "v6.0.0": True,
1137                        "v7.0.0": True,
1138                        "v6.0.5": True,
1139                        "v6.4.4": True,
1140                        "v6.4.0": True,
1141                        "v6.4.1": True,
1142                        "v6.2.0": True,
1143                        "v6.2.3": True,
1144                        "v6.2.5": True,
1145                        "v6.2.7": True,
1146                        "v6.0.11": True
1147                    }
1148                },
1149                {
1150                    "value": "queue-5",
1151                    "revisions": {
1152                        "v6.0.0": True,
1153                        "v7.0.0": True,
1154                        "v6.0.5": True,
1155                        "v6.4.4": True,
1156                        "v6.4.0": True,
1157                        "v6.4.1": True,
1158                        "v6.2.0": True,
1159                        "v6.2.3": True,
1160                        "v6.2.5": True,
1161                        "v6.2.7": True,
1162                        "v6.0.11": True
1163                    }
1164                },
1165                {
1166                    "value": "queue-6",
1167                    "revisions": {
1168                        "v6.0.0": True,
1169                        "v7.0.0": True,
1170                        "v6.0.5": True,
1171                        "v6.4.4": True,
1172                        "v6.4.0": True,
1173                        "v6.4.1": True,
1174                        "v6.2.0": True,
1175                        "v6.2.3": True,
1176                        "v6.2.5": True,
1177                        "v6.2.7": True,
1178                        "v6.0.11": True
1179                    }
1180                },
1181                {
1182                    "value": "queue-7",
1183                    "revisions": {
1184                        "v6.0.0": True,
1185                        "v7.0.0": True,
1186                        "v6.0.5": True,
1187                        "v6.4.4": True,
1188                        "v6.4.0": True,
1189                        "v6.4.1": True,
1190                        "v6.2.0": True,
1191                        "v6.2.3": True,
1192                        "v6.2.5": True,
1193                        "v6.2.7": True,
1194                        "v6.0.11": True
1195                    }
1196                }
1197            ],
1198            "revisions": {
1199                "v6.0.0": True,
1200                "v7.0.0": True,
1201                "v6.0.5": True,
1202                "v6.4.4": True,
1203                "v6.4.0": True,
1204                "v6.4.1": True,
1205                "v6.2.0": True,
1206                "v6.2.3": True,
1207                "v6.2.5": True,
1208                "v6.2.7": True,
1209                "v6.0.11": True
1210            }
1211        },
1212        "priority_2": {
1213            "type": "string",
1214            "options": [
1215                {
1216                    "value": "queue-0",
1217                    "revisions": {
1218                        "v6.0.0": True,
1219                        "v7.0.0": True,
1220                        "v6.0.5": True,
1221                        "v6.4.4": True,
1222                        "v6.4.0": True,
1223                        "v6.4.1": True,
1224                        "v6.2.0": True,
1225                        "v6.2.3": True,
1226                        "v6.2.5": True,
1227                        "v6.2.7": True,
1228                        "v6.0.11": True
1229                    }
1230                },
1231                {
1232                    "value": "queue-1",
1233                    "revisions": {
1234                        "v6.0.0": True,
1235                        "v7.0.0": True,
1236                        "v6.0.5": True,
1237                        "v6.4.4": True,
1238                        "v6.4.0": True,
1239                        "v6.4.1": True,
1240                        "v6.2.0": True,
1241                        "v6.2.3": True,
1242                        "v6.2.5": True,
1243                        "v6.2.7": True,
1244                        "v6.0.11": True
1245                    }
1246                },
1247                {
1248                    "value": "queue-2",
1249                    "revisions": {
1250                        "v6.0.0": True,
1251                        "v7.0.0": True,
1252                        "v6.0.5": True,
1253                        "v6.4.4": True,
1254                        "v6.4.0": True,
1255                        "v6.4.1": True,
1256                        "v6.2.0": True,
1257                        "v6.2.3": True,
1258                        "v6.2.5": True,
1259                        "v6.2.7": True,
1260                        "v6.0.11": True
1261                    }
1262                },
1263                {
1264                    "value": "queue-3",
1265                    "revisions": {
1266                        "v6.0.0": True,
1267                        "v7.0.0": True,
1268                        "v6.0.5": True,
1269                        "v6.4.4": True,
1270                        "v6.4.0": True,
1271                        "v6.4.1": True,
1272                        "v6.2.0": True,
1273                        "v6.2.3": True,
1274                        "v6.2.5": True,
1275                        "v6.2.7": True,
1276                        "v6.0.11": True
1277                    }
1278                },
1279                {
1280                    "value": "queue-4",
1281                    "revisions": {
1282                        "v6.0.0": True,
1283                        "v7.0.0": True,
1284                        "v6.0.5": True,
1285                        "v6.4.4": True,
1286                        "v6.4.0": True,
1287                        "v6.4.1": True,
1288                        "v6.2.0": True,
1289                        "v6.2.3": True,
1290                        "v6.2.5": True,
1291                        "v6.2.7": True,
1292                        "v6.0.11": True
1293                    }
1294                },
1295                {
1296                    "value": "queue-5",
1297                    "revisions": {
1298                        "v6.0.0": True,
1299                        "v7.0.0": True,
1300                        "v6.0.5": True,
1301                        "v6.4.4": True,
1302                        "v6.4.0": True,
1303                        "v6.4.1": True,
1304                        "v6.2.0": True,
1305                        "v6.2.3": True,
1306                        "v6.2.5": True,
1307                        "v6.2.7": True,
1308                        "v6.0.11": True
1309                    }
1310                },
1311                {
1312                    "value": "queue-6",
1313                    "revisions": {
1314                        "v6.0.0": True,
1315                        "v7.0.0": True,
1316                        "v6.0.5": True,
1317                        "v6.4.4": True,
1318                        "v6.4.0": True,
1319                        "v6.4.1": True,
1320                        "v6.2.0": True,
1321                        "v6.2.3": True,
1322                        "v6.2.5": True,
1323                        "v6.2.7": True,
1324                        "v6.0.11": True
1325                    }
1326                },
1327                {
1328                    "value": "queue-7",
1329                    "revisions": {
1330                        "v6.0.0": True,
1331                        "v7.0.0": True,
1332                        "v6.0.5": True,
1333                        "v6.4.4": True,
1334                        "v6.4.0": True,
1335                        "v6.4.1": True,
1336                        "v6.2.0": True,
1337                        "v6.2.3": True,
1338                        "v6.2.5": True,
1339                        "v6.2.7": True,
1340                        "v6.0.11": True
1341                    }
1342                }
1343            ],
1344            "revisions": {
1345                "v6.0.0": True,
1346                "v7.0.0": True,
1347                "v6.0.5": True,
1348                "v6.4.4": True,
1349                "v6.4.0": True,
1350                "v6.4.1": True,
1351                "v6.2.0": True,
1352                "v6.2.3": True,
1353                "v6.2.5": True,
1354                "v6.2.7": True,
1355                "v6.0.11": True
1356            }
1357        },
1358        "priority_1": {
1359            "type": "string",
1360            "options": [
1361                {
1362                    "value": "queue-0",
1363                    "revisions": {
1364                        "v6.0.0": True,
1365                        "v7.0.0": True,
1366                        "v6.0.5": True,
1367                        "v6.4.4": True,
1368                        "v6.4.0": True,
1369                        "v6.4.1": True,
1370                        "v6.2.0": True,
1371                        "v6.2.3": True,
1372                        "v6.2.5": True,
1373                        "v6.2.7": True,
1374                        "v6.0.11": True
1375                    }
1376                },
1377                {
1378                    "value": "queue-1",
1379                    "revisions": {
1380                        "v6.0.0": True,
1381                        "v7.0.0": True,
1382                        "v6.0.5": True,
1383                        "v6.4.4": True,
1384                        "v6.4.0": True,
1385                        "v6.4.1": True,
1386                        "v6.2.0": True,
1387                        "v6.2.3": True,
1388                        "v6.2.5": True,
1389                        "v6.2.7": True,
1390                        "v6.0.11": True
1391                    }
1392                },
1393                {
1394                    "value": "queue-2",
1395                    "revisions": {
1396                        "v6.0.0": True,
1397                        "v7.0.0": True,
1398                        "v6.0.5": True,
1399                        "v6.4.4": True,
1400                        "v6.4.0": True,
1401                        "v6.4.1": True,
1402                        "v6.2.0": True,
1403                        "v6.2.3": True,
1404                        "v6.2.5": True,
1405                        "v6.2.7": True,
1406                        "v6.0.11": True
1407                    }
1408                },
1409                {
1410                    "value": "queue-3",
1411                    "revisions": {
1412                        "v6.0.0": True,
1413                        "v7.0.0": True,
1414                        "v6.0.5": True,
1415                        "v6.4.4": True,
1416                        "v6.4.0": True,
1417                        "v6.4.1": True,
1418                        "v6.2.0": True,
1419                        "v6.2.3": True,
1420                        "v6.2.5": True,
1421                        "v6.2.7": True,
1422                        "v6.0.11": True
1423                    }
1424                },
1425                {
1426                    "value": "queue-4",
1427                    "revisions": {
1428                        "v6.0.0": True,
1429                        "v7.0.0": True,
1430                        "v6.0.5": True,
1431                        "v6.4.4": True,
1432                        "v6.4.0": True,
1433                        "v6.4.1": True,
1434                        "v6.2.0": True,
1435                        "v6.2.3": True,
1436                        "v6.2.5": True,
1437                        "v6.2.7": True,
1438                        "v6.0.11": True
1439                    }
1440                },
1441                {
1442                    "value": "queue-5",
1443                    "revisions": {
1444                        "v6.0.0": True,
1445                        "v7.0.0": True,
1446                        "v6.0.5": True,
1447                        "v6.4.4": True,
1448                        "v6.4.0": True,
1449                        "v6.4.1": True,
1450                        "v6.2.0": True,
1451                        "v6.2.3": True,
1452                        "v6.2.5": True,
1453                        "v6.2.7": True,
1454                        "v6.0.11": True
1455                    }
1456                },
1457                {
1458                    "value": "queue-6",
1459                    "revisions": {
1460                        "v6.0.0": True,
1461                        "v7.0.0": True,
1462                        "v6.0.5": True,
1463                        "v6.4.4": True,
1464                        "v6.4.0": True,
1465                        "v6.4.1": True,
1466                        "v6.2.0": True,
1467                        "v6.2.3": True,
1468                        "v6.2.5": True,
1469                        "v6.2.7": True,
1470                        "v6.0.11": True
1471                    }
1472                },
1473                {
1474                    "value": "queue-7",
1475                    "revisions": {
1476                        "v6.0.0": True,
1477                        "v7.0.0": True,
1478                        "v6.0.5": True,
1479                        "v6.4.4": True,
1480                        "v6.4.0": True,
1481                        "v6.4.1": True,
1482                        "v6.2.0": True,
1483                        "v6.2.3": True,
1484                        "v6.2.5": True,
1485                        "v6.2.7": True,
1486                        "v6.0.11": True
1487                    }
1488                }
1489            ],
1490            "revisions": {
1491                "v6.0.0": True,
1492                "v7.0.0": True,
1493                "v6.0.5": True,
1494                "v6.4.4": True,
1495                "v6.4.0": True,
1496                "v6.4.1": True,
1497                "v6.2.0": True,
1498                "v6.2.3": True,
1499                "v6.2.5": True,
1500                "v6.2.7": True,
1501                "v6.0.11": True
1502            }
1503        },
1504        "priority_0": {
1505            "type": "string",
1506            "options": [
1507                {
1508                    "value": "queue-0",
1509                    "revisions": {
1510                        "v6.0.0": True,
1511                        "v7.0.0": True,
1512                        "v6.0.5": True,
1513                        "v6.4.4": True,
1514                        "v6.4.0": True,
1515                        "v6.4.1": True,
1516                        "v6.2.0": True,
1517                        "v6.2.3": True,
1518                        "v6.2.5": True,
1519                        "v6.2.7": True,
1520                        "v6.0.11": True
1521                    }
1522                },
1523                {
1524                    "value": "queue-1",
1525                    "revisions": {
1526                        "v6.0.0": True,
1527                        "v7.0.0": True,
1528                        "v6.0.5": True,
1529                        "v6.4.4": True,
1530                        "v6.4.0": True,
1531                        "v6.4.1": True,
1532                        "v6.2.0": True,
1533                        "v6.2.3": True,
1534                        "v6.2.5": True,
1535                        "v6.2.7": True,
1536                        "v6.0.11": True
1537                    }
1538                },
1539                {
1540                    "value": "queue-2",
1541                    "revisions": {
1542                        "v6.0.0": True,
1543                        "v7.0.0": True,
1544                        "v6.0.5": True,
1545                        "v6.4.4": True,
1546                        "v6.4.0": True,
1547                        "v6.4.1": True,
1548                        "v6.2.0": True,
1549                        "v6.2.3": True,
1550                        "v6.2.5": True,
1551                        "v6.2.7": True,
1552                        "v6.0.11": True
1553                    }
1554                },
1555                {
1556                    "value": "queue-3",
1557                    "revisions": {
1558                        "v6.0.0": True,
1559                        "v7.0.0": True,
1560                        "v6.0.5": True,
1561                        "v6.4.4": True,
1562                        "v6.4.0": True,
1563                        "v6.4.1": True,
1564                        "v6.2.0": True,
1565                        "v6.2.3": True,
1566                        "v6.2.5": True,
1567                        "v6.2.7": True,
1568                        "v6.0.11": True
1569                    }
1570                },
1571                {
1572                    "value": "queue-4",
1573                    "revisions": {
1574                        "v6.0.0": True,
1575                        "v7.0.0": True,
1576                        "v6.0.5": True,
1577                        "v6.4.4": True,
1578                        "v6.4.0": True,
1579                        "v6.4.1": True,
1580                        "v6.2.0": True,
1581                        "v6.2.3": True,
1582                        "v6.2.5": True,
1583                        "v6.2.7": True,
1584                        "v6.0.11": True
1585                    }
1586                },
1587                {
1588                    "value": "queue-5",
1589                    "revisions": {
1590                        "v6.0.0": True,
1591                        "v7.0.0": True,
1592                        "v6.0.5": True,
1593                        "v6.4.4": True,
1594                        "v6.4.0": True,
1595                        "v6.4.1": True,
1596                        "v6.2.0": True,
1597                        "v6.2.3": True,
1598                        "v6.2.5": True,
1599                        "v6.2.7": True,
1600                        "v6.0.11": True
1601                    }
1602                },
1603                {
1604                    "value": "queue-6",
1605                    "revisions": {
1606                        "v6.0.0": True,
1607                        "v7.0.0": True,
1608                        "v6.0.5": True,
1609                        "v6.4.4": True,
1610                        "v6.4.0": True,
1611                        "v6.4.1": True,
1612                        "v6.2.0": True,
1613                        "v6.2.3": True,
1614                        "v6.2.5": True,
1615                        "v6.2.7": True,
1616                        "v6.0.11": True
1617                    }
1618                },
1619                {
1620                    "value": "queue-7",
1621                    "revisions": {
1622                        "v6.0.0": True,
1623                        "v7.0.0": True,
1624                        "v6.0.5": True,
1625                        "v6.4.4": True,
1626                        "v6.4.0": True,
1627                        "v6.4.1": True,
1628                        "v6.2.0": True,
1629                        "v6.2.3": True,
1630                        "v6.2.5": True,
1631                        "v6.2.7": True,
1632                        "v6.0.11": True
1633                    }
1634                }
1635            ],
1636            "revisions": {
1637                "v6.0.0": True,
1638                "v7.0.0": True,
1639                "v6.0.5": True,
1640                "v6.4.4": True,
1641                "v6.4.0": True,
1642                "v6.4.1": True,
1643                "v6.2.0": True,
1644                "v6.2.3": True,
1645                "v6.2.5": True,
1646                "v6.2.7": True,
1647                "v6.0.11": True
1648            }
1649        }
1650    },
1651    "revisions": {
1652        "v6.0.0": True,
1653        "v7.0.0": True,
1654        "v6.0.5": True,
1655        "v6.4.4": True,
1656        "v6.4.0": True,
1657        "v6.4.1": True,
1658        "v6.2.0": True,
1659        "v6.2.3": True,
1660        "v6.2.5": True,
1661        "v6.2.7": True,
1662        "v6.0.11": True
1663    }
1664}
1665
1666
1667def main():
1668    module_spec = schema_to_module_spec(versioned_schema)
1669    mkeyname = 'name'
1670    fields = {
1671        "access_token": {"required": False, "type": "str", "no_log": True},
1672        "enable_log": {"required": False, "type": bool},
1673        "vdom": {"required": False, "type": "str", "default": "root"},
1674        "state": {"required": True, "type": "str",
1675                  "choices": ["present", "absent"]},
1676        "switch_controller_qos_dot1p_map": {
1677            "required": False, "type": "dict", "default": None,
1678            "options": {
1679            }
1680        }
1681    }
1682    for attribute_name in module_spec['options']:
1683        fields["switch_controller_qos_dot1p_map"]['options'][attribute_name] = module_spec['options'][attribute_name]
1684        if mkeyname and mkeyname == attribute_name:
1685            fields["switch_controller_qos_dot1p_map"]['options'][attribute_name]['required'] = True
1686
1687    check_legacy_fortiosapi()
1688    module = AnsibleModule(argument_spec=fields,
1689                           supports_check_mode=True)
1690
1691    versions_check_result = None
1692    if module._socket_path:
1693        connection = Connection(module._socket_path)
1694        if 'access_token' in module.params:
1695            connection.set_option('access_token', module.params['access_token'])
1696
1697        if 'enable_log' in module.params:
1698            connection.set_option('enable_log', module.params['enable_log'])
1699        else:
1700            connection.set_option('enable_log', False)
1701        fos = FortiOSHandler(connection, module, mkeyname)
1702        versions_check_result = check_schema_versioning(fos, versioned_schema, "switch_controller_qos_dot1p_map")
1703
1704        is_error, has_changed, result = fortios_switch_controller_qos(module.params, fos, module.check_mode)
1705
1706    else:
1707        module.fail_json(**FAIL_SOCKET_MSG)
1708
1709    if versions_check_result and versions_check_result['matched'] is False:
1710        module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv")
1711
1712    if not is_error:
1713        if versions_check_result and versions_check_result['matched'] is False:
1714            module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result)
1715        else:
1716            module.exit_json(changed=has_changed, meta=result)
1717    else:
1718        if versions_check_result and versions_check_result['matched'] is False:
1719            module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result)
1720        else:
1721            module.fail_json(msg="Error in repo", meta=result)
1722
1723
1724if __name__ == '__main__':
1725    main()
1726