100%

meraki_appliance_traffic_shaping

module
Manage Meraki appliance traffic shaping
Added in version 0.1.0

Synopsis

  • Manage Meraki appliance traffic shaping for a network.
  • Singleton per network (update only, no create/delete).
  • Supports merged, replaced, and gathered states.

Author

Cisco Meraki

Parameters

config (list/dict)

Traffic shaping configuration (singleton).

active_active_auto_vpn_enabled (bool)

Whether active-active AutoVPN is enabled.

bandwidth_limits (dict)

Uplink bandwidth limits by interface.

default_rules_enabled (bool)

Whether default traffic shaping rules are enabled.

default_uplink (str)

The default uplink (e.g., wan1, wan2).

failover_and_failback (dict)

WAN failover and failback settings.

global_bandwidth_limits (dict)

Global per-client bandwidth limit.

load_balancing_enabled (bool)

Whether load balancing is enabled.

rules (list/dict)

Array of traffic shaping rules.

vpn_traffic_uplink_preferences (list/dict)

Uplink preference rules for VPN traffic.

wan_traffic_uplink_preferences (list/dict)

Uplink preference rules for WAN traffic.

network_id (str) required

The network ID.

state (str)
mergedreplacedgathered

The state of the resource.

Sample Task

A template task showing all available parameters with their defaults or example values.

- name: Meraki Appliance Traffic Shaping task
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "192.168.1.0/24"
    config:
      - active_active_auto_vpn_enabled: true
        bandwidth_limits: {}
        default_rules_enabled: true
        default_uplink: "default_uplink_value"
        failover_and_failback: {}
        global_bandwidth_limits: {}
        load_balancing_enabled: true
        rules:
          - {}
        vpn_traffic_uplink_preferences:
          - {}
        wan_traffic_uplink_preferences:
          - {}
    state: merged
- name: Meraki Appliance Traffic Shaping task
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "192.168.1.0/24"
    config:  # optional
      - active_active_auto_vpn_enabled: true  # optional
        bandwidth_limits: {}  # optional
        default_rules_enabled: true  # optional
        default_uplink: "default_uplink_value"  # optional
        failover_and_failback: {}  # optional
        global_bandwidth_limits: {}  # optional
        load_balancing_enabled: true  # optional
        rules:  # optional
          - {}
        vpn_traffic_uplink_preferences:  # optional
          - {}
        wan_traffic_uplink_preferences:  # optional
          - {}
    state: merged  # optional
- name: Meraki Appliance Traffic Shaping task
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "192.168.1.0/24"  # (str, required) The network ID.
    config:  # (list, optional) Traffic shaping configuration (singleton).
      - active_active_auto_vpn_enabled: true  # (bool, optional) Whether active-active AutoVPN is enabled.
        bandwidth_limits: {}  # (dict, optional) Uplink bandwidth limits by interface.
        default_rules_enabled: true  # (bool, optional) Whether default traffic shaping rules are enabled.
        default_uplink: "default_uplink_value"  # (str, optional) The default uplink (e.g., wan1, wan2).
        failover_and_failback: {}  # (dict, optional) WAN failover and failback settings.
        global_bandwidth_limits: {}  # (dict, optional) Global per-client bandwidth limit.
        load_balancing_enabled: true  # (bool, optional) Whether load balancing is enabled.
        rules:  # (list, optional) Array of traffic shaping rules.
          - {}
        vpn_traffic_uplink_preferences:  # (list, optional) Uplink preference rules for VPN traffic.
          - {}
        wan_traffic_uplink_preferences:  # (list, optional) Uplink preference rules for WAN traffic.
          - {}
    state: merged  # (str, optional) The state of the resource.

Examples

Define Expected Configuration
- name: Define expected configuration
  ansible.builtin.set_fact:
    expected_config:
      default_rules_enabled: true
      default_uplink: example
      load_balancing_enabled: true
      active_active_auto_vpn_enabled: true
Create Appliance_traffic_shaping With Merged State
- name: Create appliance_traffic_shaping with merged state
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: merged
    config:
      - "{{ expected_config }}"
  register: merge_result
Assert Resource Was Created
- name: Assert resource was created
  ansible.builtin.assert:
    that:
      - merge_result is changed
      - merge_result.config | length == 1
Compare Expected Paths To Result (subset Check)
- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ merge_result.config[0] | ansible.utils.to_paths }}"
Assert All Expected Fields Are Present And Match
- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"
Task Output:
# Manage Meraki appliance traffic shaping — full resource replacement
Define Replacement Configuration
- name: Define replacement configuration
  ansible.builtin.set_fact:
    expected_config:
      default_rules_enabled: true
      default_uplink: example
      load_balancing_enabled: true
      active_active_auto_vpn_enabled: true
Replace Appliance_traffic_shaping Configuration
- name: Replace appliance_traffic_shaping configuration
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: replaced
    config:
      - "{{ expected_config }}"
  register: replace_result
Assert Resource Was Replaced
- name: Assert resource was replaced
  ansible.builtin.assert:
    that:
      - replace_result is changed
      - replace_result.config | length == 1
Compare Expected Paths To Result (subset Check)
- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ replace_result.config[0] | ansible.utils.to_paths }}"
Assert All Expected Fields Are Present And Match
- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"
Task Output:
# Manage Meraki appliance traffic shaping — gather current configuration
Gather Current Appliance_traffic_shaping Configuration
- name: Gather current appliance_traffic_shaping configuration
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: gathered
  register: gathered
Assert Gathered Config Is Not Empty
- name: Assert gathered config is not empty
  ansible.builtin.assert:
    that:
      - gathered.config is defined
      - gathered.config | length > 0
    fail_msg: "Gathered config is empty — expected at least one resource"
Display Gathered Configuration
- name: Display gathered configuration
  ansible.builtin.debug:
    var: gathered.config
---
# Manage Meraki appliance traffic shaping — create or update

- name: Define expected configuration
  ansible.builtin.set_fact:
    expected_config:
      default_rules_enabled: true
      default_uplink: example
      load_balancing_enabled: true
      active_active_auto_vpn_enabled: true

- name: Create appliance_traffic_shaping with merged state
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: merged
    config:
      - "{{ expected_config }}"
  register: merge_result

- name: Assert resource was created
  ansible.builtin.assert:
    that:
      - merge_result is changed
      - merge_result.config | length == 1

- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ merge_result.config[0] | ansible.utils.to_paths }}"

- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"

# Manage Meraki appliance traffic shaping — full resource replacement

- name: Define replacement configuration
  ansible.builtin.set_fact:
    expected_config:
      default_rules_enabled: true
      default_uplink: example
      load_balancing_enabled: true
      active_active_auto_vpn_enabled: true

- name: Replace appliance_traffic_shaping configuration
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: replaced
    config:
      - "{{ expected_config }}"
  register: replace_result

- name: Assert resource was replaced
  ansible.builtin.assert:
    that:
      - replace_result is changed
      - replace_result.config | length == 1

- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ replace_result.config[0] | ansible.utils.to_paths }}"

- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"

# Manage Meraki appliance traffic shaping — gather current configuration

- name: Gather current appliance_traffic_shaping configuration
  cisco.meraki_rm.meraki_appliance_traffic_shaping:
    network_id: "N_123456789012345678"
    state: gathered
  register: gathered

- name: Assert gathered config is not empty
  ansible.builtin.assert:
    that:
      - gathered.config is defined
      - gathered.config | length > 0
    fail_msg: "Gathered config is empty — expected at least one resource"

- name: Display gathered configuration
  ansible.builtin.debug:
    var: gathered.config

Return Values

config
list — returned: always
The resulting resource configuration.