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_modem 27short_description: Configure MODEM 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 feature and modem 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 system_modem: 68 description: 69 - Configure MODEM. 70 default: null 71 type: dict 72 suboptions: 73 action: 74 description: 75 - Dial up/stop MODEM. 76 type: str 77 choices: 78 - dial 79 - stop 80 - none 81 altmode: 82 description: 83 - Enable/disable altmode for installations using PPP in China. 84 type: str 85 choices: 86 - enable 87 - disable 88 authtype1: 89 description: 90 - Allowed authentication types for ISP 1. 91 type: list 92 choices: 93 - pap 94 - chap 95 - mschap 96 - mschapv2 97 authtype2: 98 description: 99 - Allowed authentication types for ISP 2. 100 type: list 101 choices: 102 - pap 103 - chap 104 - mschap 105 - mschapv2 106 authtype3: 107 description: 108 - Allowed authentication types for ISP 3. 109 type: list 110 choices: 111 - pap 112 - chap 113 - mschap 114 - mschapv2 115 auto_dial: 116 description: 117 - Enable/disable auto-dial after a reboot or disconnection. 118 type: str 119 choices: 120 - enable 121 - disable 122 connect_timeout: 123 description: 124 - Connection completion timeout (30 - 255 sec). 125 type: int 126 dial_cmd1: 127 description: 128 - Dial command (this is often an ATD or ATDT command). 129 type: str 130 dial_cmd2: 131 description: 132 - Dial command (this is often an ATD or ATDT command). 133 type: str 134 dial_cmd3: 135 description: 136 - Dial command (this is often an ATD or ATDT command). 137 type: str 138 dial_on_demand: 139 description: 140 - Enable/disable to dial the modem when packets are routed to the modem interface. 141 type: str 142 choices: 143 - enable 144 - disable 145 distance: 146 description: 147 - Distance of learned routes (1 - 255). 148 type: int 149 dont_send_CR1: 150 description: 151 - Do not send CR when connected (ISP1). 152 type: str 153 choices: 154 - enable 155 - disable 156 dont_send_CR2: 157 description: 158 - Do not send CR when connected (ISP2). 159 type: str 160 choices: 161 - enable 162 - disable 163 dont_send_CR3: 164 description: 165 - Do not send CR when connected (ISP3). 166 type: str 167 choices: 168 - enable 169 - disable 170 extra_init1: 171 description: 172 - Extra initialization string to ISP 1. 173 type: str 174 extra_init2: 175 description: 176 - Extra initialization string to ISP 2. 177 type: str 178 extra_init3: 179 description: 180 - Extra initialization string to ISP 3. 181 type: str 182 holddown_timer: 183 description: 184 - Hold down timer in seconds (1 - 60 sec). 185 type: int 186 idle_timer: 187 description: 188 - MODEM connection idle time (1 - 9999 min). 189 type: int 190 interface: 191 description: 192 - Name of redundant interface. Source system.interface.name. 193 type: str 194 lockdown_lac: 195 description: 196 - Allow connection only to the specified Location Area Code (LAC). 197 type: str 198 mode: 199 description: 200 - Set MODEM operation mode to redundant or standalone. 201 type: str 202 choices: 203 - standalone 204 - redundant 205 network_init: 206 description: 207 - AT command to set the Network name/type (AT+COPS=<mode>,[<format>,<oper>[,<AcT>]]). 208 type: str 209 passwd1: 210 description: 211 - Password to access the specified dialup account. 212 type: str 213 passwd2: 214 description: 215 - Password to access the specified dialup account. 216 type: str 217 passwd3: 218 description: 219 - Password to access the specified dialup account. 220 type: str 221 peer_modem1: 222 description: 223 - Specify peer MODEM type for phone1. 224 type: str 225 choices: 226 - generic 227 - actiontec 228 - ascend_TNT 229 peer_modem2: 230 description: 231 - Specify peer MODEM type for phone2. 232 type: str 233 choices: 234 - generic 235 - actiontec 236 - ascend_TNT 237 peer_modem3: 238 description: 239 - Specify peer MODEM type for phone3. 240 type: str 241 choices: 242 - generic 243 - actiontec 244 - ascend_TNT 245 phone1: 246 description: 247 - Phone number to connect to the dialup account (must not contain spaces, and should include standard special characters). 248 type: str 249 phone2: 250 description: 251 - Phone number to connect to the dialup account (must not contain spaces, and should include standard special characters). 252 type: str 253 phone3: 254 description: 255 - Phone number to connect to the dialup account (must not contain spaces, and should include standard special characters). 256 type: str 257 pin_init: 258 description: 259 - AT command to set the PIN (AT+PIN=<pin>). 260 type: str 261 ppp_echo_request1: 262 description: 263 - Enable/disable PPP echo-request to ISP 1. 264 type: str 265 choices: 266 - enable 267 - disable 268 ppp_echo_request2: 269 description: 270 - Enable/disable PPP echo-request to ISP 2. 271 type: str 272 choices: 273 - enable 274 - disable 275 ppp_echo_request3: 276 description: 277 - Enable/disable PPP echo-request to ISP 3. 278 type: str 279 choices: 280 - enable 281 - disable 282 priority: 283 description: 284 - Priority of learned routes (0 - 4294967295). 285 type: int 286 redial: 287 description: 288 - Redial limit (1 - 10 attempts, none = redial forever). 289 type: str 290 choices: 291 - none 292 - 1 293 - 2 294 - 3 295 - 4 296 - 5 297 - 6 298 - 7 299 - 8 300 - 9 301 - 10 302 reset: 303 description: 304 - Number of dial attempts before resetting modem (0 = never reset). 305 type: int 306 status: 307 description: 308 - Enable/disable Modem support (equivalent to bringing an interface up or down). 309 type: str 310 choices: 311 - enable 312 - disable 313 traffic_check: 314 description: 315 - Enable/disable traffic-check. 316 type: str 317 choices: 318 - enable 319 - disable 320 username1: 321 description: 322 - User name to access the specified dialup account. 323 type: str 324 username2: 325 description: 326 - User name to access the specified dialup account. 327 type: str 328 username3: 329 description: 330 - User name to access the specified dialup account. 331 type: str 332 wireless_port: 333 description: 334 - Enter wireless port number, 0 for default, 1 for first port, ... (0 - 4294967295) 335 type: int 336''' 337 338EXAMPLES = ''' 339- hosts: fortigates 340 collections: 341 - fortinet.fortios 342 connection: httpapi 343 vars: 344 vdom: "root" 345 ansible_httpapi_use_ssl: yes 346 ansible_httpapi_validate_certs: no 347 ansible_httpapi_port: 443 348 tasks: 349 - name: Configure MODEM. 350 fortios_system_modem: 351 vdom: "{{ vdom }}" 352 system_modem: 353 action: "dial" 354 altmode: "enable" 355 authtype1: "pap" 356 authtype2: "pap" 357 authtype3: "pap" 358 auto_dial: "enable" 359 connect_timeout: "9" 360 dial_cmd1: "<your_own_value>" 361 dial_cmd2: "<your_own_value>" 362 dial_cmd3: "<your_own_value>" 363 dial_on_demand: "enable" 364 distance: "14" 365 dont_send_CR1: "enable" 366 dont_send_CR2: "enable" 367 dont_send_CR3: "enable" 368 extra_init1: "<your_own_value>" 369 extra_init2: "<your_own_value>" 370 extra_init3: "<your_own_value>" 371 holddown_timer: "21" 372 idle_timer: "22" 373 interface: "<your_own_value> (source system.interface.name)" 374 lockdown_lac: "<your_own_value>" 375 mode: "standalone" 376 network_init: "<your_own_value>" 377 passwd1: "<your_own_value>" 378 passwd2: "<your_own_value>" 379 passwd3: "<your_own_value>" 380 peer_modem1: "generic" 381 peer_modem2: "generic" 382 peer_modem3: "generic" 383 phone1: "<your_own_value>" 384 phone2: "<your_own_value>" 385 phone3: "<your_own_value>" 386 pin_init: "<your_own_value>" 387 ppp_echo_request1: "enable" 388 ppp_echo_request2: "enable" 389 ppp_echo_request3: "enable" 390 priority: "40" 391 redial: "none" 392 reset: "42" 393 status: "enable" 394 traffic_check: "enable" 395 username1: "<your_own_value>" 396 username2: "<your_own_value>" 397 username3: "<your_own_value>" 398 wireless_port: "48" 399 400''' 401 402RETURN = ''' 403build: 404 description: Build number of the fortigate image 405 returned: always 406 type: str 407 sample: '1547' 408http_method: 409 description: Last method used to provision the content into FortiGate 410 returned: always 411 type: str 412 sample: 'PUT' 413http_status: 414 description: Last result given by FortiGate on last operation applied 415 returned: always 416 type: str 417 sample: "200" 418mkey: 419 description: Master key (id) used in the last call to FortiGate 420 returned: success 421 type: str 422 sample: "id" 423name: 424 description: Name of the table used to fulfill the request 425 returned: always 426 type: str 427 sample: "urlfilter" 428path: 429 description: Path of the table used to fulfill the request 430 returned: always 431 type: str 432 sample: "webfilter" 433revision: 434 description: Internal revision number 435 returned: always 436 type: str 437 sample: "17.0.2.10658" 438serial: 439 description: Serial number of the unit 440 returned: always 441 type: str 442 sample: "FGVMEVYYQT3AB5352" 443status: 444 description: Indication of the operation's result 445 returned: always 446 type: str 447 sample: "success" 448vdom: 449 description: Virtual domain used 450 returned: always 451 type: str 452 sample: "root" 453version: 454 description: Version of the FortiGate 455 returned: always 456 type: str 457 sample: "v5.6.3" 458 459''' 460from ansible.module_utils.basic import AnsibleModule 461from ansible.module_utils.connection import Connection 462from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler 463from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi 464from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec 465from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning 466from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG 467from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison 468from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize 469 470 471def filter_system_modem_data(json): 472 option_list = ['action', 'altmode', 'authtype1', 473 'authtype2', 'authtype3', 'auto_dial', 474 'connect_timeout', 'dial_cmd1', 'dial_cmd2', 475 'dial_cmd3', 'dial_on_demand', 'distance', 476 'dont_send_CR1', 'dont_send_CR2', 'dont_send_CR3', 477 'extra_init1', 'extra_init2', 'extra_init3', 478 'holddown_timer', 'idle_timer', 'interface', 479 'lockdown_lac', 'mode', 'network_init', 480 'passwd1', 'passwd2', 'passwd3', 481 'peer_modem1', 'peer_modem2', 'peer_modem3', 482 'phone1', 'phone2', 'phone3', 483 'pin_init', 'ppp_echo_request1', 'ppp_echo_request2', 484 'ppp_echo_request3', 'priority', 'redial', 485 'reset', 'status', 'traffic_check', 486 'username1', 'username2', 'username3', 487 'wireless_port'] 488 dictionary = {} 489 490 for attribute in option_list: 491 if attribute in json and json[attribute] is not None: 492 dictionary[attribute] = json[attribute] 493 494 return dictionary 495 496 497def flatten_single_path(data, path, index): 498 if not data or index == len(path) or path[index] not in data or not data[path[index]]: 499 return 500 501 if index == len(path) - 1: 502 data[path[index]] = ' '.join(str(elem) for elem in data[path[index]]) 503 elif isinstance(data[path[index]], list): 504 for value in data[path[index]]: 505 flatten_single_path(value, path, index + 1) 506 else: 507 flatten_single_path(data[path[index]], path, index + 1) 508 509 510def flatten_multilists_attributes(data): 511 multilist_attrs = [[u'authtype3'], [u'authtype2'], [u'authtype1']] 512 513 for attr in multilist_attrs: 514 flatten_single_path(data, attr, 0) 515 516 return data 517 518 519def underscore_to_hyphen(data): 520 if isinstance(data, list): 521 for i, elem in enumerate(data): 522 data[i] = underscore_to_hyphen(elem) 523 elif isinstance(data, dict): 524 new_data = {} 525 for k, v in data.items(): 526 new_data[k.replace('_', '-')] = underscore_to_hyphen(v) 527 data = new_data 528 529 return data 530 531 532def system_modem(data, fos): 533 vdom = data['vdom'] 534 system_modem_data = data['system_modem'] 535 system_modem_data = flatten_multilists_attributes(system_modem_data) 536 filtered_data = underscore_to_hyphen(filter_system_modem_data(system_modem_data)) 537 538 return fos.set('system', 539 'modem', 540 data=filtered_data, 541 vdom=vdom) 542 543 544def is_successful_status(status): 545 return status['status'] == "success" or \ 546 status['http_method'] == "DELETE" and status['http_status'] == 404 547 548 549def fortios_system(data, fos): 550 551 if data['system_modem']: 552 resp = system_modem(data, fos) 553 else: 554 fos._module.fail_json(msg='missing task body: %s' % ('system_modem')) 555 556 return not is_successful_status(resp), \ 557 resp['status'] == "success" and \ 558 (resp['revision_changed'] if 'revision_changed' in resp else True), \ 559 resp 560 561 562versioned_schema = { 563 "type": "dict", 564 "children": { 565 "status": { 566 "type": "string", 567 "options": [ 568 { 569 "value": "enable", 570 "revisions": { 571 "v6.0.0": True, 572 "v7.0.0": True, 573 "v6.0.5": True, 574 "v6.4.4": True, 575 "v6.4.0": True, 576 "v6.4.1": True, 577 "v6.2.0": True, 578 "v6.2.3": True, 579 "v6.2.5": True, 580 "v6.2.7": True, 581 "v6.0.11": True 582 } 583 }, 584 { 585 "value": "disable", 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 "revisions": { 602 "v6.0.0": True, 603 "v7.0.0": True, 604 "v6.0.5": True, 605 "v6.4.4": True, 606 "v6.4.0": True, 607 "v6.4.1": True, 608 "v6.2.0": True, 609 "v6.2.3": True, 610 "v6.2.5": True, 611 "v6.2.7": True, 612 "v6.0.11": True 613 } 614 }, 615 "ppp_echo_request3": { 616 "type": "string", 617 "options": [ 618 { 619 "value": "enable", 620 "revisions": { 621 "v6.0.0": True, 622 "v7.0.0": True, 623 "v6.0.5": True, 624 "v6.4.4": True, 625 "v6.4.0": True, 626 "v6.4.1": True, 627 "v6.2.0": True, 628 "v6.2.3": True, 629 "v6.2.5": True, 630 "v6.2.7": True, 631 "v6.0.11": True 632 } 633 }, 634 { 635 "value": "disable", 636 "revisions": { 637 "v6.0.0": True, 638 "v7.0.0": True, 639 "v6.0.5": True, 640 "v6.4.4": True, 641 "v6.4.0": True, 642 "v6.4.1": True, 643 "v6.2.0": True, 644 "v6.2.3": True, 645 "v6.2.5": True, 646 "v6.2.7": True, 647 "v6.0.11": True 648 } 649 } 650 ], 651 "revisions": { 652 "v6.0.0": True, 653 "v7.0.0": True, 654 "v6.0.5": True, 655 "v6.4.4": True, 656 "v6.4.0": True, 657 "v6.4.1": True, 658 "v6.2.0": True, 659 "v6.2.3": True, 660 "v6.2.5": True, 661 "v6.2.7": True, 662 "v6.0.11": True 663 } 664 }, 665 "dial_cmd1": { 666 "type": "string", 667 "revisions": { 668 "v6.0.0": True, 669 "v7.0.0": True, 670 "v6.0.5": True, 671 "v6.4.4": True, 672 "v6.4.0": True, 673 "v6.4.1": True, 674 "v6.2.0": True, 675 "v6.2.3": True, 676 "v6.2.5": True, 677 "v6.2.7": True, 678 "v6.0.11": True 679 } 680 }, 681 "dial_cmd2": { 682 "type": "string", 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 "dial_cmd3": { 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 "holddown_timer": { 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 "username1": { 730 "type": "string", 731 "revisions": { 732 "v6.0.0": True, 733 "v7.0.0": True, 734 "v6.0.5": True, 735 "v6.4.4": True, 736 "v6.4.0": True, 737 "v6.4.1": True, 738 "v6.2.0": True, 739 "v6.2.3": True, 740 "v6.2.5": True, 741 "v6.2.7": True, 742 "v6.0.11": True 743 } 744 }, 745 "dial_on_demand": { 746 "type": "string", 747 "options": [ 748 { 749 "value": "enable", 750 "revisions": { 751 "v6.0.0": True, 752 "v7.0.0": True, 753 "v6.0.5": True, 754 "v6.4.4": True, 755 "v6.4.0": True, 756 "v6.4.1": True, 757 "v6.2.0": True, 758 "v6.2.3": True, 759 "v6.2.5": True, 760 "v6.2.7": True, 761 "v6.0.11": True 762 } 763 }, 764 { 765 "value": "disable", 766 "revisions": { 767 "v6.0.0": True, 768 "v7.0.0": True, 769 "v6.0.5": True, 770 "v6.4.4": True, 771 "v6.4.0": True, 772 "v6.4.1": True, 773 "v6.2.0": True, 774 "v6.2.3": True, 775 "v6.2.5": True, 776 "v6.2.7": True, 777 "v6.0.11": True 778 } 779 } 780 ], 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 "redial": { 796 "type": "string", 797 "options": [ 798 { 799 "value": "none", 800 "revisions": { 801 "v6.0.0": True, 802 "v7.0.0": True, 803 "v6.0.5": True, 804 "v6.4.4": True, 805 "v6.4.0": True, 806 "v6.4.1": True, 807 "v6.2.0": True, 808 "v6.2.3": True, 809 "v6.2.5": True, 810 "v6.2.7": True, 811 "v6.0.11": True 812 } 813 }, 814 { 815 "value": "1", 816 "revisions": { 817 "v6.0.0": True, 818 "v7.0.0": True, 819 "v6.0.5": True, 820 "v6.4.4": True, 821 "v6.4.0": True, 822 "v6.4.1": True, 823 "v6.2.0": True, 824 "v6.2.3": True, 825 "v6.2.5": True, 826 "v6.2.7": True, 827 "v6.0.11": True 828 } 829 }, 830 { 831 "value": "2", 832 "revisions": { 833 "v6.0.0": True, 834 "v7.0.0": True, 835 "v6.0.5": True, 836 "v6.4.4": True, 837 "v6.4.0": True, 838 "v6.4.1": True, 839 "v6.2.0": True, 840 "v6.2.3": True, 841 "v6.2.5": True, 842 "v6.2.7": True, 843 "v6.0.11": True 844 } 845 }, 846 { 847 "value": "3", 848 "revisions": { 849 "v6.0.0": True, 850 "v7.0.0": True, 851 "v6.0.5": True, 852 "v6.4.4": True, 853 "v6.4.0": True, 854 "v6.4.1": True, 855 "v6.2.0": True, 856 "v6.2.3": True, 857 "v6.2.5": True, 858 "v6.2.7": True, 859 "v6.0.11": True 860 } 861 }, 862 { 863 "value": "4", 864 "revisions": { 865 "v6.0.0": True, 866 "v7.0.0": True, 867 "v6.0.5": True, 868 "v6.4.4": True, 869 "v6.4.0": True, 870 "v6.4.1": True, 871 "v6.2.0": True, 872 "v6.2.3": True, 873 "v6.2.5": True, 874 "v6.2.7": True, 875 "v6.0.11": True 876 } 877 }, 878 { 879 "value": "5", 880 "revisions": { 881 "v6.0.0": True, 882 "v7.0.0": True, 883 "v6.0.5": True, 884 "v6.4.4": True, 885 "v6.4.0": True, 886 "v6.4.1": True, 887 "v6.2.0": True, 888 "v6.2.3": True, 889 "v6.2.5": True, 890 "v6.2.7": True, 891 "v6.0.11": True 892 } 893 }, 894 { 895 "value": "6", 896 "revisions": { 897 "v6.0.0": True, 898 "v7.0.0": True, 899 "v6.0.5": True, 900 "v6.4.4": True, 901 "v6.4.0": True, 902 "v6.4.1": True, 903 "v6.2.0": True, 904 "v6.2.3": True, 905 "v6.2.5": True, 906 "v6.2.7": True, 907 "v6.0.11": True 908 } 909 }, 910 { 911 "value": "7", 912 "revisions": { 913 "v6.0.0": True, 914 "v7.0.0": True, 915 "v6.0.5": True, 916 "v6.4.4": True, 917 "v6.4.0": True, 918 "v6.4.1": True, 919 "v6.2.0": True, 920 "v6.2.3": True, 921 "v6.2.5": True, 922 "v6.2.7": True, 923 "v6.0.11": True 924 } 925 }, 926 { 927 "value": "8", 928 "revisions": { 929 "v6.0.0": True, 930 "v7.0.0": True, 931 "v6.0.5": True, 932 "v6.4.4": True, 933 "v6.4.0": True, 934 "v6.4.1": True, 935 "v6.2.0": True, 936 "v6.2.3": True, 937 "v6.2.5": True, 938 "v6.2.7": True, 939 "v6.0.11": True 940 } 941 }, 942 { 943 "value": "9", 944 "revisions": { 945 "v6.0.0": True, 946 "v7.0.0": True, 947 "v6.0.5": True, 948 "v6.4.4": True, 949 "v6.4.0": True, 950 "v6.4.1": True, 951 "v6.2.0": True, 952 "v6.2.3": True, 953 "v6.2.5": True, 954 "v6.2.7": True, 955 "v6.0.11": True 956 } 957 }, 958 { 959 "value": "10", 960 "revisions": { 961 "v6.0.0": True, 962 "v7.0.0": True, 963 "v6.0.5": True, 964 "v6.4.4": True, 965 "v6.4.0": True, 966 "v6.4.1": True, 967 "v6.2.0": True, 968 "v6.2.3": True, 969 "v6.2.5": True, 970 "v6.2.7": True, 971 "v6.0.11": True 972 } 973 } 974 ], 975 "revisions": { 976 "v6.0.0": True, 977 "v7.0.0": True, 978 "v6.0.5": True, 979 "v6.4.4": True, 980 "v6.4.0": True, 981 "v6.4.1": True, 982 "v6.2.0": True, 983 "v6.2.3": True, 984 "v6.2.5": True, 985 "v6.2.7": True, 986 "v6.0.11": True 987 } 988 }, 989 "extra_init3": { 990 "type": "string", 991 "revisions": { 992 "v6.0.0": True, 993 "v7.0.0": True, 994 "v6.0.5": True, 995 "v6.4.4": True, 996 "v6.4.0": True, 997 "v6.4.1": True, 998 "v6.2.0": True, 999 "v6.2.3": True, 1000 "v6.2.5": True, 1001 "v6.2.7": True, 1002 "v6.0.11": True 1003 } 1004 }, 1005 "pin_init": { 1006 "type": "string", 1007 "revisions": { 1008 "v6.0.0": True, 1009 "v7.0.0": True, 1010 "v6.0.5": True, 1011 "v6.4.4": True, 1012 "v6.4.0": True, 1013 "v6.4.1": True, 1014 "v6.2.0": True, 1015 "v6.2.3": True, 1016 "v6.2.5": True, 1017 "v6.2.7": True, 1018 "v6.0.11": True 1019 } 1020 }, 1021 "priority": { 1022 "type": "integer", 1023 "revisions": { 1024 "v6.0.0": True, 1025 "v7.0.0": True, 1026 "v6.0.5": True, 1027 "v6.4.4": True, 1028 "v6.4.0": True, 1029 "v6.4.1": True, 1030 "v6.2.0": True, 1031 "v6.2.3": True, 1032 "v6.2.5": True, 1033 "v6.2.7": True, 1034 "v6.0.11": True 1035 } 1036 }, 1037 "auto_dial": { 1038 "type": "string", 1039 "options": [ 1040 { 1041 "value": "enable", 1042 "revisions": { 1043 "v6.0.0": True, 1044 "v7.0.0": True, 1045 "v6.0.5": True, 1046 "v6.4.4": True, 1047 "v6.4.0": True, 1048 "v6.4.1": True, 1049 "v6.2.0": True, 1050 "v6.2.3": True, 1051 "v6.2.5": True, 1052 "v6.2.7": True, 1053 "v6.0.11": True 1054 } 1055 }, 1056 { 1057 "value": "disable", 1058 "revisions": { 1059 "v6.0.0": True, 1060 "v7.0.0": True, 1061 "v6.0.5": True, 1062 "v6.4.4": True, 1063 "v6.4.0": True, 1064 "v6.4.1": True, 1065 "v6.2.0": True, 1066 "v6.2.3": True, 1067 "v6.2.5": True, 1068 "v6.2.7": True, 1069 "v6.0.11": True 1070 } 1071 } 1072 ], 1073 "revisions": { 1074 "v6.0.0": True, 1075 "v7.0.0": True, 1076 "v6.0.5": True, 1077 "v6.4.4": True, 1078 "v6.4.0": True, 1079 "v6.4.1": True, 1080 "v6.2.0": True, 1081 "v6.2.3": True, 1082 "v6.2.5": True, 1083 "v6.2.7": True, 1084 "v6.0.11": True 1085 } 1086 }, 1087 "altmode": { 1088 "type": "string", 1089 "options": [ 1090 { 1091 "value": "enable", 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 { 1107 "value": "disable", 1108 "revisions": { 1109 "v6.0.0": True, 1110 "v7.0.0": True, 1111 "v6.0.5": True, 1112 "v6.4.4": True, 1113 "v6.4.0": True, 1114 "v6.4.1": True, 1115 "v6.2.0": True, 1116 "v6.2.3": True, 1117 "v6.2.5": True, 1118 "v6.2.7": True, 1119 "v6.0.11": True 1120 } 1121 } 1122 ], 1123 "revisions": { 1124 "v6.0.0": True, 1125 "v7.0.0": True, 1126 "v6.0.5": True, 1127 "v6.4.4": True, 1128 "v6.4.0": True, 1129 "v6.4.1": True, 1130 "v6.2.0": True, 1131 "v6.2.3": True, 1132 "v6.2.5": True, 1133 "v6.2.7": True, 1134 "v6.0.11": True 1135 } 1136 }, 1137 "dont_send_CR3": { 1138 "type": "string", 1139 "options": [ 1140 { 1141 "value": "enable", 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 { 1157 "value": "disable", 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 ], 1173 "revisions": { 1174 "v6.0.0": True, 1175 "v7.0.0": True, 1176 "v6.0.5": True, 1177 "v6.4.4": True, 1178 "v6.4.0": True, 1179 "v6.4.1": True, 1180 "v6.2.0": True, 1181 "v6.2.3": True, 1182 "v6.2.5": True, 1183 "v6.2.7": True, 1184 "v6.0.11": True 1185 } 1186 }, 1187 "dont_send_CR2": { 1188 "type": "string", 1189 "options": [ 1190 { 1191 "value": "enable", 1192 "revisions": { 1193 "v6.0.0": True, 1194 "v7.0.0": True, 1195 "v6.0.5": True, 1196 "v6.4.4": True, 1197 "v6.4.0": True, 1198 "v6.4.1": True, 1199 "v6.2.0": True, 1200 "v6.2.3": True, 1201 "v6.2.5": True, 1202 "v6.2.7": True, 1203 "v6.0.11": True 1204 } 1205 }, 1206 { 1207 "value": "disable", 1208 "revisions": { 1209 "v6.0.0": True, 1210 "v7.0.0": True, 1211 "v6.0.5": True, 1212 "v6.4.4": True, 1213 "v6.4.0": True, 1214 "v6.4.1": True, 1215 "v6.2.0": True, 1216 "v6.2.3": True, 1217 "v6.2.5": True, 1218 "v6.2.7": True, 1219 "v6.0.11": True 1220 } 1221 } 1222 ], 1223 "revisions": { 1224 "v6.0.0": True, 1225 "v7.0.0": True, 1226 "v6.0.5": True, 1227 "v6.4.4": True, 1228 "v6.4.0": True, 1229 "v6.4.1": True, 1230 "v6.2.0": True, 1231 "v6.2.3": True, 1232 "v6.2.5": True, 1233 "v6.2.7": True, 1234 "v6.0.11": True 1235 } 1236 }, 1237 "dont_send_CR1": { 1238 "type": "string", 1239 "options": [ 1240 { 1241 "value": "enable", 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": "disable", 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 "revisions": { 1274 "v6.0.0": True, 1275 "v7.0.0": True, 1276 "v6.0.5": True, 1277 "v6.4.4": True, 1278 "v6.4.0": True, 1279 "v6.4.1": True, 1280 "v6.2.0": True, 1281 "v6.2.3": True, 1282 "v6.2.5": True, 1283 "v6.2.7": True, 1284 "v6.0.11": True 1285 } 1286 }, 1287 "mode": { 1288 "type": "string", 1289 "options": [ 1290 { 1291 "value": "standalone", 1292 "revisions": { 1293 "v6.0.0": True, 1294 "v7.0.0": True, 1295 "v6.0.5": True, 1296 "v6.4.4": True, 1297 "v6.4.0": True, 1298 "v6.4.1": True, 1299 "v6.2.0": True, 1300 "v6.2.3": True, 1301 "v6.2.5": True, 1302 "v6.2.7": True, 1303 "v6.0.11": True 1304 } 1305 }, 1306 { 1307 "value": "redundant", 1308 "revisions": { 1309 "v6.0.0": True, 1310 "v7.0.0": True, 1311 "v6.0.5": True, 1312 "v6.4.4": True, 1313 "v6.4.0": True, 1314 "v6.4.1": True, 1315 "v6.2.0": True, 1316 "v6.2.3": True, 1317 "v6.2.5": True, 1318 "v6.2.7": True, 1319 "v6.0.11": True 1320 } 1321 } 1322 ], 1323 "revisions": { 1324 "v6.0.0": True, 1325 "v7.0.0": True, 1326 "v6.0.5": True, 1327 "v6.4.4": True, 1328 "v6.4.0": True, 1329 "v6.4.1": True, 1330 "v6.2.0": True, 1331 "v6.2.3": True, 1332 "v6.2.5": True, 1333 "v6.2.7": True, 1334 "v6.0.11": True 1335 } 1336 }, 1337 "peer_modem2": { 1338 "type": "string", 1339 "options": [ 1340 { 1341 "value": "generic", 1342 "revisions": { 1343 "v6.0.0": True, 1344 "v7.0.0": True, 1345 "v6.0.5": True, 1346 "v6.4.4": True, 1347 "v6.4.0": True, 1348 "v6.4.1": True, 1349 "v6.2.0": True, 1350 "v6.2.3": True, 1351 "v6.2.5": True, 1352 "v6.2.7": True, 1353 "v6.0.11": True 1354 } 1355 }, 1356 { 1357 "value": "actiontec", 1358 "revisions": { 1359 "v6.0.0": True, 1360 "v7.0.0": True, 1361 "v6.0.5": True, 1362 "v6.4.4": True, 1363 "v6.4.0": True, 1364 "v6.4.1": True, 1365 "v6.2.0": True, 1366 "v6.2.3": True, 1367 "v6.2.5": True, 1368 "v6.2.7": True, 1369 "v6.0.11": True 1370 } 1371 }, 1372 { 1373 "value": "ascend_TNT", 1374 "revisions": { 1375 "v6.0.0": True, 1376 "v7.0.0": True, 1377 "v6.0.5": True, 1378 "v6.4.4": True, 1379 "v6.4.0": True, 1380 "v6.4.1": True, 1381 "v6.2.0": True, 1382 "v6.2.3": True, 1383 "v6.2.5": True, 1384 "v6.2.7": True, 1385 "v6.0.11": True 1386 } 1387 } 1388 ], 1389 "revisions": { 1390 "v6.0.0": True, 1391 "v7.0.0": True, 1392 "v6.0.5": True, 1393 "v6.4.4": True, 1394 "v6.4.0": True, 1395 "v6.4.1": True, 1396 "v6.2.0": True, 1397 "v6.2.3": True, 1398 "v6.2.5": True, 1399 "v6.2.7": True, 1400 "v6.0.11": True 1401 } 1402 }, 1403 "peer_modem3": { 1404 "type": "string", 1405 "options": [ 1406 { 1407 "value": "generic", 1408 "revisions": { 1409 "v6.0.0": True, 1410 "v7.0.0": True, 1411 "v6.0.5": True, 1412 "v6.4.4": True, 1413 "v6.4.0": True, 1414 "v6.4.1": True, 1415 "v6.2.0": True, 1416 "v6.2.3": True, 1417 "v6.2.5": True, 1418 "v6.2.7": True, 1419 "v6.0.11": True 1420 } 1421 }, 1422 { 1423 "value": "actiontec", 1424 "revisions": { 1425 "v6.0.0": True, 1426 "v7.0.0": True, 1427 "v6.0.5": True, 1428 "v6.4.4": True, 1429 "v6.4.0": True, 1430 "v6.4.1": True, 1431 "v6.2.0": True, 1432 "v6.2.3": True, 1433 "v6.2.5": True, 1434 "v6.2.7": True, 1435 "v6.0.11": True 1436 } 1437 }, 1438 { 1439 "value": "ascend_TNT", 1440 "revisions": { 1441 "v6.0.0": True, 1442 "v7.0.0": True, 1443 "v6.0.5": True, 1444 "v6.4.4": True, 1445 "v6.4.0": True, 1446 "v6.4.1": True, 1447 "v6.2.0": True, 1448 "v6.2.3": True, 1449 "v6.2.5": True, 1450 "v6.2.7": True, 1451 "v6.0.11": True 1452 } 1453 } 1454 ], 1455 "revisions": { 1456 "v6.0.0": True, 1457 "v7.0.0": True, 1458 "v6.0.5": True, 1459 "v6.4.4": True, 1460 "v6.4.0": True, 1461 "v6.4.1": True, 1462 "v6.2.0": True, 1463 "v6.2.3": True, 1464 "v6.2.5": True, 1465 "v6.2.7": True, 1466 "v6.0.11": True 1467 } 1468 }, 1469 "peer_modem1": { 1470 "type": "string", 1471 "options": [ 1472 { 1473 "value": "generic", 1474 "revisions": { 1475 "v6.0.0": True, 1476 "v7.0.0": True, 1477 "v6.0.5": True, 1478 "v6.4.4": True, 1479 "v6.4.0": True, 1480 "v6.4.1": True, 1481 "v6.2.0": True, 1482 "v6.2.3": True, 1483 "v6.2.5": True, 1484 "v6.2.7": True, 1485 "v6.0.11": True 1486 } 1487 }, 1488 { 1489 "value": "actiontec", 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 { 1505 "value": "ascend_TNT", 1506 "revisions": { 1507 "v6.0.0": True, 1508 "v7.0.0": True, 1509 "v6.0.5": True, 1510 "v6.4.4": True, 1511 "v6.4.0": True, 1512 "v6.4.1": True, 1513 "v6.2.0": True, 1514 "v6.2.3": True, 1515 "v6.2.5": True, 1516 "v6.2.7": True, 1517 "v6.0.11": True 1518 } 1519 } 1520 ], 1521 "revisions": { 1522 "v6.0.0": True, 1523 "v7.0.0": True, 1524 "v6.0.5": True, 1525 "v6.4.4": True, 1526 "v6.4.0": True, 1527 "v6.4.1": True, 1528 "v6.2.0": True, 1529 "v6.2.3": True, 1530 "v6.2.5": True, 1531 "v6.2.7": True, 1532 "v6.0.11": True 1533 } 1534 }, 1535 "phone2": { 1536 "type": "string", 1537 "revisions": { 1538 "v6.0.0": True, 1539 "v7.0.0": True, 1540 "v6.0.5": True, 1541 "v6.4.4": True, 1542 "v6.4.0": True, 1543 "v6.4.1": True, 1544 "v6.2.0": True, 1545 "v6.2.3": True, 1546 "v6.2.5": True, 1547 "v6.2.7": True, 1548 "v6.0.11": True 1549 } 1550 }, 1551 "phone3": { 1552 "type": "string", 1553 "revisions": { 1554 "v6.0.0": True, 1555 "v7.0.0": True, 1556 "v6.0.5": True, 1557 "v6.4.4": True, 1558 "v6.4.0": True, 1559 "v6.4.1": True, 1560 "v6.2.0": True, 1561 "v6.2.3": True, 1562 "v6.2.5": True, 1563 "v6.2.7": True, 1564 "v6.0.11": True 1565 } 1566 }, 1567 "phone1": { 1568 "type": "string", 1569 "revisions": { 1570 "v6.0.0": True, 1571 "v7.0.0": True, 1572 "v6.0.5": True, 1573 "v6.4.4": True, 1574 "v6.4.0": True, 1575 "v6.4.1": True, 1576 "v6.2.0": True, 1577 "v6.2.3": True, 1578 "v6.2.5": True, 1579 "v6.2.7": True, 1580 "v6.0.11": True 1581 } 1582 }, 1583 "extra_init2": { 1584 "type": "string", 1585 "revisions": { 1586 "v6.0.0": True, 1587 "v7.0.0": True, 1588 "v6.0.5": True, 1589 "v6.4.4": True, 1590 "v6.4.0": True, 1591 "v6.4.1": True, 1592 "v6.2.0": True, 1593 "v6.2.3": True, 1594 "v6.2.5": True, 1595 "v6.2.7": True, 1596 "v6.0.11": True 1597 } 1598 }, 1599 "username3": { 1600 "type": "string", 1601 "revisions": { 1602 "v6.0.0": True, 1603 "v7.0.0": True, 1604 "v6.0.5": True, 1605 "v6.4.4": True, 1606 "v6.4.0": True, 1607 "v6.4.1": True, 1608 "v6.2.0": True, 1609 "v6.2.3": True, 1610 "v6.2.5": True, 1611 "v6.2.7": True, 1612 "v6.0.11": True 1613 } 1614 }, 1615 "extra_init1": { 1616 "type": "string", 1617 "revisions": { 1618 "v6.0.0": True, 1619 "v7.0.0": True, 1620 "v6.0.5": True, 1621 "v6.4.4": True, 1622 "v6.4.0": True, 1623 "v6.4.1": True, 1624 "v6.2.0": True, 1625 "v6.2.3": True, 1626 "v6.2.5": True, 1627 "v6.2.7": True, 1628 "v6.0.11": True 1629 } 1630 }, 1631 "lockdown_lac": { 1632 "type": "string", 1633 "revisions": { 1634 "v6.0.0": True, 1635 "v7.0.0": True, 1636 "v6.0.5": True, 1637 "v6.4.4": True, 1638 "v6.4.0": True, 1639 "v6.4.1": True, 1640 "v6.2.0": True, 1641 "v6.2.3": True, 1642 "v6.2.5": True, 1643 "v6.2.7": True, 1644 "v6.0.11": True 1645 } 1646 }, 1647 "ppp_echo_request1": { 1648 "type": "string", 1649 "options": [ 1650 { 1651 "value": "enable", 1652 "revisions": { 1653 "v6.0.0": True, 1654 "v7.0.0": True, 1655 "v6.0.5": True, 1656 "v6.4.4": True, 1657 "v6.4.0": True, 1658 "v6.4.1": True, 1659 "v6.2.0": True, 1660 "v6.2.3": True, 1661 "v6.2.5": True, 1662 "v6.2.7": True, 1663 "v6.0.11": True 1664 } 1665 }, 1666 { 1667 "value": "disable", 1668 "revisions": { 1669 "v6.0.0": True, 1670 "v7.0.0": True, 1671 "v6.0.5": True, 1672 "v6.4.4": True, 1673 "v6.4.0": True, 1674 "v6.4.1": True, 1675 "v6.2.0": True, 1676 "v6.2.3": True, 1677 "v6.2.5": True, 1678 "v6.2.7": True, 1679 "v6.0.11": True 1680 } 1681 } 1682 ], 1683 "revisions": { 1684 "v6.0.0": True, 1685 "v7.0.0": True, 1686 "v6.0.5": True, 1687 "v6.4.4": True, 1688 "v6.4.0": True, 1689 "v6.4.1": True, 1690 "v6.2.0": True, 1691 "v6.2.3": True, 1692 "v6.2.5": True, 1693 "v6.2.7": True, 1694 "v6.0.11": True 1695 } 1696 }, 1697 "interface": { 1698 "type": "string", 1699 "revisions": { 1700 "v6.0.0": True, 1701 "v7.0.0": True, 1702 "v6.0.5": True, 1703 "v6.4.4": True, 1704 "v6.4.0": True, 1705 "v6.4.1": True, 1706 "v6.2.0": True, 1707 "v6.2.3": True, 1708 "v6.2.5": True, 1709 "v6.2.7": True, 1710 "v6.0.11": True 1711 } 1712 }, 1713 "traffic_check": { 1714 "type": "string", 1715 "options": [ 1716 { 1717 "value": "enable", 1718 "revisions": { 1719 "v6.0.0": True, 1720 "v7.0.0": True, 1721 "v6.0.5": True, 1722 "v6.4.4": True, 1723 "v6.4.0": True, 1724 "v6.4.1": True, 1725 "v6.2.0": True, 1726 "v6.2.3": True, 1727 "v6.2.5": True, 1728 "v6.2.7": True, 1729 "v6.0.11": True 1730 } 1731 }, 1732 { 1733 "value": "disable", 1734 "revisions": { 1735 "v6.0.0": True, 1736 "v7.0.0": True, 1737 "v6.0.5": True, 1738 "v6.4.4": True, 1739 "v6.4.0": True, 1740 "v6.4.1": True, 1741 "v6.2.0": True, 1742 "v6.2.3": True, 1743 "v6.2.5": True, 1744 "v6.2.7": True, 1745 "v6.0.11": True 1746 } 1747 } 1748 ], 1749 "revisions": { 1750 "v6.0.0": True, 1751 "v7.0.0": True, 1752 "v6.0.5": True, 1753 "v6.4.4": True, 1754 "v6.4.0": True, 1755 "v6.4.1": True, 1756 "v6.2.0": True, 1757 "v6.2.3": True, 1758 "v6.2.5": True, 1759 "v6.2.7": True, 1760 "v6.0.11": True 1761 } 1762 }, 1763 "passwd1": { 1764 "type": "string", 1765 "revisions": { 1766 "v6.0.0": True, 1767 "v7.0.0": True, 1768 "v6.0.5": True, 1769 "v6.4.4": True, 1770 "v6.4.0": True, 1771 "v6.4.1": True, 1772 "v6.2.0": True, 1773 "v6.2.3": True, 1774 "v6.2.5": True, 1775 "v6.2.7": True, 1776 "v6.0.11": True 1777 } 1778 }, 1779 "passwd3": { 1780 "type": "string", 1781 "revisions": { 1782 "v6.0.0": True, 1783 "v7.0.0": True, 1784 "v6.0.5": True, 1785 "v6.4.4": True, 1786 "v6.4.0": True, 1787 "v6.4.1": True, 1788 "v6.2.0": True, 1789 "v6.2.3": True, 1790 "v6.2.5": True, 1791 "v6.2.7": True, 1792 "v6.0.11": True 1793 } 1794 }, 1795 "wireless_port": { 1796 "type": "integer", 1797 "revisions": { 1798 "v6.0.0": True, 1799 "v7.0.0": True, 1800 "v6.0.5": True, 1801 "v6.4.4": True, 1802 "v6.4.0": True, 1803 "v6.4.1": True, 1804 "v6.2.0": True, 1805 "v6.2.3": True, 1806 "v6.2.5": True, 1807 "v6.2.7": True, 1808 "v6.0.11": True 1809 } 1810 }, 1811 "reset": { 1812 "type": "integer", 1813 "revisions": { 1814 "v6.0.0": True, 1815 "v7.0.0": True, 1816 "v6.0.5": True, 1817 "v6.4.4": True, 1818 "v6.4.0": True, 1819 "v6.4.1": True, 1820 "v6.2.0": True, 1821 "v6.2.3": True, 1822 "v6.2.5": True, 1823 "v6.2.7": True, 1824 "v6.0.11": True 1825 } 1826 }, 1827 "distance": { 1828 "type": "integer", 1829 "revisions": { 1830 "v6.0.0": True, 1831 "v7.0.0": True, 1832 "v6.0.5": True, 1833 "v6.4.4": True, 1834 "v6.4.0": True, 1835 "v6.4.1": True, 1836 "v6.2.0": True, 1837 "v6.2.3": True, 1838 "v6.2.5": True, 1839 "v6.2.7": True, 1840 "v6.0.11": True 1841 } 1842 }, 1843 "network_init": { 1844 "type": "string", 1845 "revisions": { 1846 "v6.0.0": True, 1847 "v7.0.0": True, 1848 "v6.0.5": True, 1849 "v6.4.4": True, 1850 "v6.4.0": True, 1851 "v6.4.1": True, 1852 "v6.2.0": True, 1853 "v6.2.3": True, 1854 "v6.2.5": True, 1855 "v6.2.7": True, 1856 "v6.0.11": True 1857 } 1858 }, 1859 "username2": { 1860 "type": "string", 1861 "revisions": { 1862 "v6.0.0": True, 1863 "v7.0.0": True, 1864 "v6.0.5": True, 1865 "v6.4.4": True, 1866 "v6.4.0": True, 1867 "v6.4.1": True, 1868 "v6.2.0": True, 1869 "v6.2.3": True, 1870 "v6.2.5": True, 1871 "v6.2.7": True, 1872 "v6.0.11": True 1873 } 1874 }, 1875 "authtype3": { 1876 "multiple_values": True, 1877 "type": "list", 1878 "options": [ 1879 { 1880 "value": "pap", 1881 "revisions": { 1882 "v6.0.0": True, 1883 "v7.0.0": True, 1884 "v6.0.5": True, 1885 "v6.4.4": True, 1886 "v6.4.0": True, 1887 "v6.4.1": True, 1888 "v6.2.0": True, 1889 "v6.2.3": True, 1890 "v6.2.5": True, 1891 "v6.2.7": True, 1892 "v6.0.11": True 1893 } 1894 }, 1895 { 1896 "value": "chap", 1897 "revisions": { 1898 "v6.0.0": True, 1899 "v7.0.0": True, 1900 "v6.0.5": True, 1901 "v6.4.4": True, 1902 "v6.4.0": True, 1903 "v6.4.1": True, 1904 "v6.2.0": True, 1905 "v6.2.3": True, 1906 "v6.2.5": True, 1907 "v6.2.7": True, 1908 "v6.0.11": True 1909 } 1910 }, 1911 { 1912 "value": "mschap", 1913 "revisions": { 1914 "v6.0.0": True, 1915 "v7.0.0": True, 1916 "v6.0.5": True, 1917 "v6.4.4": True, 1918 "v6.4.0": True, 1919 "v6.4.1": True, 1920 "v6.2.0": True, 1921 "v6.2.3": True, 1922 "v6.2.5": True, 1923 "v6.2.7": True, 1924 "v6.0.11": True 1925 } 1926 }, 1927 { 1928 "value": "mschapv2", 1929 "revisions": { 1930 "v6.0.0": True, 1931 "v7.0.0": True, 1932 "v6.0.5": True, 1933 "v6.4.4": True, 1934 "v6.4.0": True, 1935 "v6.4.1": True, 1936 "v6.2.0": True, 1937 "v6.2.3": True, 1938 "v6.2.5": True, 1939 "v6.2.7": True, 1940 "v6.0.11": True 1941 } 1942 } 1943 ], 1944 "revisions": { 1945 "v6.0.0": True, 1946 "v7.0.0": True, 1947 "v6.0.5": True, 1948 "v6.4.4": True, 1949 "v6.4.0": True, 1950 "v6.4.1": True, 1951 "v6.2.0": True, 1952 "v6.2.3": True, 1953 "v6.2.5": True, 1954 "v6.2.7": True, 1955 "v6.0.11": True 1956 } 1957 }, 1958 "authtype2": { 1959 "multiple_values": True, 1960 "type": "list", 1961 "options": [ 1962 { 1963 "value": "pap", 1964 "revisions": { 1965 "v6.0.0": True, 1966 "v7.0.0": True, 1967 "v6.0.5": True, 1968 "v6.4.4": True, 1969 "v6.4.0": True, 1970 "v6.4.1": True, 1971 "v6.2.0": True, 1972 "v6.2.3": True, 1973 "v6.2.5": True, 1974 "v6.2.7": True, 1975 "v6.0.11": True 1976 } 1977 }, 1978 { 1979 "value": "chap", 1980 "revisions": { 1981 "v6.0.0": True, 1982 "v7.0.0": True, 1983 "v6.0.5": True, 1984 "v6.4.4": True, 1985 "v6.4.0": True, 1986 "v6.4.1": True, 1987 "v6.2.0": True, 1988 "v6.2.3": True, 1989 "v6.2.5": True, 1990 "v6.2.7": True, 1991 "v6.0.11": True 1992 } 1993 }, 1994 { 1995 "value": "mschap", 1996 "revisions": { 1997 "v6.0.0": True, 1998 "v7.0.0": True, 1999 "v6.0.5": True, 2000 "v6.4.4": True, 2001 "v6.4.0": True, 2002 "v6.4.1": True, 2003 "v6.2.0": True, 2004 "v6.2.3": True, 2005 "v6.2.5": True, 2006 "v6.2.7": True, 2007 "v6.0.11": True 2008 } 2009 }, 2010 { 2011 "value": "mschapv2", 2012 "revisions": { 2013 "v6.0.0": True, 2014 "v7.0.0": True, 2015 "v6.0.5": True, 2016 "v6.4.4": True, 2017 "v6.4.0": True, 2018 "v6.4.1": True, 2019 "v6.2.0": True, 2020 "v6.2.3": True, 2021 "v6.2.5": True, 2022 "v6.2.7": True, 2023 "v6.0.11": True 2024 } 2025 } 2026 ], 2027 "revisions": { 2028 "v6.0.0": True, 2029 "v7.0.0": True, 2030 "v6.0.5": True, 2031 "v6.4.4": True, 2032 "v6.4.0": True, 2033 "v6.4.1": True, 2034 "v6.2.0": True, 2035 "v6.2.3": True, 2036 "v6.2.5": True, 2037 "v6.2.7": True, 2038 "v6.0.11": True 2039 } 2040 }, 2041 "authtype1": { 2042 "multiple_values": True, 2043 "type": "list", 2044 "options": [ 2045 { 2046 "value": "pap", 2047 "revisions": { 2048 "v6.0.0": True, 2049 "v7.0.0": True, 2050 "v6.0.5": True, 2051 "v6.4.4": True, 2052 "v6.4.0": True, 2053 "v6.4.1": True, 2054 "v6.2.0": True, 2055 "v6.2.3": True, 2056 "v6.2.5": True, 2057 "v6.2.7": True, 2058 "v6.0.11": True 2059 } 2060 }, 2061 { 2062 "value": "chap", 2063 "revisions": { 2064 "v6.0.0": True, 2065 "v7.0.0": True, 2066 "v6.0.5": True, 2067 "v6.4.4": True, 2068 "v6.4.0": True, 2069 "v6.4.1": True, 2070 "v6.2.0": True, 2071 "v6.2.3": True, 2072 "v6.2.5": True, 2073 "v6.2.7": True, 2074 "v6.0.11": True 2075 } 2076 }, 2077 { 2078 "value": "mschap", 2079 "revisions": { 2080 "v6.0.0": True, 2081 "v7.0.0": True, 2082 "v6.0.5": True, 2083 "v6.4.4": True, 2084 "v6.4.0": True, 2085 "v6.4.1": True, 2086 "v6.2.0": True, 2087 "v6.2.3": True, 2088 "v6.2.5": True, 2089 "v6.2.7": True, 2090 "v6.0.11": True 2091 } 2092 }, 2093 { 2094 "value": "mschapv2", 2095 "revisions": { 2096 "v6.0.0": True, 2097 "v7.0.0": True, 2098 "v6.0.5": True, 2099 "v6.4.4": True, 2100 "v6.4.0": True, 2101 "v6.4.1": True, 2102 "v6.2.0": True, 2103 "v6.2.3": True, 2104 "v6.2.5": True, 2105 "v6.2.7": True, 2106 "v6.0.11": True 2107 } 2108 } 2109 ], 2110 "revisions": { 2111 "v6.0.0": True, 2112 "v7.0.0": True, 2113 "v6.0.5": True, 2114 "v6.4.4": True, 2115 "v6.4.0": True, 2116 "v6.4.1": True, 2117 "v6.2.0": True, 2118 "v6.2.3": True, 2119 "v6.2.5": True, 2120 "v6.2.7": True, 2121 "v6.0.11": True 2122 } 2123 }, 2124 "connect_timeout": { 2125 "type": "integer", 2126 "revisions": { 2127 "v6.0.0": True, 2128 "v7.0.0": True, 2129 "v6.0.5": True, 2130 "v6.4.4": True, 2131 "v6.4.0": True, 2132 "v6.4.1": True, 2133 "v6.2.0": True, 2134 "v6.2.3": True, 2135 "v6.2.5": True, 2136 "v6.2.7": True, 2137 "v6.0.11": True 2138 } 2139 }, 2140 "ppp_echo_request2": { 2141 "type": "string", 2142 "options": [ 2143 { 2144 "value": "enable", 2145 "revisions": { 2146 "v6.0.0": True, 2147 "v7.0.0": True, 2148 "v6.0.5": True, 2149 "v6.4.4": True, 2150 "v6.4.0": True, 2151 "v6.4.1": True, 2152 "v6.2.0": True, 2153 "v6.2.3": True, 2154 "v6.2.5": True, 2155 "v6.2.7": True, 2156 "v6.0.11": True 2157 } 2158 }, 2159 { 2160 "value": "disable", 2161 "revisions": { 2162 "v6.0.0": True, 2163 "v7.0.0": True, 2164 "v6.0.5": True, 2165 "v6.4.4": True, 2166 "v6.4.0": True, 2167 "v6.4.1": True, 2168 "v6.2.0": True, 2169 "v6.2.3": True, 2170 "v6.2.5": True, 2171 "v6.2.7": True, 2172 "v6.0.11": True 2173 } 2174 } 2175 ], 2176 "revisions": { 2177 "v6.0.0": True, 2178 "v7.0.0": True, 2179 "v6.0.5": True, 2180 "v6.4.4": True, 2181 "v6.4.0": True, 2182 "v6.4.1": True, 2183 "v6.2.0": True, 2184 "v6.2.3": True, 2185 "v6.2.5": True, 2186 "v6.2.7": True, 2187 "v6.0.11": True 2188 } 2189 }, 2190 "idle_timer": { 2191 "type": "integer", 2192 "revisions": { 2193 "v6.0.0": True, 2194 "v7.0.0": True, 2195 "v6.0.5": True, 2196 "v6.4.4": True, 2197 "v6.4.0": True, 2198 "v6.4.1": True, 2199 "v6.2.0": True, 2200 "v6.2.3": True, 2201 "v6.2.5": True, 2202 "v6.2.7": True, 2203 "v6.0.11": True 2204 } 2205 }, 2206 "action": { 2207 "type": "string", 2208 "options": [ 2209 { 2210 "value": "dial", 2211 "revisions": { 2212 "v6.0.0": True, 2213 "v7.0.0": True, 2214 "v6.0.5": True, 2215 "v6.4.4": True, 2216 "v6.4.0": True, 2217 "v6.4.1": True, 2218 "v6.2.0": True, 2219 "v6.2.3": True, 2220 "v6.2.5": True, 2221 "v6.2.7": True, 2222 "v6.0.11": True 2223 } 2224 }, 2225 { 2226 "value": "stop", 2227 "revisions": { 2228 "v6.0.0": True, 2229 "v7.0.0": True, 2230 "v6.0.5": True, 2231 "v6.4.4": True, 2232 "v6.4.0": True, 2233 "v6.4.1": True, 2234 "v6.2.0": True, 2235 "v6.2.3": True, 2236 "v6.2.5": True, 2237 "v6.2.7": True, 2238 "v6.0.11": True 2239 } 2240 }, 2241 { 2242 "value": "none", 2243 "revisions": { 2244 "v6.0.0": True, 2245 "v7.0.0": True, 2246 "v6.0.5": True, 2247 "v6.4.4": True, 2248 "v6.4.0": True, 2249 "v6.4.1": True, 2250 "v6.2.0": True, 2251 "v6.2.3": True, 2252 "v6.2.5": True, 2253 "v6.2.7": True, 2254 "v6.0.11": True 2255 } 2256 } 2257 ], 2258 "revisions": { 2259 "v6.0.0": True, 2260 "v7.0.0": True, 2261 "v6.0.5": True, 2262 "v6.4.4": True, 2263 "v6.4.0": True, 2264 "v6.4.1": True, 2265 "v6.2.0": True, 2266 "v6.2.3": True, 2267 "v6.2.5": True, 2268 "v6.2.7": True, 2269 "v6.0.11": True 2270 } 2271 }, 2272 "passwd2": { 2273 "type": "string", 2274 "revisions": { 2275 "v6.0.0": True, 2276 "v7.0.0": True, 2277 "v6.0.5": True, 2278 "v6.4.4": True, 2279 "v6.4.0": True, 2280 "v6.4.1": True, 2281 "v6.2.0": True, 2282 "v6.2.3": True, 2283 "v6.2.5": True, 2284 "v6.2.7": True, 2285 "v6.0.11": True 2286 } 2287 } 2288 }, 2289 "revisions": { 2290 "v6.0.0": True, 2291 "v7.0.0": True, 2292 "v6.0.5": True, 2293 "v6.4.4": True, 2294 "v6.4.0": True, 2295 "v6.4.1": True, 2296 "v6.2.0": True, 2297 "v6.2.3": True, 2298 "v6.2.5": True, 2299 "v6.2.7": True, 2300 "v6.0.11": True 2301 } 2302} 2303 2304 2305def main(): 2306 module_spec = schema_to_module_spec(versioned_schema) 2307 mkeyname = None 2308 fields = { 2309 "access_token": {"required": False, "type": "str", "no_log": True}, 2310 "enable_log": {"required": False, "type": bool}, 2311 "vdom": {"required": False, "type": "str", "default": "root"}, 2312 "system_modem": { 2313 "required": False, "type": "dict", "default": None, 2314 "options": { 2315 } 2316 } 2317 } 2318 for attribute_name in module_spec['options']: 2319 fields["system_modem"]['options'][attribute_name] = module_spec['options'][attribute_name] 2320 if mkeyname and mkeyname == attribute_name: 2321 fields["system_modem"]['options'][attribute_name]['required'] = True 2322 2323 check_legacy_fortiosapi() 2324 module = AnsibleModule(argument_spec=fields, 2325 supports_check_mode=False) 2326 2327 versions_check_result = None 2328 if module._socket_path: 2329 connection = Connection(module._socket_path) 2330 if 'access_token' in module.params: 2331 connection.set_option('access_token', module.params['access_token']) 2332 2333 if 'enable_log' in module.params: 2334 connection.set_option('enable_log', module.params['enable_log']) 2335 else: 2336 connection.set_option('enable_log', False) 2337 fos = FortiOSHandler(connection, module, mkeyname) 2338 versions_check_result = check_schema_versioning(fos, versioned_schema, "system_modem") 2339 2340 is_error, has_changed, result = fortios_system(module.params, fos) 2341 2342 else: 2343 module.fail_json(**FAIL_SOCKET_MSG) 2344 2345 if versions_check_result and versions_check_result['matched'] is False: 2346 module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv") 2347 2348 if not is_error: 2349 if versions_check_result and versions_check_result['matched'] is False: 2350 module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result) 2351 else: 2352 module.exit_json(changed=has_changed, meta=result) 2353 else: 2354 if versions_check_result and versions_check_result['matched'] is False: 2355 module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result) 2356 else: 2357 module.fail_json(msg="Error in repo", meta=result) 2358 2359 2360if __name__ == '__main__': 2361 main() 2362