Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ansible / fortinet / fortimanager / plugins / modules / fmgr_wanprof_system_sdwan.py
Size: Mime:
#!/usr/bin/python
from __future__ import absolute_import, division, print_function
# Copyright 2019-2021 Fortinet, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

__metaclass__ = type

ANSIBLE_METADATA = {'status': ['preview'],
                    'supported_by': 'community',
                    'metadata_version': '1.1'}

DOCUMENTATION = '''
---
module: fmgr_wanprof_system_sdwan
short_description: Configure redundant internet connections using SD-WAN
description:
    - This module is able to configure a FortiManager device.
    - Examples include all parameters and values which need to be adjusted to data sources before usage.

version_added: "2.10"
author:
    - Link Zheng (@chillancezen)
    - Jie Xue (@JieX19)
    - Frank Shen (@fshen01)
    - Hongbin Lu (@fgtdev-hblu)
notes:
    - Running in workspace locking mode is supported in this FortiManager module, the top
      level parameters workspace_locking_adom and workspace_locking_timeout help do the work.
    - To create or update an object, use state present directive.
    - To delete an object, use state absent directive.
    - Normally, running one module can fail when a non-zero rc is returned. you can also override
      the conditions to fail or succeed with parameters rc_failed and rc_succeeded

options:
    enable_log:
        description: Enable/Disable logging for task
        required: false
        type: bool
        default: false
    proposed_method:
        description: The overridden method for the underlying Json RPC request
        required: false
        type: str
        choices:
          - update
          - set
          - add
    bypass_validation:
        description: only set to True when module schema diffs with FortiManager API structure, module continues to execute without validating parameters
        required: false
        type: bool
        default: false
    workspace_locking_adom:
        description: the adom to lock for FortiManager running in workspace mode, the value can be global and others including root
        required: false
        type: str
    workspace_locking_timeout:
        description: the maximum time in seconds to wait for other user to release the workspace lock
        required: false
        type: int
        default: 300
    state:
        description: the directive to create, update or delete an object
        type: str
        required: true
        choices:
          - present
          - absent
    rc_succeeded:
        description: the rc codes list with which the conditions to succeed will be overriden
        type: list
        required: false
    rc_failed:
        description: the rc codes list with which the conditions to fail will be overriden
        type: list
        required: false
    adom:
        description: the parameter (adom) in requested url
        type: str
        required: true
    wanprof:
        description: the parameter (wanprof) in requested url
        type: str
        required: true
    wanprof_system_sdwan:
        description: the top level parameters set
        required: false
        type: dict
        suboptions:
            duplication:
                description: no description
                type: list
                suboptions:
                    dstaddr:
                        type: str
                        description: 'Destination address or address group names.'
                    dstaddr6:
                        type: str
                        description: 'Destination address6 or address6 group names.'
                    dstintf:
                        type: str
                        description: 'Outgoing (egress) interfaces or zones.'
                    id:
                        type: int
                        description: 'Duplication rule ID (1 - 255).'
                    packet-de-duplication:
                        type: str
                        description: 'Enable/disable discarding of packets that have been duplicated.'
                        choices:
                            - 'disable'
                            - 'enable'
                    packet-duplication:
                        type: str
                        description: 'Configure packet duplication method.'
                        choices:
                            - 'disable'
                            - 'force'
                            - 'on-demand'
                    service:
                        type: str
                        description: 'Service and service group name.'
                    srcaddr:
                        type: str
                        description: 'Source address or address group names.'
                    srcaddr6:
                        type: str
                        description: 'Source address6 or address6 group names.'
                    srcintf:
                        type: str
                        description: 'Incoming (ingress) interfaces or zones.'
                    service-id:
                        type: str
                        description: 'SD-WAN service rule ID list.'
            duplication-max-num:
                type: int
                description: 'Maximum number of interface members a packet is duplicated in the SD-WAN zone (2 - 4, default = 2; if set to 3, the original p...'
            fail-detect:
                type: str
                description: 'Enable/disable SD-WAN Internet connection status checking (failure detection).'
                choices:
                    - 'disable'
                    - 'enable'
            health-check:
                description: no description
                type: list
                suboptions:
                    _dynamic-server:
                        type: str
                        description: no description
                    addr-mode:
                        type: str
                        description: 'Address mode (IPv4 or IPv6).'
                        choices:
                            - 'ipv4'
                            - 'ipv6'
                    diffservcode:
                        type: str
                        description: 'Differentiated services code point (DSCP) in the IP header of the probe packet.'
                    dns-match-ip:
                        type: str
                        description: 'Response IP expected from DNS server if the protocol is DNS.'
                    dns-request-domain:
                        type: str
                        description: 'Fully qualified domain name to resolve for the DNS probe.'
                    failtime:
                        type: int
                        description: 'Number of failures before server is considered lost (1 - 3600, default = 5).'
                    ftp-file:
                        type: str
                        description: 'Full path and file name on the FTP server to download for FTP health-check to probe.'
                    ftp-mode:
                        type: str
                        description: 'FTP mode.'
                        choices:
                            - 'passive'
                            - 'port'
                    ha-priority:
                        type: int
                        description: 'HA election priority (1 - 50).'
                    http-agent:
                        type: str
                        description: 'String in the http-agent field in the HTTP header.'
                    http-get:
                        type: str
                        description: 'URL used to communicate with the server if the protocol if the protocol is HTTP.'
                    http-match:
                        type: str
                        description: 'Response string expected from the server if the protocol is HTTP.'
                    interval:
                        type: int
                        description: 'Status check interval in milliseconds, or the time between attempting to connect to the server (500 - 3600*1000 msec, ...'
                    members:
                        type: str
                        description: 'Member sequence number list.'
                    name:
                        type: str
                        description: 'Status check or health check name.'
                    packet-size:
                        type: int
                        description: 'Packet size of a twamp test session,'
                    password:
                        description: no description
                        type: str
                    port:
                        type: int
                        description: 'Port number used to communicate with the server over the selected protocol (0-65535, default = 0, auto select. http, t...'
                    probe-count:
                        type: int
                        description: 'Number of most recent probes that should be used to calculate latency and jitter (5 - 30, default = 30).'
                    probe-packets:
                        type: str
                        description: 'Enable/disable transmission of probe packets.'
                        choices:
                            - 'disable'
                            - 'enable'
                    probe-timeout:
                        type: int
                        description: 'Time to wait before a probe packet is considered lost (500 - 3600*1000 msec, default = 500).'
                    protocol:
                        type: str
                        description: 'Protocol used to determine if the FortiGate can communicate with the server.'
                        choices:
                            - 'ping'
                            - 'tcp-echo'
                            - 'udp-echo'
                            - 'http'
                            - 'twamp'
                            - 'ping6'
                            - 'dns'
                            - 'tcp-connect'
                            - 'ftp'
                    quality-measured-method:
                        type: str
                        description: 'Method to measure the quality of tcp-connect.'
                        choices:
                            - 'half-close'
                            - 'half-open'
                    recoverytime:
                        type: int
                        description: 'Number of successful responses received before server is considered recovered (1 - 3600, default = 5).'
                    security-mode:
                        type: str
                        description: 'Twamp controller security mode.'
                        choices:
                            - 'none'
                            - 'authentication'
                    server:
                        description: no description
                        type: str
                    sla:
                        description: no description
                        type: list
                        suboptions:
                            id:
                                type: int
                                description: 'SLA ID.'
                            jitter-threshold:
                                type: int
                                description: 'Jitter for SLA to make decision in milliseconds. (0 - 10000000, default = 5).'
                            latency-threshold:
                                type: int
                                description: 'Latency for SLA to make decision in milliseconds. (0 - 10000000, default = 5).'
                            link-cost-factor:
                                description: no description
                                type: list
                                choices:
                                 - latency
                                 - jitter
                                 - packet-loss
                            packetloss-threshold:
                                type: int
                                description: 'Packet loss for SLA to make decision in percentage. (0 - 100, default = 0).'
                    sla-fail-log-period:
                        type: int
                        description: 'Time interval in seconds that SLA fail log messages will be generated (0 - 3600, default = 0).'
                    sla-pass-log-period:
                        type: int
                        description: 'Time interval in seconds that SLA pass log messages will be generated (0 - 3600, default = 0).'
                    system-dns:
                        type: str
                        description: 'Enable/disable system DNS as the probe server.'
                        choices:
                            - 'disable'
                            - 'enable'
                    threshold-alert-jitter:
                        type: int
                        description: 'Alert threshold for jitter (ms, default = 0).'
                    threshold-alert-latency:
                        type: int
                        description: 'Alert threshold for latency (ms, default = 0).'
                    threshold-alert-packetloss:
                        type: int
                        description: 'Alert threshold for packet loss (percentage, default = 0).'
                    threshold-warning-jitter:
                        type: int
                        description: 'Warning threshold for jitter (ms, default = 0).'
                    threshold-warning-latency:
                        type: int
                        description: 'Warning threshold for latency (ms, default = 0).'
                    threshold-warning-packetloss:
                        type: int
                        description: 'Warning threshold for packet loss (percentage, default = 0).'
                    update-cascade-interface:
                        type: str
                        description: 'Enable/disable update cascade interface.'
                        choices:
                            - 'disable'
                            - 'enable'
                    update-static-route:
                        type: str
                        description: 'Enable/disable updating the static route.'
                        choices:
                            - 'disable'
                            - 'enable'
                    user:
                        type: str
                        description: 'The user name to access probe server.'
                    detect-mode:
                        type: str
                        description: 'The mode determining how to detect the server.'
                        choices:
                            - 'active'
                            - 'passive'
                            - 'prefer-passive'
            load-balance-mode:
                type: str
                description: 'Algorithm or mode to use for load balancing Internet traffic to SD-WAN members.'
                choices:
                    - 'source-ip-based'
                    - 'weight-based'
                    - 'usage-based'
                    - 'source-dest-ip-based'
                    - 'measured-volume-based'
            members:
                description: no description
                type: list
                suboptions:
                    _dynamic-member:
                        type: str
                        description: no description
                    comment:
                        type: str
                        description: 'Comments.'
                    cost:
                        type: int
                        description: 'Cost of this interface for services in SLA mode (0 - 4294967295, default = 0).'
                    gateway:
                        type: str
                        description: 'The default gateway for this interface. Usually the default gateway of the Internet service provider that this interfa...'
                    gateway6:
                        type: str
                        description: 'IPv6 gateway.'
                    ingress-spillover-threshold:
                        type: int
                        description: 'Ingress spillover threshold for this interface (0 - 16776000 kbit/s). When this traffic volume threshold is reached, n...'
                    interface:
                        type: str
                        description: 'Interface name.'
                    priority:
                        type: int
                        description: 'Priority of the interface (0 - 65535). Used for SD-WAN rules or priority rules.'
                    seq-num:
                        type: int
                        description: 'Sequence number(1-512).'
                    source:
                        type: str
                        description: 'Source IP address used in the health-check packet to the server.'
                    source6:
                        type: str
                        description: 'Source IPv6 address used in the health-check packet to the server.'
                    spillover-threshold:
                        type: int
                        description: 'Egress spillover threshold for this interface (0 - 16776000 kbit/s). When this traffic volume threshold is reached, ne...'
                    status:
                        type: str
                        description: 'Enable/disable this interface in the SD-WAN.'
                        choices:
                            - 'disable'
                            - 'enable'
                    volume-ratio:
                        type: int
                        description: 'Measured volume ratio (this value / sum of all values = percentage of link volume, 1 - 255).'
                    weight:
                        type: int
                        description: 'Weight of this interface for weighted load balancing. (1 - 255) More traffic is directed to interfaces with higher wei...'
                    zone:
                        type: str
                        description: 'Zone name.'
                    priority6:
                        type: int
                        description: 'Priority of the interface for IPv6 (1 - 65535, default = 1024). Used for SD-WAN rules or priority rules.'
            neighbor:
                description: no description
                type: list
                suboptions:
                    health-check:
                        type: str
                        description: 'SD-WAN health-check name.'
                    ip:
                        type: str
                        description: 'IP/IPv6 address of neighbor.'
                    member:
                        type: str
                        description: 'Member sequence number.'
                    role:
                        type: str
                        description: 'Role of neighbor.'
                        choices:
                            - 'primary'
                            - 'secondary'
                            - 'standalone'
                    sla-id:
                        type: int
                        description: 'SLA ID.'
            neighbor-hold-boot-time:
                type: int
                description: 'Waiting period in seconds when switching from the primary neighbor to the secondary neighbor from the neighbor start. (0 - 100...'
            neighbor-hold-down:
                type: str
                description: 'Enable/disable hold switching from the secondary neighbor to the primary neighbor.'
                choices:
                    - 'disable'
                    - 'enable'
            neighbor-hold-down-time:
                type: int
                description: 'Waiting period in seconds when switching from the secondary neighbor to the primary neighbor when hold-down is disabled. (0 - ...'
            service:
                description: no description
                type: list
                suboptions:
                    addr-mode:
                        type: str
                        description: 'Address mode (IPv4 or IPv6).'
                        choices:
                            - 'ipv4'
                            - 'ipv6'
                    bandwidth-weight:
                        type: int
                        description: 'Coefficient of reciprocal of available bidirectional bandwidth in the formula of custom-profile-1.'
                    default:
                        type: str
                        description: 'Enable/disable use of SD-WAN as default service.'
                        choices:
                            - 'disable'
                            - 'enable'
                    dscp-forward:
                        type: str
                        description: 'Enable/disable forward traffic DSCP tag.'
                        choices:
                            - 'disable'
                            - 'enable'
                    dscp-forward-tag:
                        type: str
                        description: 'Forward traffic DSCP tag.'
                    dscp-reverse:
                        type: str
                        description: 'Enable/disable reverse traffic DSCP tag.'
                        choices:
                            - 'disable'
                            - 'enable'
                    dscp-reverse-tag:
                        type: str
                        description: 'Reverse traffic DSCP tag.'
                    dst:
                        type: str
                        description: 'Destination address name.'
                    dst-negate:
                        type: str
                        description: 'Enable/disable negation of destination address match.'
                        choices:
                            - 'disable'
                            - 'enable'
                    dst6:
                        type: str
                        description: 'Destination address6 name.'
                    end-port:
                        type: int
                        description: 'End destination port number.'
                    gateway:
                        type: str
                        description: 'Enable/disable SD-WAN service gateway.'
                        choices:
                            - 'disable'
                            - 'enable'
                    groups:
                        type: str
                        description: 'User groups.'
                    hash-mode:
                        type: str
                        description: 'Hash algorithm for selected priority members for load balance mode.'
                        choices:
                            - 'round-robin'
                            - 'source-ip-based'
                            - 'source-dest-ip-based'
                            - 'inbandwidth'
                            - 'outbandwidth'
                            - 'bibandwidth'
                    health-check:
                        type: str
                        description: 'Health check list.'
                    hold-down-time:
                        type: int
                        description: 'Waiting period in seconds when switching from the back-up member to the primary member (0 - 10000000, default = 0).'
                    id:
                        type: int
                        description: 'SD-WAN rule ID (1 - 4000).'
                    input-device:
                        type: str
                        description: 'Source interface name.'
                    input-device-negate:
                        type: str
                        description: 'Enable/disable negation of input device match.'
                        choices:
                            - 'disable'
                            - 'enable'
                    internet-service:
                        type: str
                        description: 'Enable/disable use of Internet service for application-based load balancing.'
                        choices:
                            - 'disable'
                            - 'enable'
                    internet-service-app-ctrl:
                        description: no description
                        type: int
                    internet-service-app-ctrl-group:
                        type: str
                        description: 'Application control based Internet Service group list.'
                    internet-service-custom:
                        type: str
                        description: 'Custom Internet service name list.'
                    internet-service-custom-group:
                        type: str
                        description: 'Custom Internet Service group list.'
                    internet-service-group:
                        type: str
                        description: 'Internet Service group list.'
                    internet-service-name:
                        type: str
                        description: 'Internet service name list.'
                    jitter-weight:
                        type: int
                        description: 'Coefficient of jitter in the formula of custom-profile-1.'
                    latency-weight:
                        type: int
                        description: 'Coefficient of latency in the formula of custom-profile-1.'
                    link-cost-factor:
                        type: str
                        description: 'Link cost factor.'
                        choices:
                            - 'latency'
                            - 'jitter'
                            - 'packet-loss'
                            - 'inbandwidth'
                            - 'outbandwidth'
                            - 'bibandwidth'
                            - 'custom-profile-1'
                    link-cost-threshold:
                        type: int
                        description: 'Percentage threshold change of link cost values that will result in policy route regeneration (0 - 10000000, default =...'
                    minimum-sla-meet-members:
                        type: int
                        description: 'Minimum number of members which meet SLA.'
                    mode:
                        type: str
                        description: 'Control how the SD-WAN rule sets the priority of interfaces in the SD-WAN.'
                        choices:
                            - 'auto'
                            - 'manual'
                            - 'priority'
                            - 'sla'
                            - 'load-balance'
                    name:
                        type: str
                        description: 'SD-WAN rule name.'
                    packet-loss-weight:
                        type: int
                        description: 'Coefficient of packet-loss in the formula of custom-profile-1.'
                    priority-members:
                        type: str
                        description: 'Member sequence number list.'
                    protocol:
                        type: int
                        description: 'Protocol number.'
                    quality-link:
                        type: int
                        description: 'Quality grade.'
                    role:
                        type: str
                        description: 'Service role to work with neighbor.'
                        choices:
                            - 'primary'
                            - 'secondary'
                            - 'standalone'
                    route-tag:
                        type: int
                        description: 'IPv4 route map route-tag.'
                    sla:
                        description: no description
                        type: list
                        suboptions:
                            health-check:
                                type: str
                                description: 'SD-WAN health-check.'
                            id:
                                type: int
                                description: 'SLA ID.'
                    sla-compare-method:
                        type: str
                        description: 'Method to compare SLA value for SLA mode.'
                        choices:
                            - 'order'
                            - 'number'
                    src:
                        type: str
                        description: 'Source address name.'
                    src-negate:
                        type: str
                        description: 'Enable/disable negation of source address match.'
                        choices:
                            - 'disable'
                            - 'enable'
                    src6:
                        type: str
                        description: 'Source address6 name.'
                    standalone-action:
                        type: str
                        description: 'Enable/disable service when selected neighbor role is standalone while service role is not standalone.'
                        choices:
                            - 'disable'
                            - 'enable'
                    start-port:
                        type: int
                        description: 'Start destination port number.'
                    status:
                        type: str
                        description: 'Enable/disable SD-WAN service.'
                        choices:
                            - 'disable'
                            - 'enable'
                    tos:
                        type: str
                        description: 'Type of service bit pattern.'
                    tos-mask:
                        type: str
                        description: 'Type of service evaluated bits.'
                    users:
                        type: str
                        description: 'User name.'
                    tie-break:
                        type: str
                        description: 'Method of selecting member if more than one meets the SLA.'
                        choices:
                            - 'zone'
                            - 'cfg-order'
                            - 'fib-best-match'
                    use-shortcut-sla:
                        type: str
                        description: 'Enable/disable use of ADVPN shortcut for quality comparison.'
                        choices:
                            - 'disable'
                            - 'enable'
            status:
                type: str
                description: 'Enable/disable SD-WAN.'
                choices:
                    - 'disable'
                    - 'enable'
            zone:
                description: no description
                type: list
                suboptions:
                    name:
                        type: str
                        description: 'Zone name.'
                    service-sla-tie-break:
                        type: str
                        description: 'Method of selecting member if more than one meets the SLA.'
                        choices:
                            - 'cfg-order'
                            - 'fib-best-match'

'''

EXAMPLES = '''
 - hosts: fortimanager-inventory
   collections:
     - fortinet.fortimanager
   connection: httpapi
   vars:
      ansible_httpapi_use_ssl: True
      ansible_httpapi_validate_certs: False
      ansible_httpapi_port: 443
   tasks:
    - name: Configure redundant internet connections using SD-WAN
      fmgr_wanprof_system_sdwan:
         bypass_validation: False
         workspace_locking_adom: <value in [global, custom adom including root]>
         workspace_locking_timeout: 300
         rc_succeeded: [0, -2, -3, ...]
         rc_failed: [-2, -3, ...]
         adom: <your own value>
         wanprof: <your own value>
         wanprof_system_sdwan:
            duplication:
              -
                  dstaddr: <value of string>
                  dstaddr6: <value of string>
                  dstintf: <value of string>
                  id: <value of integer>
                  packet-de-duplication: <value in [disable, enable]>
                  packet-duplication: <value in [disable, force, on-demand]>
                  service: <value of string>
                  srcaddr: <value of string>
                  srcaddr6: <value of string>
                  srcintf: <value of string>
                  service-id: <value of string>
            duplication-max-num: <value of integer>
            fail-detect: <value in [disable, enable]>
            health-check:
              -
                  _dynamic-server: <value of string>
                  addr-mode: <value in [ipv4, ipv6]>
                  diffservcode: <value of string>
                  dns-match-ip: <value of string>
                  dns-request-domain: <value of string>
                  failtime: <value of integer>
                  ftp-file: <value of string>
                  ftp-mode: <value in [passive, port]>
                  ha-priority: <value of integer>
                  http-agent: <value of string>
                  http-get: <value of string>
                  http-match: <value of string>
                  interval: <value of integer>
                  members: <value of string>
                  name: <value of string>
                  packet-size: <value of integer>
                  password: <value of string>
                  port: <value of integer>
                  probe-count: <value of integer>
                  probe-packets: <value in [disable, enable]>
                  probe-timeout: <value of integer>
                  protocol: <value in [ping, tcp-echo, udp-echo, ...]>
                  quality-measured-method: <value in [half-close, half-open]>
                  recoverytime: <value of integer>
                  security-mode: <value in [none, authentication]>
                  server: <value of string>
                  sla:
                    -
                        id: <value of integer>
                        jitter-threshold: <value of integer>
                        latency-threshold: <value of integer>
                        link-cost-factor:
                          - latency
                          - jitter
                          - packet-loss
                        packetloss-threshold: <value of integer>
                  sla-fail-log-period: <value of integer>
                  sla-pass-log-period: <value of integer>
                  system-dns: <value in [disable, enable]>
                  threshold-alert-jitter: <value of integer>
                  threshold-alert-latency: <value of integer>
                  threshold-alert-packetloss: <value of integer>
                  threshold-warning-jitter: <value of integer>
                  threshold-warning-latency: <value of integer>
                  threshold-warning-packetloss: <value of integer>
                  update-cascade-interface: <value in [disable, enable]>
                  update-static-route: <value in [disable, enable]>
                  user: <value of string>
                  detect-mode: <value in [active, passive, prefer-passive]>
            load-balance-mode: <value in [source-ip-based, weight-based, usage-based, ...]>
            members:
              -
                  _dynamic-member: <value of string>
                  comment: <value of string>
                  cost: <value of integer>
                  gateway: <value of string>
                  gateway6: <value of string>
                  ingress-spillover-threshold: <value of integer>
                  interface: <value of string>
                  priority: <value of integer>
                  seq-num: <value of integer>
                  source: <value of string>
                  source6: <value of string>
                  spillover-threshold: <value of integer>
                  status: <value in [disable, enable]>
                  volume-ratio: <value of integer>
                  weight: <value of integer>
                  zone: <value of string>
                  priority6: <value of integer>
            neighbor:
              -
                  health-check: <value of string>
                  ip: <value of string>
                  member: <value of string>
                  role: <value in [primary, secondary, standalone]>
                  sla-id: <value of integer>
            neighbor-hold-boot-time: <value of integer>
            neighbor-hold-down: <value in [disable, enable]>
            neighbor-hold-down-time: <value of integer>
            service:
              -
                  addr-mode: <value in [ipv4, ipv6]>
                  bandwidth-weight: <value of integer>
                  default: <value in [disable, enable]>
                  dscp-forward: <value in [disable, enable]>
                  dscp-forward-tag: <value of string>
                  dscp-reverse: <value in [disable, enable]>
                  dscp-reverse-tag: <value of string>
                  dst: <value of string>
                  dst-negate: <value in [disable, enable]>
                  dst6: <value of string>
                  end-port: <value of integer>
                  gateway: <value in [disable, enable]>
                  groups: <value of string>
                  hash-mode: <value in [round-robin, source-ip-based, source-dest-ip-based, ...]>
                  health-check: <value of string>
                  hold-down-time: <value of integer>
                  id: <value of integer>
                  input-device: <value of string>
                  input-device-negate: <value in [disable, enable]>
                  internet-service: <value in [disable, enable]>
                  internet-service-app-ctrl: <value of integer>
                  internet-service-app-ctrl-group: <value of string>
                  internet-service-custom: <value of string>
                  internet-service-custom-group: <value of string>
                  internet-service-group: <value of string>
                  internet-service-name: <value of string>
                  jitter-weight: <value of integer>
                  latency-weight: <value of integer>
                  link-cost-factor: <value in [latency, jitter, packet-loss, ...]>
                  link-cost-threshold: <value of integer>
                  minimum-sla-meet-members: <value of integer>
                  mode: <value in [auto, manual, priority, ...]>
                  name: <value of string>
                  packet-loss-weight: <value of integer>
                  priority-members: <value of string>
                  protocol: <value of integer>
                  quality-link: <value of integer>
                  role: <value in [primary, secondary, standalone]>
                  route-tag: <value of integer>
                  sla:
                    -
                        health-check: <value of string>
                        id: <value of integer>
                  sla-compare-method: <value in [order, number]>
                  src: <value of string>
                  src-negate: <value in [disable, enable]>
                  src6: <value of string>
                  standalone-action: <value in [disable, enable]>
                  start-port: <value of integer>
                  status: <value in [disable, enable]>
                  tos: <value of string>
                  tos-mask: <value of string>
                  users: <value of string>
                  tie-break: <value in [zone, cfg-order, fib-best-match]>
                  use-shortcut-sla: <value in [disable, enable]>
            status: <value in [disable, enable]>
            zone:
              -
                  name: <value of string>
                  service-sla-tie-break: <value in [cfg-order, fib-best-match]>

'''

RETURN = '''
request_url:
    description: The full url requested
    returned: always
    type: str
    sample: /sys/login/user
response_code:
    description: The status of api request
    returned: always
    type: int
    sample: 0
response_message:
    description: The descriptive message of the api response
    type: str
    returned: always
    sample: OK.

'''
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.connection import Connection
from ansible_collections.fortinet.fortimanager.plugins.module_utils.napi import NAPIManager
from ansible_collections.fortinet.fortimanager.plugins.module_utils.napi import check_galaxy_version
from ansible_collections.fortinet.fortimanager.plugins.module_utils.napi import check_parameter_bypass


def main():
    jrpc_urls = [
        '/pm/config/adom/{adom}/wanprof/{wanprof}/system/sdwan'
    ]

    perobject_jrpc_urls = [
        '/pm/config/adom/{adom}/wanprof/{wanprof}/system/sdwan/{sdwan}'
    ]

    url_params = ['adom', 'wanprof']
    module_primary_key = None
    module_arg_spec = {
        'enable_log': {
            'type': 'bool',
            'required': False,
            'default': False
        },
        'forticloud_access_token': {
            'type': 'str',
            'required': False,
            'no_log': True
        },
        'proposed_method': {
            'type': 'str',
            'required': False,
            'choices': [
                'set',
                'update',
                'add'
            ]
        },
        'bypass_validation': {
            'type': 'bool',
            'required': False,
            'default': False
        },
        'workspace_locking_adom': {
            'type': 'str',
            'required': False
        },
        'workspace_locking_timeout': {
            'type': 'int',
            'required': False,
            'default': 300
        },
        'rc_succeeded': {
            'required': False,
            'type': 'list'
        },
        'rc_failed': {
            'required': False,
            'type': 'list'
        },
        'adom': {
            'required': True,
            'type': 'str'
        },
        'wanprof': {
            'required': True,
            'type': 'str'
        },
        'wanprof_system_sdwan': {
            'required': False,
            'type': 'dict',
            'revision': {
                '6.4.2': True,
                '6.4.5': True,
                '7.0.0': True
            },
            'options': {
                'duplication': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        'dstaddr': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dstaddr6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dstintf': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'id': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'packet-de-duplication': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'packet-duplication': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'force',
                                'on-demand'
                            ],
                            'type': 'str'
                        },
                        'service': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'srcaddr': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'srcaddr6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'srcintf': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'service-id': {
                            'required': False,
                            'revision': {
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        }
                    }
                },
                'duplication-max-num': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'int'
                },
                'fail-detect': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'choices': [
                        'disable',
                        'enable'
                    ],
                    'type': 'str'
                },
                'health-check': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        '_dynamic-server': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': False
                            },
                            'type': 'str'
                        },
                        'addr-mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'ipv4',
                                'ipv6'
                            ],
                            'type': 'str'
                        },
                        'diffservcode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dns-match-ip': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dns-request-domain': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'failtime': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'ftp-file': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'ftp-mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'passive',
                                'port'
                            ],
                            'type': 'str'
                        },
                        'ha-priority': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'http-agent': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'http-get': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'http-match': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'interval': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'members': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'name': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'packet-size': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'password': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'port': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'probe-count': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'probe-packets': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'probe-timeout': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'protocol': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'ping',
                                'tcp-echo',
                                'udp-echo',
                                'http',
                                'twamp',
                                'ping6',
                                'dns',
                                'tcp-connect',
                                'ftp'
                            ],
                            'type': 'str'
                        },
                        'quality-measured-method': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'half-close',
                                'half-open'
                            ],
                            'type': 'str'
                        },
                        'recoverytime': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'security-mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'none',
                                'authentication'
                            ],
                            'type': 'str'
                        },
                        'server': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'sla': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'list',
                            'options': {
                                'id': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'int'
                                },
                                'jitter-threshold': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'int'
                                },
                                'latency-threshold': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'int'
                                },
                                'link-cost-factor': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'list',
                                    'choices': [
                                        'latency',
                                        'jitter',
                                        'packet-loss'
                                    ]
                                },
                                'packetloss-threshold': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'int'
                                }
                            }
                        },
                        'sla-fail-log-period': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'sla-pass-log-period': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'system-dns': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'threshold-alert-jitter': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'threshold-alert-latency': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'threshold-alert-packetloss': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'threshold-warning-jitter': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'threshold-warning-latency': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'threshold-warning-packetloss': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'update-cascade-interface': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'update-static-route': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'user': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'detect-mode': {
                            'required': False,
                            'revision': {
                                '7.0.0': True
                            },
                            'choices': [
                                'active',
                                'passive',
                                'prefer-passive'
                            ],
                            'type': 'str'
                        }
                    }
                },
                'load-balance-mode': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'choices': [
                        'source-ip-based',
                        'weight-based',
                        'usage-based',
                        'source-dest-ip-based',
                        'measured-volume-based'
                    ],
                    'type': 'str'
                },
                'members': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        '_dynamic-member': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': False
                            },
                            'type': 'str'
                        },
                        'comment': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'cost': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'gateway': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'gateway6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'ingress-spillover-threshold': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'interface': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'priority': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'seq-num': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'source': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'source6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'spillover-threshold': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'status': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'volume-ratio': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'weight': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'zone': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'priority6': {
                            'required': False,
                            'revision': {
                                '7.0.0': True
                            },
                            'type': 'int'
                        }
                    }
                },
                'neighbor': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        'health-check': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'ip': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'member': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'role': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'primary',
                                'secondary',
                                'standalone'
                            ],
                            'type': 'str'
                        },
                        'sla-id': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        }
                    }
                },
                'neighbor-hold-boot-time': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'int'
                },
                'neighbor-hold-down': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'choices': [
                        'disable',
                        'enable'
                    ],
                    'type': 'str'
                },
                'neighbor-hold-down-time': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'int'
                },
                'service': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        'addr-mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'ipv4',
                                'ipv6'
                            ],
                            'type': 'str'
                        },
                        'bandwidth-weight': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'default': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'dscp-forward': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'dscp-forward-tag': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dscp-reverse': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'dscp-reverse-tag': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dst': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'dst-negate': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'dst6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'end-port': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'gateway': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'groups': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'hash-mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'round-robin',
                                'source-ip-based',
                                'source-dest-ip-based',
                                'inbandwidth',
                                'outbandwidth',
                                'bibandwidth'
                            ],
                            'type': 'str'
                        },
                        'health-check': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'hold-down-time': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'id': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'input-device': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'input-device-negate': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'internet-service': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'internet-service-app-ctrl': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'internet-service-app-ctrl-group': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'internet-service-custom': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'internet-service-custom-group': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'internet-service-group': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'internet-service-name': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'jitter-weight': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'latency-weight': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'link-cost-factor': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'latency',
                                'jitter',
                                'packet-loss',
                                'inbandwidth',
                                'outbandwidth',
                                'bibandwidth',
                                'custom-profile-1'
                            ],
                            'type': 'str'
                        },
                        'link-cost-threshold': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'minimum-sla-meet-members': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'mode': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'auto',
                                'manual',
                                'priority',
                                'sla',
                                'load-balance'
                            ],
                            'type': 'str'
                        },
                        'name': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'packet-loss-weight': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'priority-members': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'protocol': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'quality-link': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'role': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'primary',
                                'secondary',
                                'standalone'
                            ],
                            'type': 'str'
                        },
                        'route-tag': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'sla': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'list',
                            'options': {
                                'health-check': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'str'
                                },
                                'id': {
                                    'required': False,
                                    'revision': {
                                        '6.4.2': True,
                                        '6.4.5': True,
                                        '7.0.0': True
                                    },
                                    'type': 'int'
                                }
                            }
                        },
                        'sla-compare-method': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'order',
                                'number'
                            ],
                            'type': 'str'
                        },
                        'src': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'src-negate': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'src6': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'standalone-action': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'start-port': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'int'
                        },
                        'status': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        },
                        'tos': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'tos-mask': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'users': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'tie-break': {
                            'required': False,
                            'revision': {
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'zone',
                                'cfg-order',
                                'fib-best-match'
                            ],
                            'type': 'str'
                        },
                        'use-shortcut-sla': {
                            'required': False,
                            'revision': {
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'disable',
                                'enable'
                            ],
                            'type': 'str'
                        }
                    }
                },
                'status': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'choices': [
                        'disable',
                        'enable'
                    ],
                    'type': 'str'
                },
                'zone': {
                    'required': False,
                    'revision': {
                        '6.4.2': True,
                        '6.4.5': True,
                        '7.0.0': True
                    },
                    'type': 'list',
                    'options': {
                        'name': {
                            'required': False,
                            'revision': {
                                '6.4.2': True,
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'type': 'str'
                        },
                        'service-sla-tie-break': {
                            'required': False,
                            'revision': {
                                '6.4.5': True,
                                '7.0.0': True
                            },
                            'choices': [
                                'cfg-order',
                                'fib-best-match'
                            ],
                            'type': 'str'
                        }
                    }
                }
            }

        }
    }

    params_validation_blob = []
    check_galaxy_version(module_arg_spec)
    module = AnsibleModule(argument_spec=check_parameter_bypass(module_arg_spec, 'wanprof_system_sdwan'),
                           supports_check_mode=False)

    fmgr = None
    if module._socket_path:
        connection = Connection(module._socket_path)
        connection.set_option('enable_log', module.params['enable_log'] if 'enable_log' in module.params else False)
        connection.set_option('forticloud_access_token',
                              module.params['forticloud_access_token'] if 'forticloud_access_token' in module.params else None)
        fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
        fmgr.validate_parameters(params_validation_blob)
        fmgr.process_partial_curd(argument_specs=module_arg_spec)
    else:
        module.fail_json(msg='MUST RUN IN HTTPAPI MODE')
    module.exit_json(meta=module.params)


if __name__ == '__main__':
    main()