Chapter 2. Use a Playbook to establish a connection to a managed node
To confirm your credentials, you can connect to a network device manually and retrieve its configuration. Replace the sample user and device name with your real credentials.
For example, for a VyOS router:
ssh my_vyos_user@vyos.example.net show config exit
ssh my_vyos_user@vyos.example.net
show config
exit
2.1. Run a network Ansible command Copy linkLink copied to clipboard!
Instead of manually connecting and running a command on the network device, you can retrieve its configuration with a single Ansible command.
ansible all -i vyos.example.net, -c ansible.netcommon.network_cli -u \ my_vyos_user -k -m vyos.vyos.vyos_facts -e \ ansible_network_os=vyos.vyos.vyos
ansible all -i vyos.example.net, -c ansible.netcommon.network_cli -u \
my_vyos_user -k -m vyos.vyos.vyos_facts -e \
ansible_network_os=vyos.vyos.vyos
The flags in this command set seven values:
-
the host group(s) to which the command should apply (in this case,
all) -
the inventory (
-i, the device or devices to target - without the trailing comma-ipoints to an inventory file) -
the connection method (
-c, the method for connecting and executing ansible) -
the user (
-u, the username for the SSH connection) -
the SSH connection method (-
k, prompt for the password) -
the module (
-m, the Ansible module to run, using the fully qualified collection name (FQCN)) -
an extra variable (
-e, in this case, setting the network OS value)
If you use ssh-agent with ssh keys, Ansible loads them automatically. You can omit the -k flag.
If you are running Ansible in a virtual environment, you must also add the variable ansible_python_interpreter=/path/to/venv/bin/python.
2.2. Running a network Ansible Playbook Copy linkLink copied to clipboard!
If you want to run a particular command every day, you can save it in a playbook and run it with ansible-playbook instead of ansible. The playbook can store a lot of the parameters you provided with flags at the command line, leaving less to type at the command line. You need two files for this, a playbook and an inventory file.
Prerequisites
Download first_playbook.yml from here.
The playbook looks like this:
| Label | Description |
|---|---|
|
|
Ansible’s native fact gathering ( |
The playbook sets three of the seven values from the command line above:
-
the group (
hosts: all) -
the connection method (
connection: ansible.netcommon.network_cli) and - the module (in each task).
With those values set in the playbook, you can omit them on the command line. The playbook also adds a second task to show the configuration output.
When facts are gathered from a system, either through a collection-specific fact module such as vyos.vyos.vyos_facts or ansible.builtin.setup, the gathered data is held in memory for use by future tasks instead of being written to the console.
When a module runs in a playbook, the output is held in memory for use by future tasks instead of written to the console. With most other modules you must explicitly register a variable to store and reuse the output of a module or task.
For more information about facts, see [Ansible facts] in the Ansiible Playbook Reference Guide.
The following debug task lets you see the results in your shell.
Procedure
Run the playbook with the following command.
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.ymlThe playbook contains one play with two tasks, and generates output like this.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Now that you can retrieve the device configuration, you can try updating it with Ansible.
Download
first_playbook_ext.ymlfrom here, which is an extended version of the first playbook:The playbook looks like this:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - The extended first playbook has five tasks in a single play.
Run the playbook with the following command.
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow The output shows you the change Ansible made to the configuration:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. Gather facts from network devices Copy linkLink copied to clipboard!
The gather_facts keyword supports gathering network device facts in standardized key/value pairs. You can feed these network facts into further tasks to manage the network device. You can also use the gather_network_resources parameter with the network *_facts modules (such as arista.eos.eos_facts) to return a subset of the device configuration, as shown below.
The playbook returns the following interface facts:
gather_network_resources renders configuration data as facts for all supported resources (interfaces/bgp/ospf/etc`), whereas gather_subset is primarily used to fetch operational data.
You can store these facts and use them directly in another task, such as with the eos_interfaces resource module.