From dc31f8af88c057ebccd4151a8e8ce0d75faaf400 Mon Sep 17 00:00:00 2001 From: Erik Auerswald Date: Mon, 5 Mar 2018 14:13:28 +0100 Subject: [PATCH] HW2: add writeup --- hw2-reports/README.md | 116 ++++++++++++++++++++++++++++++++++- hw2-reports/connectivity.gv | 21 +++++++ hw2-reports/connectivity.png | Bin 0 -> 19871 bytes hw2-reports/interlude2.md | 34 ++++++++++ 4 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 hw2-reports/connectivity.gv create mode 100644 hw2-reports/connectivity.png create mode 100644 hw2-reports/interlude2.md diff --git a/hw2-reports/README.md b/hw2-reports/README.md index 75109ae..cfb0998 100644 --- a/hw2-reports/README.md +++ b/hw2-reports/README.md @@ -50,7 +50,7 @@ format. --- -## Interlude 1: Beating Ansible Installation into Shape +### Interlude 1: Beating Ansible Installation into Shape When I tried to use the `ios_command` module, it would fail with the error message: @@ -62,4 +62,118 @@ for the `ios_command` module, it missed the two Python packages `enum34` and --- +### Ansible Playbook + +The solution approach provides a general structure for the Ansible playbook +[`topology.yml`](playbooks/topology.yml). I have used `tags` to allow +invoking parts of the playbook that belong together: + +* `get` retrieves CDP neighbor information from network devices and writes the + raw CLI output to a file +* `parse` reads the raw CLI output from file and parses it into a data structure +* `graph` uses the data structure from the `parse` step to generate a DOT + language description of the graph (`connectivity.gv`) and a PNG image + visualizing it (`connectivity.png`) +* `debug_*` tags allow debugging of the respective steps + +--- + +### Interlude 2: Lab Configuration + +The lab as configured for [homework 1](../hw1-the_lab) lacks interesting +connectivity, thus I needed add some configuration. This is described in +the separate [Interlude 2](interlude2.md) document. + +--- + +### Playbook Description + +The following sections provide more information about the Ansible playbook +to create a visualization of the network connectivity. + +#### One Play + +The playbook comprises one play with several tasks. The network devices used +are specified at play level (the `OOB` group using the OOB interfaces, since +in-band connectivity is not yet established). Additionally, use of the `local` +connection is specified at play level, because all tasks are executed on +`localhost`: + +* Files for intermediate steps and end result need to be created on the Ansible + host. +* Ansible network modules are executed on the Ansible host, the module then + connects to the network device. + +A few variables to control where generated files are stored and how they are +named are defined at play level as well. + +#### Tasks to Retrieve CDP Information + +Four tasks (with the tag `get`) are used to retrieve CDP neighbor information +from the network devices. The first uses the `ios_command` module to issue +`show cdp neighbors detail` on each router. This information is written to +a text file in the fouth `get` task, after the second and thrid `get` tasks +have deleted old CDP information and (re-)created the directory to store it in. + +#### Tasks to Parse CDP Information + +Two tasks (with tag `parse`) are used to parse the CDP data to fill a data +structure that can be used in a Jinja2 template. The first reads the raw CDP +output using the Ansible `lookup` plugin `file`. The second uses the +`parse_cli_textfsm` filter with the +[TextFSM](https://github.com/google/textfsm) +[template](https://github.com/google/textfsm/wiki/TextFSM) +[`cdp_neighbors_detail.textfsm`](ansible/playbooks/cdp_neighbors_detail.textfsm) +to create a list with neighbor data. + +#### Tasks to Graph the Topology + +Four tasks (with tag `graph`) are used to generate an image that shows the +network topology. The first two tasks prepare the output directory, i.e. +they delete contents from previous playbook executions and (re-)create the +output directory. The third task uses the Ansible `template` module to +generate a DOT language description with the +[`connectivity.j2`](ansible/playbooks/templates/connectivity.j2) +Jinja2 template. The fourth task invokes the `dot` program using the Ansible +`command` module to generate a PNG image of the connectivity graph. + +--- + +### Network Topology Visualization + +The Ansible playbook [`topology.yml`](ansible/playbooks/topology.yml) generates +to result files: + +1. The DOT language graph description [`connectivity.gv`](connectivity.gv) +2. The PNG image [`connectivity.png`](connectivity.png) of the topology + +#### Topology Image + +![Generated Topology Image](connectivity.png) + +--- + +## References + +* Ansible Filters + * [`parse_cli`](http://docs.ansible.com/ansible/latest/playbooks_filters.html#id20) + * [`parse_cli_textfsm`](http://docs.ansible.com/ansible/latest/playbooks_filters.html#id20) +* [Ansible Lookup Plugins](http://docs.ansible.com/ansible/latest/playbooks_lookups.html) +* Ansible Modules + * [`ios_command`](http://docs.ansible.com/ansible/latest/ios_command_module.html) + * [`ios_config`](https://docs.ansible.com/ansible/latest/ios_config_module.html) +* [Ansible Templating](https://docs.ansible.com/ansible/latest/playbooks_templating.html) +* [DOT language](https://graphviz.gitlab.io/_pages/doc/info/lang.html) +* [dot program](https://graphviz.gitlab.io/_pages/pdf/dotguide.pdf) +* [Graphviz](http://graphviz.org/) +* [Jinja2](http://jinja.pocoo.org/) +* [PNG](http://www.libpng.org/pub/png/) +* [Prescriptive Topology Manager](https://github.com/CumulusNetworks/ptm) +* ([PTM Documentation](https://docs.cumulusnetworks.com/display/DOCS/Prescriptive+Topology+Manager+-+PTM)) +* [TextFSM](https://github.com/google/textfsm) +* [TextFSM template](https://github.com/google/textfsm/wiki/TextFSM) +* [YAML](http://yaml.org/) + +--- + [BNAS2018 GitHub repository](https://github.com/auerswal/bnas2018) | [My GitHub user page](https://github.com/auerswal) | [My home page](https://www.unix-ag.uni-kl.de/~auerswal/) diff --git a/hw2-reports/connectivity.gv b/hw2-reports/connectivity.gv new file mode 100644 index 0000000..3cf5899 --- /dev/null +++ b/hw2-reports/connectivity.gv @@ -0,0 +1,21 @@ +strict graph network_connectivity { + "P1.lab.local" [shape=record,label="P1.lab.local| Fa2/0| Fa6/0| Fa1/0"]; + "P2.lab.local" [shape=record,label="P2.lab.local| Fa2/0| Fa1/0"]; + "PE1.lab.local" [shape=record,label="PE1.lab.local| Et6/1| Fa2/0"]; + "PE2.lab.local" [shape=record,label="PE2.lab.local| Et6/2| Fa2/0"]; + "RR1.lab.local" [shape=record,label="RR1.lab.local| Fa6/0"]; + "CE1.lab.local" [shape=record,label="CE1.lab.local| Et1/0"]; + "CE2.lab.local" [shape=record,label="CE2.lab.local| Et1/0"]; + "P1.lab.local":"FastEthernet2/0" -- "PE1.lab.local":"FastEthernet2/0"; + "P1.lab.local":"FastEthernet6/0" -- "RR1.lab.local":"FastEthernet6/0"; + "P1.lab.local":"FastEthernet1/0" -- "P2.lab.local":"FastEthernet1/0"; + "P2.lab.local":"FastEthernet2/0" -- "PE2.lab.local":"FastEthernet2/0"; + "P2.lab.local":"FastEthernet1/0" -- "P1.lab.local":"FastEthernet1/0"; + "PE1.lab.local":"Ethernet6/1" -- "CE1.lab.local":"Ethernet1/0"; + "PE1.lab.local":"FastEthernet2/0" -- "P1.lab.local":"FastEthernet2/0"; + "PE2.lab.local":"Ethernet6/2" -- "CE2.lab.local":"Ethernet1/0"; + "PE2.lab.local":"FastEthernet2/0" -- "P2.lab.local":"FastEthernet2/0"; + "RR1.lab.local":"FastEthernet6/0" -- "P1.lab.local":"FastEthernet6/0"; + "CE1.lab.local":"Ethernet1/0" -- "PE1.lab.local":"Ethernet6/1"; + "CE2.lab.local":"Ethernet1/0" -- "PE2.lab.local":"Ethernet6/2"; +} diff --git a/hw2-reports/connectivity.png b/hw2-reports/connectivity.png new file mode 100644 index 0000000000000000000000000000000000000000..d34edfcd1e57a187fafc07b76fc6216276fc2024 GIT binary patch literal 19871 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 literal 0 HcmV?d00001 diff --git a/hw2-reports/interlude2.md b/hw2-reports/interlude2.md new file mode 100644 index 0000000..720963e --- /dev/null +++ b/hw2-reports/interlude2.md @@ -0,0 +1,34 @@ +## Interlude 2: Lab Configuration + +The virtual lab as set up in [homework 1](../hw1-the_lab) enables just the +interfaces used for out-of-band management. These interfaces are connected +to a Linux bridge without CDP support. As a result every router sees all other +routers via CDP in the OOB interface. Since all physical router interfaces +are administratively down by default, the connectivity graph shows just +full mesh connectivity between the OOB interfaces and nothing more. That is +not the intended result for the topology visualization. + +Thus I have written two playbooks to add some configuration to the virtual +network: + +1. The playbook [`no_oob_mgmt_cdp.yml`](ansible/playbooks/no_oob_mgmt_cdp.yml) + disables CDP on the OOB interfaces, because I do not want to see this in + the topology graph. The OOB interfaces are intended for staging only, they + are not part of the production configuration. This is a simple playbook, + because just one command (`no cdp enable`) needs to be configured on the + same interface (`FastEthernet0/0`) of all routers. This is done with just + one task invoking the `ios_config` module in the single play of the + playbook. +2. The playbook [`configure_interfaces.yml`](ansible/playbooks/configure_interfaces.yml) + enables the transit interfaces between the routers, and additionally + configures IPv4 addresses on transit and loopback interfaces. (The IPv4 + addresses are not used yet.) This playbook is a bit more complex than the + other. It reads a [YAML file](ansible/playbooks/vars/half_lab-interfaces.yml) + containing node descriptions, uses a + [Jinja2 template](ansible/playbooks/templates/ios-interfaces.j2) to generate + configuration snippets, and then uses the generated configuration as input + to the `ios_config` Ansible module. + +--- + +[BNAS2018 Homework 2](README.md) | [BNAS2018 GitHub repository](https://github.com/auerswal/bnas2018) | [My GitHub user page](https://github.com/auerswal) | [My home page](https://www.unix-ag.uni-kl.de/~auerswal/)