Skip to content

Latest commit

 

History

History
1175 lines (1107 loc) · 39.4 KB

junipernetworks.junos.junos_interfaces_module.rst

File metadata and controls

1175 lines (1107 loc) · 39.4 KB

junipernetworks.junos.junos_interfaces

Junos Interfaces resource module

Version added: 1.0.0

  • This module manages the interfaces on Juniper Junos OS network devices.

The below requirements are needed on the host that executes this module.

  • ncclient (>=v0.6.4)
Parameter Choices/Defaults Comments
config
list / elements=dictionary
The provided configuration
description
string
Interface description.
duplex
string
    Choices:
  • automatic
  • full-duplex
  • half-duplex
Interface link status. Applicable for Ethernet interfaces only, either in half duplex, full duplex or in automatic state which negotiates the duplex automatically.
enabled
boolean
    Choices:
  • no
  • yes ←
Administrative state of the interface.
Set the value to true to administratively enabled the interface or false to disable it.
hold_time
dictionary
The hold time for given interface name.
down
integer
The link down hold time in milliseconds.
up
integer
The link up hold time in milliseconds.
mtu
integer
MTU for a specific interface.
Applicable for Ethernet interfaces only.
name
string / required
Full name of interface, e.g. ge-0/0/0.
speed
string
Interface link speed. Applicable for Ethernet interfaces only.
units
list / elements=dictionary
Specify Logical interfaces units.
description
string
Specify logical interface description.
name
integer
Specify interface unit number.
running_config
string
This option is used only with state parsed.
The value of this option should be the output received from the Junos device by executing the command show interfaces.
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
    Choices:
  • merged ←
  • replaced
  • overridden
  • deleted
  • gathered
  • parsed
  • rendered
The state of the configuration after module completion

Note

# Using merged

# Before state:
# -------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     description "test interface";
#     speed 1g;
# }
# fe-0/0/2 {
#     vlan-tagging;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

- name: Merge provided configuration with device configuration (default operation
    is merge)
  junipernetworks.junos.junos_interfaces:
    config:
      - name: ge-0/0/1
        description: Configured by Ansible-1
        enabled: true
        units:
          - name: 0
            description: "This is logical intf unit0"
        mtu: 1800
      - name: ge-0/0/2
        description: Configured by Ansible-2
        enabled: false
    state: merged

# Task Output
# -----------
#
# before:
# - description: test interface
#   enabled: true
#   name: ge-0/0/1
#   speed: 1g
# - enabled: true
#   name: fe-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0
# commands:
# - <nc:interfaces xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:interface><nc:name>ge-0/0/1</nc:name>
#   <nc:description>Configured by Ansible-1</nc:description><nc:mtu>1800</nc:mtu><nc:unit><nc:name>0</nc:name>
#   <nc:description>This is logical intf unit0</nc:description></nc:unit></nc:interface><nc:interface><nc:name>ge-0/0/2</nc:name>
#   <nc:description>Configured by Ansible-2</nc:description><nc:disable/></nc:interface></nc:interfaces>
# after:
# - description: Configured by Ansible-1
#   enabled: true
#   mtu: 1800
#   name: ge-0/0/1
#   speed: 1g
#   units:
#   - description: This is logical intf unit0
#     name: 0
# - enabled: true
#   name: fe-0/0/2
# - description: Configured by Ansible-2
#   enabled: false
#   name: ge-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0

# After state:
# ------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     description "Configured by Ansible-1";
#     speed 1g;
#     mtu 1800;
#     unit 0 {
#         description "This is logical intf unit0";
#     }
# }
# fe-0/0/2 {
#     vlan-tagging;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

# Using deleted

# Before state:
# -------------
#
# ge-0/0/1 {
#     description "Configured by Ansible-1";
#     speed 1g;
#     mtu 1800;
#     unit 0 {
#         description "This is logical intf unit0";
#     }
# }
# fe-0/0/2 {
#     vlan-tagging;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

- name: "Delete given options for the interface (Note: This won't delete the interface itself if any other values are configured for interface)"
  junipernetworks.junos.junos_interfaces:
    config:
      - name: ge-0/0/1
        description: Configured by Ansible-1
        speed: 1g
        mtu: 1800
      - name: ge-0/0/2
        description: Configured by Ansible -2
    state: deleted

# Task Output
# -----------
#
# before:
# - description: Configured by Ansible-1
#   enabled: true
#   mtu: 1800
#   name: ge-0/0/1
#   speed: 1g
#   units:
#   - description: This is logical intf unit0
#     name: 0
# - enabled: true
#   name: fe-0/0/2
# - description: Configured by Ansible-2
#   enabled: false
#   name: ge-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0
# commands:
# - <nc:interfaces xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:interface>
#   <nc:name>ge-0/0/1</nc:name><nc:description delete="delete"/>
#   <nc:speed delete="delete"/><nc:mtu delete="delete"/><nc:link-mode delete="delete"/>
#   <nc:disable delete="delete"/><nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time><nc:unit>
#   <nc:name>0</nc:name><nc:description delete="delete"/></nc:unit></nc:interface><nc:interface><nc:name>ge-0/0/2</nc:name>
#   <nc:description delete="delete"/><nc:speed delete="delete"/><nc:mtu delete="delete"/><nc:link-mode delete="delete"/>
#   <nc:disable delete="delete"/><nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time></nc:interface>
#   </nc:interfaces>
# after:
# - enabled: true
#   name: ge-0/0/1
# - enabled: true
#   name: fe-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0

# After state:
# ------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     vlan-tagging;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

# Using overridden

# Before state:
# -------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     vlan-tagging;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

- name: Override device configuration of all interfaces with provided configuration
  junipernetworks.junos.junos_interfaces:
    config:
      - enabled: true
        name: ge-0/0/1
      - name: fe-0/0/2
        description: Configured by Ansible-2
        enabled: false
        mtu: 2800
      - description: Updated by Ansible-3
        enabled: true
        name: ge-0/0/3
      - enabled: true
        name: fxp0
      - enabled: true
        name: lo0
    state: overridden

# Task Output
# -----------
#
# before:
# - enabled: true
#   name: ge-0/0/1
# - enabled: true
#   name: fe-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0
# commands:
# - <nc:interfaces xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
#   <nc:interface><nc:name>ge-0/0/1</nc:name><nc:description delete="delete"/>
#   <nc:speed delete="delete"/><nc:mtu delete="delete"/><nc:link-mode delete="delete"/>
#   <nc:disable delete="delete"/><nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/>
#   </nc:hold-time></nc:interface><nc:interface><nc:name>fe-0/0/2</nc:name><nc:description delete="delete"/>
#   <nc:speed delete="delete"/><nc:mtu delete="delete"/><nc:link-mode delete="delete"/><nc:disable delete="delete"/>
#   <nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time></nc:interface><nc:interface>
#   <nc:name>ge-0/0/3</nc:name><nc:description delete="delete"/><nc:speed delete="delete"/><nc:mtu delete="delete"/>
#   <nc:link-mode delete="delete"/><nc:disable delete="delete"/><nc:hold-time>
#   <nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time></nc:interface>
#   <nc:interface><nc:name>fxp0</nc:name><nc:description delete="delete"/><nc:speed delete="delete"/>
#   <nc:link-mode delete="delete"/><nc:disable delete="delete"/>
#   <nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/>
#   </nc:hold-time></nc:interface><nc:interface><nc:name>lo0</nc:name>
#   <nc:description delete="delete"/><nc:disable delete="delete"/>
#   <nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/>
#   </nc:hold-time></nc:interface><nc:interface><nc:name>ge-0/0/1</nc:name>
#   </nc:interface><nc:interface><nc:name>fe-0/0/2</nc:name>
#   <nc:description>Configured by Ansible-2</nc:description>
#   <nc:mtu>2800</nc:mtu><nc:disable/></nc:interface><nc:interface>
#   <nc:name>ge-0/0/3</nc:name><nc:description>Updated by Ansible-3</nc:description>
#   </nc:interface><nc:interface><nc:name>fxp0</nc:name></nc:interface><nc:interface>
#   <nc:name>lo0</nc:name></nc:interface></nc:interfaces>
# after:
# - enabled: true
#   name: ge-0/0/1
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: fe-0/0/2
# - description: Updated by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0

# After state:
# ------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     vlan-tagging;
#     mtu 2800;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/3 {
#     description "Updated by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }


# Using replaced

# Before state:
# -------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     vlan-tagging;
#     mtu 2800;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/3 {
#     description "Updated by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

- name: Replace device configuration of listed interfaces with provided configuration
  junipernetworks.junos.junos_interfaces:
    config:
      - name: ge-0/0/2
        description: Configured by Ansible-2
        enabled: false
        mtu: 2800
      - name: ge-0/0/3
        description: Configured by Ansible-3
    state: replaced

# Task Output
# -----------
#
# before:
# - enabled: true
#   name: ge-0/0/1
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: fe-0/0/2
# - description: Updated by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0
# commands:
# - <nc:interfaces xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:interface>
#   <nc:name>ge-0/0/2</nc:name><nc:description delete="delete"/><nc:speed delete="delete"/>
#   <nc:mtu delete="delete"/><nc:link-mode delete="delete"/><nc:disable delete="delete"/>
#   <nc:hold-time><nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time></nc:interface>
#   <nc:interface><nc:name>ge-0/0/3</nc:name><nc:description delete="delete"/><nc:speed delete="delete"/>
#   <nc:mtu delete="delete"/><nc:link-mode delete="delete"/><nc:disable delete="delete"/><nc:hold-time>
#   <nc:up delete="delete"/><nc:down delete="delete"/></nc:hold-time></nc:interface><nc:interface><nc:name>ge-0/0/2</nc:name>
#   <nc:description>Configured by Ansible-2</nc:description><nc:mtu>2800</nc:mtu><nc:disable/></nc:interface><nc:interface>
#   <nc:name>ge-0/0/3</nc:name><nc:description>Configured by Ansible-3</nc:description></nc:interface></nc:interfaces>
# after:
# - enabled: true
#   name: ge-0/0/1
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: fe-0/0/2
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: ge-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0

# After state:
# ------------
#
# user@junos01# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     vlan-tagging;
#     mtu 2800;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     mtu 2800;
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

# Using gathered

# Before state:
# ------------
#
# vagrant@vsrx# show interfaces
# ge-0/0/1 {
#     unit 0;
# }
# fe-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     vlan-tagging;
#     mtu 2800;
#     unit 10 {
#         vlan-id 10;
#     }
#     unit 11 {
#         vlan-id 11;
#     }
# }
# ge-0/0/2 {
#     description "Configured by Ansible-2";
#     disable;
#     mtu 2800;
# }
# ge-0/0/3 {
#     description "Configured by Ansible-3";
# }
# fxp0 {
#     unit 0 {
#         family inet {
#             dhcp;
#         }
#     }
# }
# lo0 {
#     unit 0 {
#         family inet {
#             address 192.0.2.1/32;
#         }
#     }
# }

- name: Gather junos interfaces as in given arguments
  junipernetworks.junos.junos_interfaces:
    state: gathered

# Task Output
# -----------
#
# gathered:
# - enabled: true
#   name: ge-0/0/1
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: fe-0/0/2
# - description: Configured by Ansible-2
#   enabled: false
#   mtu: 2800
#   name: ge-0/0/2
# - description: Configured by Ansible-3
#   enabled: true
#   name: ge-0/0/3
# - enabled: true
#   name: fxp0
# - enabled: true
#   name: lo0

# Using parsed

# parsed.cfg
# ------------
#
# <?xml version="1.0" encoding="UTF-8"?>
# <rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f">
#     <configuration changed-seconds="1590139550" changed-localtime="2020-05-22 09:25:50 UTC">
#         <interfaces>
#             <interface>
#                 <name>ge-0/0/1</name>
#                 <description>Configured by Ansible</description>
#                 <disable/>
#                 <speed>100m</speed>
#                 <mtu>1024</mtu>
#                 <hold-time>
#                     <up>2000</up>
#                     <down>2200</down>
#                 </hold-time>
#                 <link-mode>full-duplex</link-mode>
#                 <unit>
#                     <name>0</name>
#                     <family>
#                         <ethernet-switching>
#                             <interface-mode>access</interface-mode>
#                             <vlan>
#                                 <members>vlan100</members>
#                             </vlan>
#                         </ethernet-switching>
#                     </family>
#                 </unit>
#             </interface>
#         </interfaces>
#     </configuration>
# </rpc-reply>

# - name: Convert interfaces config to structured data without connecting to the appliance
#   junipernetworks.junos.junos_interfaces:
#     running_config: "{{ lookup('file', './parsed.cfg') }}"
#     state: parsed

# Task Output
# -----------
#
# parsed:
# - description: Configured by Ansible
#   duplex: full-duplex
#   enabled: false
#   hold_time:
#     down: 2200
#     up: 2000
#   mtu: 1024
#   name: ge-0/0/1
#   speed: 100m

# Using rendered

- name: Render platform specific xml from task input using rendered state
  junipernetworks.junos.junos_interfaces:
    config:
      - name: ge-0/0/2
        description: Configured by Ansible
        mtu: 2048
        speed: 20m
        hold_time:
          up: 3200
          down: 3200
    state: rendered

# Task Output
# -----------
#
# rendered: <nc:interfaces
#     xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
#     <nc:interface>
#         <nc:name>ge-0/0/2</nc:name>
#         <nc:description>Configured by Ansible</nc:description>
#         <nc:speed>20m</nc:speed>
#         <nc:mtu>2048</nc:mtu>
#         <nc:hold-time>
#             <nc:up>3200</nc:up>
#             <nc:down>3200</nc:down>
#         </nc:hold-time>
#     </nc:interface>
# </nc:interfaces>"

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

Key Returned Description
after
list
when changed
The configuration as structured data after module completion.

Sample:
The configuration returned will always be in the same format of the parameters above.
before
list
always
The configuration as structured data prior to module invocation.

Sample:
The configuration returned will always be in the same format of the parameters above.
gathered
list
when state is gathered
Facts about the network resource gathered from the remote device as structured data.

Sample:
This output will always be in the same format as the module argspec.
parsed
list
when state is parsed
The device native config provided in running_config option parsed into structured data as per module argspec.

Sample:
This output will always be in the same format as the module argspec.
rendered
list
when state is rendered
The provided configuration in the task rendered in device-native format (offline).

Sample:
['<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">']
xml
list
always
The set of xml rpc payload pushed to the remote device.

Sample:
['<?xml version="1.0" encoding="UTF-8"?> <rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f"> <configuration changed-seconds="1590139550" changed-localtime="2020-05-22 09:25:50 UTC"> <interfaces> <interface> <name>ge-0/0/1</name> <description>Configured by Ansible</description> <disable/> <speed>100m</speed> <mtu>1024</mtu> <hold-time> <up>2000</up> <down>2200</down> </hold-time> <link-mode>full-duplex</link-mode> <unit> <name>0</name> <family> <ethernet-switching> <interface-mode>access</interface-mode> <vlan> <members>vlan100</members> </vlan> </ethernet-switching> </family> </unit> </interface> </interfaces> </configuration> </rpc-reply>', 'xml 2', 'xml 3']


Authors

  • Ganesh Nalawade (@ganeshrn)