Ansible 2.9 introduced network resource modules to simplify and standardize how you manage different network devices.
Network devices separate configuration into sections (such as interfaces, VLANS, etc) that apply to a network service. Ansible network resource modules take advantage of this to allow you to configure subsections or resources within the network device configuration. Network resource modules provide a consistent experience across different network devices.
You use the network resource modules by assigning a state to what you want the module to do. The resource modules support the following states:
gathered
key in the result.rendered
key in the result. Note this state does not communicate with the network device and can be used offline.running_configuration
option into Ansible structured data in the parsed
key in the result. Note this does not gather the configuration from the network device so this state can be used offline.This example configures L3 interface resource on a Cisco IOS device, based on different state settings.
- name: configure l3 interface ios_l3_interfaces: config: "{{ config }}" state: <state>
The following table shows an example of how an initial resource configuration changes with this task for different states.
Resource starting configuration | task-provided configuration (YAML) | Final resource configuration on device |
---|---|---|
interface loopback100 ip address 10.10.1.100 255.255.255.0 ipv6 address FC00:100/64 |
config: - ipv6: - address: fc00::100/64 - address: fc00::101/64 name: loopback100 |
|
| ||
| ||
|
Network resource modules return the following details:
ok: [nxos101] => result: after: contact: IT Support location: Room E, Building 6, Seattle, WA 98134 users: - algorithm: md5 group: network-admin localized_key: true password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' username: admin before: contact: IT Support location: Room E, Building 5, Seattle HQ users: - algorithm: md5 group: network-admin localized_key: true password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' username: admin changed: true commands: - snmp-server location Room E, Building 6, Seattle, WA 98134 failed: false
The following playbook uses the eos_l3_interfaces module to gather a subset of the network device configuration (Layer 3 interfaces only) and verifies the information is accurate and has not changed. This playbook passes the results of eos_facts directly to the eos_l3_interfaces
module.
- name: Example of facts being pushed right back to device. hosts: arista gather_facts: false tasks: - name: grab arista eos facts eos_facts: gather_subset: min gather_network_resources: l3_interfaces - name: Ensure that the IP address information is accurate. eos_l3_interfaces: config: "{{ ansible_network_resources['l3_interfaces'] }}" register: result - name: Ensure config did not change. assert: that: not result.changed
See also
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/network/user_guide/network_resource_modules.html