amnesh.soodar.soodar_static_routes module – Configure and manage static routes on Soodar devices.

Note

This module is part of the amnesh.soodar collection (version 1.0.0).

To install it, use: ansible-galaxy collection install https://soodar.ir/ansible/amnesh.soodar.tar.gz.

To use it in a playbook, specify: amnesh.soodar.soodar_static_routes.

New in amnesh.soodar 1.0

Synopsis

  • This module configures and manages the static routes on Soodar platforms.

Note

This module has a corresponding action plugin.

Parameters

Parameter

Comments

config

list / elements=dictionary

A dictionary of static route options

address_families

list / elements=dictionary

Address family to use for the static routes

afi

string / required

Top level address family indicator.

Choices:

  • "ipv4"

  • "ipv6"

routes

list / elements=dictionary

Configuring static route

dest

string / required

Destination prefix with its subnet mask

next_hops

list / elements=dictionary

next hop address or interface

distance_metric

integer

Distance metric for this route

forward_router_address

string

Forwarding router’s address

interface

string

Interface for directly connected static routes

tag

integer

Set tag for this route

Refer to vendor documentation for valid values.

vrf

string

IP VPN Routing/Forwarding instance name.

NOTE, In case of IPV4/IPV6 VRF routing table should pre-exist before configuring.

NOTE, if the vrf information is not provided then the routes shall be configured under global vrf.

running_config

string

This option is used only with state parsed.

The value of this option should be the output received from the Soodar device by executing the command show running-config | include ip route|ipv6 route.

The state parsed reads the configuration from running_config option and transforms it into Ansible structured data as per the resource module’s argspec and the value is then returned in the parsed key within the result.

state

string

The state the configuration should be left in

The states rendered, gathered and parsed does not perform any change on the device.

The state rendered will transform the configuration in config option to platform specific CLI commands which will be returned in the rendered key within the result. For state rendered active connection to remote host is not required.

The state gathered will fetch the running configuration from device and transform it into structured data in the format as per the resource module argspec and the value is returned in the gathered key within the result.

The state parsed reads the configuration from running_config option and transforms it into JSON format as per the resource module parameters and the value is returned in the parsed key within the result. The value of running_config option should be the same format as the output of command show running-config | include ip route|ipv6 route executed on device. For state parsed active connection to remote host is not required.

Choices:

  • "merged" ← (default)

  • "replaced"

  • "overridden"

  • "deleted"

  • "gathered"

  • "rendered"

  • "parsed"

Notes

Note

  • Tested against Soodar Version 21.04

Examples

# Using Deleted

# Example 1:
# ----------
# To delete the exact static routes, with all the static routes explicitly mentioned in want

# Before state:
# -------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Delete provided configuration from the device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - vrf: ansible_temp_vrf
      address_families:
      - afi: ipv4
        routes:
        - dest: 192.0.2.0/24
          next_hops:
          - forward_router_address: 192.0.2.1
            tag: 50
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
          next_hops:
          - forward_router_address: 198.51.101.1
            distance_metric: 110
            tag: 40
          - forward_router_address: 198.51.101.2
            distance_metric: 30
          - forward_router_address: 198.51.101.3
      - afi: ipv6
        routes:
        - dest: 2001:DB8:0:3::/64
          next_hops:
          - forward_router_address: 2001:DB8:0:3::2
            tag: 105
    state: deleted

# Commands fired:
# ---------------
# no ip route 192.0.2.0/24 198.51.101.8 vrf ansible_temp_vrf tag 50
# no ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# no ip route 198.51.100.0/24 198.51.101.2 30
# no ip route 198.51.100.0/24 198.51.101.3
# no ipv6 route FD5D:12C9:2201:1::/64 FD5D:12C9:2202::2 tag 105

# After state:
# ------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf

# Example 2:
# ----------
# To delete the destination specific static routes

# Before state:
# -------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Delete provided configuration from the device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
    state: deleted

# Commands fired:
# ---------------
# no ip route 198.51.100.0/24 198.51.101.3
# no ip route 198.51.100.0/24 198.51.101.2 30
# no ip route 198.51.100.0/24 198.51.101.1 110 tag 40

# After state:
# ------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105


# Example 3:
# ----------
# To delete the vrf specific static routes

# Before state:
# -------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Delete provided configuration from the device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - vrf: ansible_temp_vrf
    state: deleted

# Commands fired:
# ---------------
# no ip route 192.0.2.0/24 192.0.2.1 vrf ansible_temp_vrf tag 50

# After state:
# ------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# ip route 198.51.100.0/24 198.51.101.3
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

# Using Deleted without any config passed
#"(NOTE: This will delete all of configured resource module attributes from each configured interface)"

# Before state:
# -------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Delete ALL configured Soodar static routes
  amnesh.soodar.soodar_static_routes:
    state: deleted

# Commands fired:
# ---------------
# no ip route 192.0.2.0/24 192.0.2.1 vrf ansible_temp_vrf tag 50
# no ip route 198.51.100.0/24 198.51.101.3
# no ip route 198.51.100.0/24 198.51.101.2 30
# no ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# no ipv6 route 2001:DB8:0:3::/64 2001:DB8:0:3::2 tag 105

# After state:
# -------------
#
# soodar#show running-config | section ^ip route|ipv6 route|^vrf
#


# Using merged

# Before state:
# -------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf

- name: Merge provided configuration with device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - vrf: blue
      address_families:
      - afi: ipv4
        routes:
        - dest: 192.0.2.0/24
          next_hops:
          - forward_router_address: 192.0.2.1
            tag: 50
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
          next_hops:
          - forward_router_address: 198.51.101.1
            distance_metric: 110
            tag: 40
          - forward_router_address: 198.51.101.2
            distance_metric: 30
          - forward_router_address: 198.51.101.3
      - afi: ipv6
        routes:
        - dest: 2001:db8:0:3::/64
          next_hops:
          - forward_router_address: 2001:db8:0:3::2
            tag: 105
    state: merged

# Commands fired:
# ---------------
# ip route 192.0.2.0 /24 10.0.0.8 vrf blue track 150 tag 50
# ip route 198.51.100.0 /24 198.51.101.1 110 tag 40
# ip route 198.51.100.0 /24 198.51.101.2 30
# ip route 198.51.100.0 /24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

# After state:
# ------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf blue
#  ip route 192.0.2.0 /24 192.0.2.1 tag 50
# ip route 198.51.100.0 /24 198.51.101.3
# ip route 198.51.100.0 /24 198.51.101.2 30
# ip route 198.51.100.0 /24 198.51.101.1 110 tag 40
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105


# Using replaced

# Before state:
# -------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Replace provided configuration with device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
          next_hops:
          - forward_router_address: 198.51.101.1
            distance_metric: 175
            tag: 70
    state: replaced

# Commands fired:
# ---------------
# no ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# no ip route 198.51.100.0/24 198.51.101.2 30
# no ip route 198.51.100.0/24 198.51.101.3
# ip route 198.51.100.0/24 198.51.101.1 175 tag 70

# After state:
# ------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 175 tag 70
# ipv6 route 2001:DB8:0:3::/64 2001:DB8:0:3::2 tag 105


# Using overridden

# Before state:
# -------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Override provided configuration with device configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - vrf: blue
      address_families:
      - afi: ipv4
        routes:
        - dest: 192.0.2.0/24
          next_hops:
          - forward_router_address: 192.0.2.1
            tag: 50
    state: overridden

# Commands fired:
# ---------------
# no ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# no ip route 198.51.100.0/24 198.51.101.2 30
# no ip route 198.51.100.0/24 198.51.101.3
# no ip route 192.0.2.0/24 198.51.101.8 vrf ansible_temp_vrf tag 50
# no ipv6 route FD5D:12C9:2201:1::/64 FD5D:12C9:2202::2 tag 105
# ip route 192.0.2.0/24 198.51.101.4 vrf blue tag 50

# After state:
# ------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf blue
#  ip route 192.0.2.0/24 192.0.2.1 tag 50


# Using gathered

# Before state:
# -------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105

- name: Gather listed static routes with provided configurations
  amnesh.soodar.soodar_static_routes:
    config:
    state: gathered

# Module Execution Result:
# ------------------------
#
# "gathered": [
#         {
#             "address_families": [
#                 {
#                     "afi": "ipv4",
#                     "routes": [
#                         {
#                             "dest": "192.0.2.0/24",
#                             "next_hops": [
#                                 {
#                                     "forward_router_address": "192.0.2.1",
#                                     "tag": 50,
#                                 }
#                             ]
#                         }
#                     ]
#                 }
#             ],
#             "vrf": "ansible_temp_vrf"
#         },
#         {
#             "address_families": [
#                 {
#                     "afi": "ipv6",
#                     "routes": [
#                         {
#                             "dest": "2001:DB8:0:3::/64",
#                             "next_hops": [
#                                 {
#                                     "forward_router_address": "2001:DB8:0:3::2",
#                                     "tag": 105
#                                 }
#                             ]
#                         }
#                     ]
#                 },
#                 {
#                     "afi": "ipv4",
#                     "routes": [
#                         {
#                             "dest": "198.51.100.0/24",
#                             "next_hops": [
#                                 {
#                                     "distance_metric": 110,
#                                     "forward_router_address": "198.51.101.1",
#                                     "tag": 40
#                                 },
#                                 {
#                                     "distance_metric": 30,
#                                     "forward_router_address": "198.51.101.2",
#                                 },
#                                 {
#                                     "forward_router_address": "198.51.101.3",
#                                 }
#                             ]
#                         }
#                     ]
#                 }
#             ]
#         }
#     ]

# After state:
# ------------
#
# soodar# show running-config | section ^ip route|ipv6 route|^vrf
# vrf ansible_temp_vrf
#  ip route 192.0.2.0/24 192.0.2.1 tag 50
# ip route 198.51.100.0/24 198.51.101.1 110 tag 40
# ip route 198.51.100.0/24 198.51.101.2 30
# ip route 198.51.100.0/24 198.51.101.3
# ipv6 route 2001:db8:0:3::/64 2001:db8:0:3::2 tag 105


# Using rendered

- name: Render the commands for provided  configuration
  amnesh.soodar.soodar_static_routes:
    config:
    - vrf: ansible_temp_vrf
      address_families:
      - afi: ipv4
        routes:
        - dest: 192.0.2.0/24
          next_hops:
          - forward_router_address: 192.0.2.1
            tag: 50
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
          next_hops:
          - forward_router_address: 198.51.101.1
            distance_metric: 110
            tag: 40
          - forward_router_address: 198.51.101.2
            distance_metric: 30
          - forward_router_address: 198.51.101.3
      - afi: ipv6
        routes:
        - dest: 2001:DB8:0:3::/64
          next_hops:
          - forward_router_address: 2001:DB8:0:3::2
            tag: 105
    state: rendered

# Module Execution Result:
# ------------------------
#
# "rendered": [
#         "ip route 192.0.2.0/24 192.0.2.1 vrf ansible_temp_vrf tag 50",
#         "ip route 198.51.100.0/24 198.51.101.1 110 tag 40",
#         "ip route 198.51.100.0/24 198.51.101.2 30",
#         "ip route 198.51.100.0/24 198.51.101.3",
#         "ipv6 route 2001:DB8:0:3::/64 2001:DB8:0:3::2 tag 105"
#     ]

Return Values

Common return values are documented here, the following are the fields unique to this module:

Key

Description

after

list / elements=string

The configuration as structured data after module completion.

Returned: when changed

Sample: ["The configuration returned will always be in the same format of the parameters above."]

before

list / elements=string

The configuration as structured data prior to module invocation.

Returned: always

Sample: ["The configuration returned will always be in the same format of the parameters above."]

commands

list / elements=string

The set of commands pushed to the remote device

Returned: always

Sample: ["ip route 172.31.10.0 255.255.255.0 10.10.10.2 vrf test"]

Authors

  • Mahdi Varasteh (@m-varasteh)