From 05a3879baaeb21f31524b8a5b41c4f9c6c5773a5 Mon Sep 17 00:00:00 2001 From: Lakshmi Rajan Date: Fri, 26 Oct 2018 09:24:15 -0700 Subject: [PATCH 1/8] Create substring.py --- lessons/lesson-29/substring.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 lessons/lesson-29/substring.py diff --git a/lessons/lesson-29/substring.py b/lessons/lesson-29/substring.py new file mode 100644 index 00000000..dd3f63f4 --- /dev/null +++ b/lessons/lesson-29/substring.py @@ -0,0 +1,3 @@ +def is_a_substring(str1, str2): + if str1 not in str2: + raise Exception(f"{str1} is not a substring of {str2}") From 59bdd3ced1896cb9df9261dfd7f24cb536415800 Mon Sep 17 00:00:00 2001 From: saimkhan92 Date: Tue, 6 Nov 2018 14:32:00 -0800 Subject: [PATCH 2/8] added robot tutorial chapter 1-3 --- .gitignore | 3 + CHANGELOG.md | 16 ++ docs/contributing/curriculum.rst | 24 +++ docs/contributing/ptr.rst | 5 +- docs/ops.rst | 13 ++ images/utility/requirements.txt | 2 + lessons/lesson-12/syringe.yaml | 5 +- lessons/lesson-13/syringe.yaml | 1 + lessons/lesson-14/syringe.yaml | 2 +- lessons/lesson-15/syringe.yaml | 1 + lessons/lesson-16/stage1/guide.md | 79 +++++++++- lessons/lesson-16/stage2/guide.md | 98 ++++++++++++ lessons/lesson-16/stage3/guide.md | 98 ++++++++++++ lessons/lesson-16/stage4/guide.md | 78 +++++++++ lessons/lesson-16/stage4/part4.yml | 19 +++ lessons/lesson-16/stage5/device_config.j2 | 5 + lessons/lesson-16/stage5/dir1/static_route.j2 | 5 + lessons/lesson-16/stage5/dir2/l3_interface.j2 | 9 ++ lessons/lesson-16/stage5/guide.md | 83 ++++++++++ lessons/lesson-16/syringe.yaml | 17 +- lessons/lesson-17/syringe.yaml | 2 +- lessons/lesson-18/syringe.yaml | 2 +- lessons/lesson-19/syringe.yaml | 1 + lessons/lesson-20/syringe.yaml | 2 +- lessons/lesson-21/syringe.yaml | 2 +- lessons/lesson-22/syringe.yaml | 2 +- lessons/lesson-23/syringe.yaml | 2 +- lessons/lesson-29/lessondiagram.png | Bin 0 -> 186193 bytes lessons/lesson-29/stage1/chapter1_eg1.robot | 22 +++ lessons/lesson-29/stage1/configs/vqfx1.txt | 147 +++++++++++++++++ lessons/lesson-29/stage1/guide.md | 149 ++++++++++++++++++ lessons/lesson-29/stage1/substring.py | 3 + lessons/lesson-29/stage2/JunosDevice.py | 31 ++++ lessons/lesson-29/stage2/chapter2_eg1.robot | 15 ++ lessons/lesson-29/stage2/configs/vqfx1.txt | 147 +++++++++++++++++ lessons/lesson-29/stage2/guide.md | 127 +++++++++++++++ lessons/lesson-29/stage3/JunosDevice.py | 31 ++++ lessons/lesson-29/stage3/chapter3_eg1.robot | 25 +++ lessons/lesson-29/stage3/chapter3_eg2.robot | 8 + .../lesson-29/stage3/chapter3_resource.robot | 24 +++ lessons/lesson-29/stage3/configs/vqfx1.txt | 147 +++++++++++++++++ lessons/lesson-29/stage3/guide.md | 97 ++++++++++++ lessons/lesson-29/substring.py | 3 - lessons/lesson-29/syringe.yaml | 41 +++++ platform/prod/syringe.yml | 4 +- 45 files changed, 1573 insertions(+), 24 deletions(-) create mode 100644 docs/ops.rst create mode 100644 lessons/lesson-16/stage2/guide.md create mode 100644 lessons/lesson-16/stage3/guide.md create mode 100644 lessons/lesson-16/stage4/guide.md create mode 100644 lessons/lesson-16/stage4/part4.yml create mode 100644 lessons/lesson-16/stage5/device_config.j2 create mode 100644 lessons/lesson-16/stage5/dir1/static_route.j2 create mode 100644 lessons/lesson-16/stage5/dir2/l3_interface.j2 create mode 100644 lessons/lesson-16/stage5/guide.md create mode 100644 lessons/lesson-29/lessondiagram.png create mode 100644 lessons/lesson-29/stage1/chapter1_eg1.robot create mode 100644 lessons/lesson-29/stage1/configs/vqfx1.txt create mode 100644 lessons/lesson-29/stage1/guide.md create mode 100644 lessons/lesson-29/stage1/substring.py create mode 100644 lessons/lesson-29/stage2/JunosDevice.py create mode 100644 lessons/lesson-29/stage2/chapter2_eg1.robot create mode 100644 lessons/lesson-29/stage2/configs/vqfx1.txt create mode 100644 lessons/lesson-29/stage2/guide.md create mode 100644 lessons/lesson-29/stage3/JunosDevice.py create mode 100644 lessons/lesson-29/stage3/chapter3_eg1.robot create mode 100644 lessons/lesson-29/stage3/chapter3_eg2.robot create mode 100644 lessons/lesson-29/stage3/chapter3_resource.robot create mode 100644 lessons/lesson-29/stage3/configs/vqfx1.txt create mode 100644 lessons/lesson-29/stage3/guide.md delete mode 100644 lessons/lesson-29/substring.py create mode 100644 lessons/lesson-29/syringe.yaml diff --git a/.gitignore b/.gitignore index e7cb57d5..c50caf43 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.retry hosts venv/ +*.pyc # This is where I placed my updated gcp provider terraform.d/ @@ -39,3 +40,5 @@ _old_contrail/ *ansiblekey.json platform/antidote-web/target/ + +__pycache__ diff --git a/CHANGELOG.md b/CHANGELOG.md index 94ca55b6..496b2ca0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,27 @@ ### Curriculum +- Adding Lesson-16 Jinja2 Templates [#121](https://github.com/nre-learning/antidote/pull/121) + +### Other + +## 0.1.2 - October 29, 2018 + +### Curriculum + +### Other + + +## 0.1.1 - October 28, 2018 + +### Curriculum + - Fixed typos in YAML lesson (change) - [#109](https://github.com/nre-learning/antidote/pull/109) (contributed by pklimai) ### Other - Significant restructuring of docs, and large improvements to contribution pages [#108](https://github.com/nre-learning/antidote/pull/108) +- Added "tier" field to all syringe files [#116](https://github.com/nre-learning/antidote/pull/116) ## v0.1.0 diff --git a/docs/contributing/curriculum.rst b/docs/contributing/curriculum.rst index 3f62afdc..040af79b 100644 --- a/docs/contributing/curriculum.rst +++ b/docs/contributing/curriculum.rst @@ -101,9 +101,33 @@ Here are a few things that reviewers should be on the lookout for when reviewing curriculum, either for new or existing lessons. If you're contributing to the curriculum, you should be aware of these guidelines, to make the review process much smoother. +- Can a user get through a lesson stage quickly? Are we letting them get to a quick win as soon as practical while still teaching quality content? - Does the new or changed lesson adhere to the spirit of Antidote lessons laid out in this document? - For new lessons, does the lesson guide (or jupyter notebook if applicable) look nice? Does the author attribute themselves? - Is the lesson guide(s) easy to follow? - Are any documentation updates also needed? - Is the CHANGELOG updated properly? - Can we show this in NRE labs? Usage rights? +- Is the business benefit clear from this lesson? How easy is it for people to link this content with their day-to-day? + +Appendix - Lesson Contribution FAQ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**NAPALM Can't Find My Configs.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This is likely due to the way you've deployed syringe. + +In the selfmedicate repo, there are a number of kubernetes manifests useful for running antidote locally. +However, there are some defaults here you'll likely want to change. In particular, if you're making lesson +changes in a branch or fork (which is ideal if you want to open a PR) you will want to make sure you update +the syringe deployment in two places: + +- The init-container definition, where the ``antidote`` repo + is cloned into the syringe pod +- Syringe's ``SYRINGE_LESSON_REPO_REMOTE`` and ``SYRINGE_LESSON_REPO_BRANCH`` + environment variables. + +Be sure to re-deploy syringe using ``kubectl apply -f syringe.yaml`` once you've made the appropriate changes. +If you've already made these changes and it still doesn't work, make sure syringe is using the latest copy +of your repo by deleting the syringe pod. The Syringe deployment will re-deploy a new pod with a freshly-cloned +version of your lesson repo. diff --git a/docs/contributing/ptr.rst b/docs/contributing/ptr.rst index 1de13c25..64398db2 100644 --- a/docs/contributing/ptr.rst +++ b/docs/contributing/ptr.rst @@ -12,12 +12,11 @@ However, there's a version of NRE Labs that is deployed every time a change to ` on one of Antidote's repositories, called the "public test realm". It's located at: `https://ptr.labs.networkreliability.engineering/ `_. - The NRE Labs PTR will be quite similar to the "production" copy, but there are a few important differences to discuss: -* Everything is deployed via ``master``, and is inherently unstable. We will try to keep things working, - but it **is** a test realm. There be dragons here. +* Everything is deployed via ``master`` or the current release branch, and is inherently unstable. + We will try to keep things working, but it **is** a test realm. There be dragons here. * All lessons in the ``antidote`` repository are shown, despite the `disabled` property in the syringe file. * A black bar with the latest commit ID for all three projects (``antidote``, ``antidote-web``, diff --git a/docs/ops.rst b/docs/ops.rst new file mode 100644 index 00000000..280ffbcf --- /dev/null +++ b/docs/ops.rst @@ -0,0 +1,13 @@ + + + +# kubectl create sa stanley +# kubectl create clusterrolebinding owner-cluster-admin-binding \ +# --clusterrole cluster-admin \ +# --user stanley +# secret=$(kubectl get sa stanley -o json | jq -r '.secrets[0].name') +# kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D + + +# kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt + diff --git a/images/utility/requirements.txt b/images/utility/requirements.txt index 4855f37a..8134eb33 100644 --- a/images/utility/requirements.txt +++ b/images/utility/requirements.txt @@ -2,3 +2,5 @@ napalm netmiko jsnapy junos-eznc +robotframework +jinja2 diff --git a/lessons/lesson-12/syringe.yaml b/lessons/lesson-12/syringe.yaml index 6c3014ca..f13237ed 100644 --- a/lessons/lesson-12/syringe.yaml +++ b/lessons/lesson-12/syringe.yaml @@ -3,11 +3,8 @@ lessonName: Network Unit Testing with JSNAPY lessonID: 12 category: verification lessondiagram: https://raw.githubusercontent.com/nre-learning/antidote/master/lessons/lesson-12/lessondiagram.png - - topologyType: custom - -# TODO(mierdin): What about IP addressing for utilities? +tier: prod utilities: - name: linux1 diff --git a/lessons/lesson-13/syringe.yaml b/lessons/lesson-13/syringe.yaml index 0ff28028..55881d86 100644 --- a/lessons/lesson-13/syringe.yaml +++ b/lessons/lesson-13/syringe.yaml @@ -3,6 +3,7 @@ lessonName: Multi-Vendor Network Automation with NAPALM lessonID: 13 category: configuration topologyType: custom +tier: prod utilities: diff --git a/lessons/lesson-14/syringe.yaml b/lessons/lesson-14/syringe.yaml index e431c899..632bea8b 100644 --- a/lessons/lesson-14/syringe.yaml +++ b/lessons/lesson-14/syringe.yaml @@ -2,8 +2,8 @@ lessonName: Introduction to YAML lessonID: 14 category: introductory - topologyType: none +tier: prod utilities: - name: linux1 diff --git a/lessons/lesson-15/syringe.yaml b/lessons/lesson-15/syringe.yaml index c742de6e..3b77f365 100644 --- a/lessons/lesson-15/syringe.yaml +++ b/lessons/lesson-15/syringe.yaml @@ -3,6 +3,7 @@ lessonName: Event-Driven Network Automation with StackStorm lessonID: 15 category: configuration disabled: true +tier: ptr topologyType: custom diff --git a/lessons/lesson-16/stage1/guide.md b/lessons/lesson-16/stage1/guide.md index a9e59874..f4f23252 100644 --- a/lessons/lesson-16/stage1/guide.md +++ b/lessons/lesson-16/stage1/guide.md @@ -1,4 +1,77 @@ -# Using Jinja for Configuration Templates -## Part 1 - Intro +# Using Jinja for Configuration Templates +**Contributed by: [@ShrutiVPawaskar](https://github.com/ShrutiVPawaskar) and [@shahbhoomi](https://github.com/shahbhoomi)** +## Part 1 - Introduction to Jinja2 -Jinja lesson. +I am sure at some point you might have heard the word “Jinja2”. So, what is Jinja2?? Why do you need to invest your time in learning Jinja2 and go through these lessons? We will answer all your questions in this lesson! + +### What are Templates? +* A template is a text document where some or all of the content is dynamically generated. +* Data is automatically loaded to the templates with the help of template variables. You can also say that the templates are reusable text files. + +### What is Jinja2? Why do we use it? +* Jinja2 is a modern and designer-friendly templating language for Python. It is prevalent in the DevOps/NetOps community. +* It has gained a lot of popularity as it has a lot of information published and is supported by tools like Ansible, StackStorm, and Salt. +* Template Inheritance: It allows you to build a base “skeleton” template that contains all the common elements of your site and defines blocks that child templates can override. + +So, let’s begin with our first example and get you started with your Jinja2 Adventure!! + +First, we need to install Jinja2 using `pip install jinja2`(it is preinstalled for these lessons). Next, open an interactive python shell by running the snippet below and import the template module from Jinja2. +``` +python +from jinja2 import Template +``` + + +Run the below snippet to see the sample output we plan on achieving using our Jinja2 Template. +``` +print('ge-0/0/0 has IP address 192.168.1.1') +``` + + +### Template Syntax: + +``` +template_name = Template('some_text {{template_variable1}} some_text') +``` +where `{{template_variable1}}` is the template variable and template_name is the name of the template. `Template()` function converts your text into a reusable Jinja2 template. + +Let us look at Example 1 to learn how to use these templates. Here `ipaddr_template` is the Jinja2 Template and `{{interface}}` and `{{ip_address}}` are the template variables. + +### Example: 1 +``` +ipaddr_template = Template('{{interface}} has IP address {{ip_address}}') +``` + + +Now that our template is ready, we want to load the data in it. This can be done with the help of the `template.render()` function. `template.render()` will take the data you supply to the template variables and load it to the template. Check that out by running the below snippet. + +``` +interface_1 = ipaddr_template.render(interface='ge-0/0/0', + ip_address='192.168.1.1') +print(str(interface_1)) +``` + + + +let’s look at Example 2 and supply the different variable values to our Jinaj2 template aka "Resuable Text File". + +### Example: 2 + +``` +render_2 = ipaddr_template.render(interface='ge-0/0/1', + ip_address='10.10.1.1') +print(str(render_2)) +``` + + +That’s all for stage-1, in coming lessons we will look into how to use a list or dictionary of variables to populate the template. But before that we expect you to have the following take away from stage-1. + +### Take-away from Stage 1: +* Jinja2 is a templating tool +* Jinja2 templates are the text files that sets the format of your output +* `{{}}` shows the template variables and can be loaded to the template using the `render()` function. +* As seen from example 1 and 2, Jinja2 templates can be “reused” with a different set of variables. + +That’s all for now; next, we will look into how to use a list or dictionary of variables to populate the template. + +Hope you enjoyed it!! See you in stage-2! diff --git a/lessons/lesson-16/stage2/guide.md b/lessons/lesson-16/stage2/guide.md new file mode 100644 index 00000000..128915b0 --- /dev/null +++ b/lessons/lesson-16/stage2/guide.md @@ -0,0 +1,98 @@ +# Using Jinja for Configuration Templates +## Part 2 – For Loops + +Now that you know what is a template and how it works, let’s dive deep into using `for` loops for variable assignment. +For loops are very useful if you have your data in the form of a list/dictionary or the combination of both. In this part we will take an example which has data stored as a list of dictionaries. + +First, we want to start the Python interpreter and import `Environment` module from Jinja2 library. + +``` +python +from jinja2 import Environment +``` + + +### Python Syntax: + +In case you haven’t worked with python lists and dictionaries, below is the syntax for them: +List: `[a, b, c]` +Where `a`, `b`, `c` are the elements of the list + +Dictionary: `{x: a, y: b, z: c}` +where `x`, `y`, `z` are the keys and `a`, `b`, `c` are the values of the keys + +In our example `interface` and `ip_address` are the keys and `ge-0/0/0` and `192.168.1.1` are the values of those keys. All these key value pairs are the list elements of the list `interfaces`. + +Run the below snippet to define `interfaces` which will later be used to populate our template. + +### Example: 1 +``` +interfaces = [{'interface': 'ge-0/0/0', 'ip_address': '192.168.1.1'}, + {'interface': 'ge-0/0/1', 'ip_address': '10.10.1.1'}, + {'interface': 'fxp0', 'ip_address': '172.16.1.1'}] +``` + + +Now once we have our data, we will use `for` loop to iterate through our list of dictionary and populate the template. Below is the syntax of `for` loop: + +``` +{% for condition %} + ... +{% endfor %} +``` + +Lets analyze the `for` loop in the snippet below, +`{% for item in interfaces %}` iterates over each dictionary in the list `interfaces`. +The `trim_blocks` is a optional Enviroment parameters, and is used to trim an extra new line characters between consecutive iterations. +Similarly, `lstrip_block` is a optional Enviroment parameter for striping an extra space/tab before a block. +We are using `env.from_string` which accepts a template in form of a string. +`{{ item.interface }} has IP address {{ item.ip_address }}` replaces the template variable `interface` with the value for the key `interface` and replace `ip_address` with the item’s value for the key `ip_address`. + +``` +env = Environment(trim_blocks=True, lstrip_blocks=True) +ipaddr_template = env.from_string(''' +{% for item in interfaces %} +{{ item.interface }} has IP address {{ item.ip_address }} +{% endfor %}''') +render_1 = ipaddr_template.render(interfaces=interfaces) +print(str(render_1)) +``` + + + +Now let us define one more list of dictionaries for vlans. + +### Example: 2 +``` +vlans = [{'vlan': 'VLAN10', 'vlan_id': 10}, + {'vlan': 'VLAN20', 'vlan_id': 20}, + {'vlan': 'VLAN30', 'vlan_id': 20}] +``` + + +Now we will learn how to use the `for` loop to format the template like a Junos CLI configuration. + +``` +vlan_config = env.from_string(''' +vlans { +{% for item in vlans %} + {{ item.vlan }} { + vlan-id {{ item.vlan_id }}; + l3-interface irb.{{item.vlan_id}}; + } +{% endfor %} +}''') + +``` + + +After creating the template, lets supply the vlans data and see how it looks! +``` +vlan_config = str(vlan_config.render(vlans=vlans)) +print(vlan_config) +``` + + +So far, we have been loading all the available data to the template. +What if you don’t want to load everything and are only interested in loading a part of the data? That’s when template filters come in, check it out in next part! + diff --git a/lessons/lesson-16/stage3/guide.md b/lessons/lesson-16/stage3/guide.md new file mode 100644 index 00000000..75eac062 --- /dev/null +++ b/lessons/lesson-16/stage3/guide.md @@ -0,0 +1,98 @@ +# Using Jinja for Configuration Templates +## Part 3 - Let try the if and set statements! + +Now that you have tried the `for` loop, lets up-level. In this part we will try `if` and `set` statement along with `for` loops. + +First, we want to start the Python interpreter and import `Environment` module from Jinja2 library: + +``` +python +from jinja2 import Environment +``` + + +Here we are redefining `interface`, the list of dictionaries we defined in part 2. + +``` +interfaces = [{'interface': 'ge-0/0/0', 'ip_address': '192.168.1.1'}, + {'interface': 'ge-0/0/1', 'ip_address': '10.10.1.1'}, + {'interface': 'fxp0', 'ip_address': '172.16.1.1'}] + +``` + + +In Part2, generated configurations for all interfaces in the list. But what if you are only interested in generating the configuration for the management IP address? That is when we use the Jinja2 filters. For this particular example we will be using the `if` condition. It is similar to the python `if` condition, except for the syntax. + +Below is the Jinja2 syntax for `if statement` for checking conditions: +``` +{% if condition %} + ... +{% endif %} +``` +In the following snippet we have used the `for` loop like in previous stages, but instead of directly printing out all the interfaces here we are checking if the interface value matches our management interface `fxp0`. If it does match, we substitute its value and the value of the corresponding ip address in the template using `render()`. + +``` +env = Environment(trim_blocks=True, lstrip_blocks=True) +ipaddr_template = env.from_string(''' +{% for item in interfaces %} +{% if item.interface == 'fxp0' %} +interfaces { + {{ item.interface }} { + unit 0 { + family inet { + address {{item.ip_address}}; + } + } + } +} +{% endif %} +{% endfor %}''') + +render_1 = ipaddr_template.render(interfaces=interfaces) +print(str(render_1)) + +``` + + + +The output shows that it just printed the entry of the management interface. Thus we learnt the power of `if` statements to filter out our data based on certain conditions. + +Now, what if we decide to change the management interface to `ge-0/0/0`. One approch is to change the `fxp0` to `ge-0/0/0` in the `if` statement. +A better approch is to define a variable called `mgmt_interface` and, change the value of this variable when we decide to change the management interface. + +Jinja2 uses set statement to define variable which can be used within the template. The syntax is defined below: + +``` +{% set variable_name: variable_value %} +``` + +In the snippet below: +`set_temp = '''{% set mgmt_interface = 'ge-0/0/0' %}` declares a variable `mgmt_interface` and sets its value to `ge-0/0/0`. +`{% if item.interface == mgmt_interface %}` checks if the item in the for loop has a key interface whose value is same as the value that we set for `mgmt_interface`. + +If the value is same, it loads the template with the corresponding data, if not, it skips that element of list `interfaces` and moves on to the next. + +``` +set_temp = '''{% set mgmt_interface = 'ge-0/0/0' %} +{% for item in interfaces %} +{% if item.interface == mgmt_interface %} +interfaces { + {{ item.interface }} { + unit 0 { + family inet { + address {{item.ip_address}}; + } + } + } +} +{% endif %} +{% endfor %}''' + +int_template = env.from_string(set_temp) +render_2 = int_template.render(interfaces=interfaces) + +print(str(render_2)) +``` + + +In the next stage, we'll dive deeper into using YAML files for defining variables for Jinja2 templates. diff --git a/lessons/lesson-16/stage4/guide.md b/lessons/lesson-16/stage4/guide.md new file mode 100644 index 00000000..36fee6f5 --- /dev/null +++ b/lessons/lesson-16/stage4/guide.md @@ -0,0 +1,78 @@ +# Using Jinja for Configuration Templates +## Part 4 - Jinja2 with YAML + +In the previous parts we have used a list of dictionaries for generating configs for multiple interfaces. +This is a very cumbersome way of modeling your data. Is there a better way for data serialiation? +Yes, YAML!!! YAML provides a human readable way for data serialization. +YAML provides a easy way of defining list and dictionaries. + +In this part we will go over how you can import data from a YAML file and render Jinja2 tempate. + +We have a yaml file already stored in the machine for you! Lets start by taking a look at it. +``` +cd /antidote/lessons/lesson-16/stage4/ +cat part4.yml +``` + + +It is so much easy to read our data now! Now lets start with our lesson then! +As you already know by now, our first step is to start the Python interpreter and import `Environment` module from Jinja2 library. +We will also import the `yaml` library and `pprint` for pretty printing our output. + +``` +python +from jinja2 import Environment +import yaml +from pprint import pprint +``` + + +The below snippet is used to import the data from the YAML file to our python code. `open()` function opens our yaml file in the `read` mode and assignes it to the variable `yaml_file`. Just note that here we have only provided the name of our yaml file as it is in the same directory as our python code, in case it is in a different folder then you have to give the exact file path to the `open()`. The data from the YAML file can then be easily imported into Python simply by using `yaml.load()` function. + +``` +yaml_file = open('part4.yml', 'r') +all_devices = yaml.load(yaml_file) +pprint(all_devices) +``` + + +Does this output look familier to you. Its a dictionary containing a list of dictionaries, same as what we were using in previous lessons! You already know what to do now! we start by creating a config template to set the `system hostname` and obtain the interface config. + +``` +env = Environment(trim_blocks=True, lstrip_blocks=True) +config_temp = env.from_string(''' +system { + host-name {{ device.hostname }}; +} +{% for item in device.interface %} +interfaces { + {{ item.name }} { + unit {{ item.unit }} { + family inet { + address {{ item.ip_address }}; + } + } + } +} +{% endfor %} +''') +``` + + +Once the template is defined we will render the config tempelate for each device specified in the YAML file. +Python `enumerate()` function keeps a count of loop index so that we can print the number of device we are looping over. +`%s` in the first print statement will take the value of `device_number` for the devices in `all_devices`. +In case you are wondering what is `print('-'*30)`, it is just to make the output more presenatable, you will see when you run the below snippet!! + +``` +for dev_number, device in enumerate(all_devices['devices'], 1): + render_1 = config_temp.render(device=device) + print('Configuration for Device %s' % (dev_number)) + print('-'*30) + print(str(render_1)) +``` + + +P.S. press `Enter` to exit out of the python `for` loop and see your results. + +So now in the next stage we will learn how to import multiple Jinja2 templates from different directories and use it in your script. We will also see how to `include` those imported templates in one main template which can then be used to configure the device. diff --git a/lessons/lesson-16/stage4/part4.yml b/lessons/lesson-16/stage4/part4.yml new file mode 100644 index 00000000..8e19049c --- /dev/null +++ b/lessons/lesson-16/stage4/part4.yml @@ -0,0 +1,19 @@ +--- +devices: + - hostname: QFX1 + interface: + - name: ge-0/0/1 + unit: 0 + ip_address: 192.168.1.1 + - name: ge-0/0/2 + unit: 0 + ip_address: 10.10.1.1 + + - hostname: QFX2 + interface: + - name: ge-0/0/1 + unit: 0 + ip_address: 192.168.1.2 + - name: ge-0/0/2 + unit: 0 + ip_address: 10.10.1.2 diff --git a/lessons/lesson-16/stage5/device_config.j2 b/lessons/lesson-16/stage5/device_config.j2 new file mode 100644 index 00000000..a998508b --- /dev/null +++ b/lessons/lesson-16/stage5/device_config.j2 @@ -0,0 +1,5 @@ +{% include 'static_route.j2' %} +{% include 'l3_interface.j2' %} +system { + host-name {{ hostname }}; +} diff --git a/lessons/lesson-16/stage5/dir1/static_route.j2 b/lessons/lesson-16/stage5/dir1/static_route.j2 new file mode 100644 index 00000000..8bffe918 --- /dev/null +++ b/lessons/lesson-16/stage5/dir1/static_route.j2 @@ -0,0 +1,5 @@ +routing-options { + static { + route {{route}} next-hop {{next_hop}}; + } +} diff --git a/lessons/lesson-16/stage5/dir2/l3_interface.j2 b/lessons/lesson-16/stage5/dir2/l3_interface.j2 new file mode 100644 index 00000000..0f98a936 --- /dev/null +++ b/lessons/lesson-16/stage5/dir2/l3_interface.j2 @@ -0,0 +1,9 @@ +interfaces { + {{ name }} { + unit {{ unit }} { + family inet { + address {{ ip_address }}; + } + } + } +} diff --git a/lessons/lesson-16/stage5/guide.md b/lessons/lesson-16/stage5/guide.md new file mode 100644 index 00000000..4817712f --- /dev/null +++ b/lessons/lesson-16/stage5/guide.md @@ -0,0 +1,83 @@ +# Using Jinja for Configuration Templates +## Part 5 - Jinja2 templates as external files + +You might be wondering that the template creation and loading the data is cool but what if you want to use the same template for multiple scripts or want to import multiple templates in the same script? In that case you can store a template in a .j2 file and then import that file in your script. +Let us see the below example: + +### Example: 1 + +We have already created a sample template file in sub-directory `dir1` for our use. Run the below snippet to view the template file. + +``` +cd /antidote/lessons/lesson-16/stage5/ +cat dir1/static_route.j2 +``` + + +Start the interactive python and import the `FileSystemLoader` and `Environment` for loading the Jinja2 template. The `env` allows you to use an external Jinja2 template. +``` +python +from jinja2 import FileSystemLoader, Environment +loader = FileSystemLoader('./dir1') +env = Environment(loader=loader, trim_blocks=True, lstrip_blocks=True) +``` + + +We will now store our template in `route_template` and provide the required values to it. Run the below snippet to see how it looks. +``` +route_template = env.get_template('static_route.j2') +render_route = route_template.render(route='172.28.0.0/16', + next_hop='10.13.106.1') +print(str(render_route)) + +``` + + +Quit the interactive python to view the other two templates that we are going to use for the next example. +``` +quit() +``` + + +### Example: 2 +Below is the `l3_interface.j2` template stored in dir2 sub-directory. + +``` +cat dir2/l3_interface.j2 +``` + + +Below is the `device_config.j2` template stored in our local directory. We will treat `device_config.j2` as our main template and include `l3_interface.j2` and `static_route.j2`. + +``` +cat device_config.j2 +``` + + +Notice the keyword `include`, it is used to include the other external template files into a Jinja2 template. Below is the syntax for `include`: + +``` +{% include 'your_external_template_filename' %} +``` + +``` +python +from jinja2 import FileSystemLoader, Environment +loader = FileSystemLoader(['.','./dir1','./dir2']) +env = Environment(loader=loader, trim_blocks=True, lstrip_blocks=True) + +device_template = env.get_template('device_config.j2') +render_device = device_template.render(route='172.28.0.0/16', + next_hop='10.13.106.1', + name='ge-0/0/0', + unit='0', + ip_address='10.13.106.2', + hostname='qfx1') + +print(str(render_device)) +``` + + + +Good Job! You are now ready to render your first network configuration template! +If you would like to provide Jinja2 tempalates and variables to PyEz and push these configs on to a remote Junos device, checkout out Intro to PyEZ lesson(coming soon)! diff --git a/lessons/lesson-16/syringe.yaml b/lessons/lesson-16/syringe.yaml index 96a64855..7e3f93de 100644 --- a/lessons/lesson-16/syringe.yaml +++ b/lessons/lesson-16/syringe.yaml @@ -3,6 +3,7 @@ lessonName: Using Jinja for Configuration Templates lessonID: 16 category: introductory disabled: true +tier: local topologyType: none @@ -14,5 +15,17 @@ utilities: stages: 1: - description: Basic variable replacement - labguide: https://raw.githubusercontent.com/nre-learning/antidote/master/lessons/lesson-16/stage1/guide.md + description: Introduction + labguide: https://raw.githubusercontent.com/ShrutiVPawaskar/antidote/master/lessons/lesson-16/stage1/guide.md + 2: + description: For Loops + labguide: https://raw.githubusercontent.com/ShrutiVPawaskar/antidote/master/lessons/lesson-16/stage2/guide.md + 3: + description: Let try the if and set statements! + labguide: https://raw.githubusercontent.com/ShrutiVPawaskar/antidote/master/lessons/lesson-16/stage3/guide.md + 4: + description: Jinja2 with YAML + labguide: https://raw.githubusercontent.com/ShrutiVPawaskar/antidote/master/lessons/lesson-16/stage4/guide.md + 5: + description: Jinja2 templates as external files + labguide: https://raw.githubusercontent.com/ShrutiVPawaskar/antidote/master/lessons/lesson-16/stage5/guide.md diff --git a/lessons/lesson-17/syringe.yaml b/lessons/lesson-17/syringe.yaml index ff78b992..a2cec165 100644 --- a/lessons/lesson-17/syringe.yaml +++ b/lessons/lesson-17/syringe.yaml @@ -2,8 +2,8 @@ lessonName: Version Control with Git lessonID: 17 category: introductory - topologyType: none +tier: prod utilities: - name: linux1 diff --git a/lessons/lesson-18/syringe.yaml b/lessons/lesson-18/syringe.yaml index 0cd38951..f52ffbd1 100644 --- a/lessons/lesson-18/syringe.yaml +++ b/lessons/lesson-18/syringe.yaml @@ -3,7 +3,7 @@ lessonName: End-to-End Network Testing with ToDD lessonID: 18 category: verification topologyType: custom -disabled: true +tier: ptr utilities: - name: todd1 diff --git a/lessons/lesson-19/syringe.yaml b/lessons/lesson-19/syringe.yaml index f41c4e3a..2f9774da 100644 --- a/lessons/lesson-19/syringe.yaml +++ b/lessons/lesson-19/syringe.yaml @@ -4,6 +4,7 @@ lessonID: 19 category: introductory topologyType: custom lessondiagram: https://raw.githubusercontent.com/nre-learning/antidote/master/lessons/lesson-19/lessondiagram.png +tier: prod utilities: - name: linux1 diff --git a/lessons/lesson-20/syringe.yaml b/lessons/lesson-20/syringe.yaml index 5ce679a6..6e8a2ea8 100644 --- a/lessons/lesson-20/syringe.yaml +++ b/lessons/lesson-20/syringe.yaml @@ -3,7 +3,7 @@ lessonName: Introduction to Junos lessonID: 20 category: introductory topologyType: custom -disabled: true +tier: ptr devices: - name: vqfx1 diff --git a/lessons/lesson-21/syringe.yaml b/lessons/lesson-21/syringe.yaml index a64e2f2a..f29c7697 100644 --- a/lessons/lesson-21/syringe.yaml +++ b/lessons/lesson-21/syringe.yaml @@ -4,7 +4,7 @@ lessonID: 21 category: troubleshooting lessondiagram: https://raw.githubusercontent.com/nre-learning/antidote/master/lessons/lesson-21/lessondiagram.png topologyType: custom -# disabled: true +tier: prod blackboxes: - name: asterisk diff --git a/lessons/lesson-22/syringe.yaml b/lessons/lesson-22/syringe.yaml index d981a159..34c25c0d 100644 --- a/lessons/lesson-22/syringe.yaml +++ b/lessons/lesson-22/syringe.yaml @@ -4,7 +4,7 @@ lessonID: 22 category: introductory topologyType: custom lessondiagram: https://raw.githubusercontent.com/nre-learning/antidote/master/lessons/lesson-22/lessondiagram.png -disabled: true +tier: ptr utilities: - name: linux1 diff --git a/lessons/lesson-23/syringe.yaml b/lessons/lesson-23/syringe.yaml index ac9ebdba..24dfea18 100644 --- a/lessons/lesson-23/syringe.yaml +++ b/lessons/lesson-23/syringe.yaml @@ -2,8 +2,8 @@ lessonName: Linux Basics lessonID: 23 category: introductory - topologyType: none +tier: prod utilities: - name: linux1 diff --git a/lessons/lesson-29/lessondiagram.png b/lessons/lesson-29/lessondiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..73501ab625d516953f8d7bc4aee019265095f7a6 GIT binary patch literal 186193 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�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

1EV!g|@!oTA`ZhsS?sTBrVs!&x+ygln(( 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 literal 0 HcmV?d00001 diff --git a/lessons/lesson-29/stage1/chapter1_eg1.robot b/lessons/lesson-29/stage1/chapter1_eg1.robot new file mode 100644 index 00000000..9f32bc19 --- /dev/null +++ b/lessons/lesson-29/stage1/chapter1_eg1.robot @@ -0,0 +1,22 @@ +*** Settings *** +Library substring.py + +*** Variables *** +${str1}= Robot +${str2}= Robot + +*** Test Cases *** +Check Equal1 + Should Be Equal As Strings ${str1} Framework + +Check Equal2 + Should Be Equal As Strings ${str1} robot + +Check Equal3 + Should Be Equal As Strings ${str1} ${str2} + +CheckSubstring1 + is a substring Jun Juniper + +CheckSubstring2 + is a substring June Juniper diff --git a/lessons/lesson-29/stage1/configs/vqfx1.txt b/lessons/lesson-29/stage1/configs/vqfx1.txt new file mode 100644 index 00000000..e661ab00 --- /dev/null +++ b/lessons/lesson-29/stage1/configs/vqfx1.txt @@ -0,0 +1,147 @@ + + 15.1X53-D60.4 + + vqfx1 + + $1$E./KlYWD$4IB3UHD/TK0rVbXchd0ex0 + + ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key + + + + + vrnetlab + 2001 + super-user + + $1$PvaswVKY$Nz5ELIzEL9M21FxSWAKdd1 + + + + + + allow + + + + + + + + + 8080 + + + + + + + * + + any + + + + + messages + + any + + + + authorization + + + + + interactive-commands + + interactive-commands + + + + + + + juniper + + juniper + commercial + + + + chef + + juniper + commercial + + + + + + + em0 + + 0 + + +

+ 10.0.0.15/24 +
+ + + + + + em3 + + 0 + + +
+ 10.31.0.11/24 +
+
+
+
+
+ + em4 + + 0 + + +
+ 10.12.0.11/24 +
+
+
+
+
+ + + + default + + + + + + + 64001 + + + + + + default + + + + + + default + 1 + + + \ No newline at end of file diff --git a/lessons/lesson-29/stage1/guide.md b/lessons/lesson-29/stage1/guide.md new file mode 100644 index 00000000..ee199ed0 --- /dev/null +++ b/lessons/lesson-29/stage1/guide.md @@ -0,0 +1,149 @@ +# Chapter 1 - Introduction to Robot Framework + +Robot Framework is a Python based test automation framework, which is extensively used by the mobile, web, and embedded systems industry to perform acceptance testing. It provides a simple interface to write test-cases that can be arranged into a test-suite and is easy to implement. + +Robot is a `keyword-driven` testing framework, where all the actions and functions of the test suite are performed using simple, human-understandable keywords. + +A generic architecture of the Robot framework is shown in the lesson diagram. + +Reference: [Robot Framework User Guide](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#id413) + +Let's move on to the various concepts used in Robot Framework + +--- + +## Anatomy of a Robot file +A typical Robot file is shown below: +>``` +>*** Settings *** +>Library myLibrary.py +> +>*** Variables *** +>${name1}= Jane +>${name2}= Jane Smith +>@{namelist}= Steve Walt Craig Zac +>&{namedict}= +> +>*** Keywords *** +>Print Log +> Log ${name} +> +>*** Test Cases *** +>Check Name +> Should Be Equal ${name1} Jane +>``` + +The different sections `Settings`, `Variables`, `Keywords`, and `Testcases` are called *tables*. They are a way to arrange the different components of Robot in a neat, orderly manner. + +### Settings +This section is used to import standard libaries, external libraries, resource files, variable files, and Setup/Teardown settings. The purpose of these libraries and files has been explained in the later sections. + +### Variables +This section defines the variables used in the test cases. There are four types of variables: + +* *Scalar variable*: A scalar variable is replaced by its value in test-cases. They are mostly used to hold strings, but they can also hold objects like lists. They are represented using the variable identifier `$`. Eg: +>``` +>*** Variables *** +>${NAME} Jake Doyle +>``` + +* *List variables*: Used to store lists (Eg: Python lists). The list variables can be used to reference the whole list or can be used to access individual list elements using the index. They are represented using the variable identifier `@`. Eg: +>``` +>*** Variables *** +>@{NAMES} Jake Tinny Des +>``` + +* *Dictionary variables*: Used to store dictionary-like objects (like Python dict()), and they are referenced using the identifier `&`. Eg: + +>``` +>*** Variables *** +>&{Employees} firstname=Jake lastname=Doyle +>``` + +* *Environment variables*: Used to store string environment variables, and are referenced using the identifier `%`. Eg: +>``` +>*** Test Cases *** +>Log %{HOME} +>``` + + +### Keywords + +Keywords are used to implement the real testing capability of the Robot framework. These keywords are provided by various test libraries which are a part of the Robot Ecosystem. These libraries, which expose keywords to the robot files are of the following types: + * Standard Library - Consists of a set of libraries come bundled-in as part of the Robot Framework. Example: OperatingSystem, Collections, DateTime etc. + * External Library - Can be downloaded using pip. Example: Android library, HTTP library etc. + * Private Library - Can be a self created Python or Java file. Example: JunosDevice.py, a private library, described in stage2 of this tutorial. + * Built-in keyword Library - This is a part of the standard library which provides a set of frequently used generic keywords used for string comparison, logging, etc. + +To use the keywords defined by the standard, external, and private libraries, the respective libraries first need to be imported in the Settings table of a Robot file. Built-in keywords can be used out-of-the-box without the need to import any library in the *Settings* section. Also, it should be noted that the keywords behave like functions - they can take in arguments and can return values back. + +A few examples of keywords are - ++ Built-in keywords +>``` +>Should Be Equal Jane John +>``` +This built-in keyword `Should Be Equal` will check if the next two arguments are the same, and will throw an Exception if they are unequal. + ++ Private library keywords + +Suppose we have a custom Python file, which contains the below function - +>``` +>def is_a_substring(str1,str2) +>``` +This function maps into the keyword `Is A Substring` automatically, and can be invoked in Robot test-cases as below - +>``` +>Is A Substring Jane Janet +>``` + +### Test Cases +This section contains the test-cases we would like to execute, using the keywords, variables, and the libraries that we imported earlier. + +The test cases are executed in the same order that they occur in the test-file. + +In the below example, `Check Name` is the name of the test case, which uses the built-in keyword `Should Be Equal` to compare two strings - the scalar variable name1, and "Jane". + +>``` +>*** Test Cases *** +>Check Name +> Should Be Equal ${name1} Jane +>``` + +### General Syntax rules + +1. There should be atleast two spaces between the following: + - Keywords and Keywords + - Keywords and Arguments + - Arguments and Arguments +2. Keywords and variables are case-insensitive + +--- + +## Running your first Robot file + +In our first example, we have a Robot file `chapter1_eg1.robot`, and a python file `substring.py`. + +Let's examine our python file `substring.py` - +``` +cat /antidote/lessons/lesson-29/stage1/substring.py +``` + + +It contains a single function `is_a_substring` that takes in two strings arguments - str1 and str1. It then returns True if str1 is a substring of str2. + +Let's checkout our Robot file now - +``` +cat /antidote/lessons/lesson-29/stage1/chapter1_eg1.robot +``` + + +Under the Settings, we import our python file `substring.py` as a Library. + +We have five test-cases in total, and these will be executed one after the other. The first three test cases perform string comparison, while the last two execute the substring function. + +We'll go ahead and start our test-cases - +``` +robot /antidote/lessons/lesson-29/stage1/chapter1_eg1.robot +``` + + +As expected, test-cases `Check Equal1`, `Check Equal2`, `Check Substring2` fails, and `Check Equal1`, `Check Substring1` passes. Since all the test-cases did not pass, the test-suite result is "Fail". \ No newline at end of file diff --git a/lessons/lesson-29/stage1/substring.py b/lessons/lesson-29/stage1/substring.py new file mode 100644 index 00000000..b6a32b38 --- /dev/null +++ b/lessons/lesson-29/stage1/substring.py @@ -0,0 +1,3 @@ +def is_a_substring(str1, str2): + if str1 not in str2: + raise Exception("{} is not a substring of {}".format(str1,str2)) diff --git a/lessons/lesson-29/stage2/JunosDevice.py b/lessons/lesson-29/stage2/JunosDevice.py new file mode 100644 index 00000000..2ac59b95 --- /dev/null +++ b/lessons/lesson-29/stage2/JunosDevice.py @@ -0,0 +1,31 @@ +from jnpr.junos import Device + +class JunosDevice(object): + + def __init__(self): + self.device = None + + def connect_device(self,host, user, password): + self.device = Device(host, user=user, password=password, port=22) + self.device.open() + + def gather_device_info(self): + df = dict(self.device.facts) + device_facts = { + "os_version": df["version"], + "serialnumber": df["serialnumber"], + "model": df["model"], + "hostname": df["hostname"] + } + return device_facts + + def close_device(self): + self.device.close() + + def get_hostname(self): + facts = self.gather_device_info() + return facts["hostname"] + + def get_model(self): + facts = self.gather_device_info() + return facts["model"] diff --git a/lessons/lesson-29/stage2/chapter2_eg1.robot b/lessons/lesson-29/stage2/chapter2_eg1.robot new file mode 100644 index 00000000..c790a2bd --- /dev/null +++ b/lessons/lesson-29/stage2/chapter2_eg1.robot @@ -0,0 +1,15 @@ +*** Settings *** +Library JunosDevice.py + +*** Test Cases *** +Check Hostname + Connect Device host=${HOST} user=${USER} password=${PASSWORD} + ${hostname}= Get Hostname + Should Be Equal As Strings ${hostname} vqfx1 + Close Device + +Check Model + Connect Device host=${HOST} user=${USER} password=${PASSWORD} + ${model}= Get Model + Should Be Equal As Strings ${model} VQFX-10000 + Close Device diff --git a/lessons/lesson-29/stage2/configs/vqfx1.txt b/lessons/lesson-29/stage2/configs/vqfx1.txt new file mode 100644 index 00000000..e661ab00 --- /dev/null +++ b/lessons/lesson-29/stage2/configs/vqfx1.txt @@ -0,0 +1,147 @@ + + 15.1X53-D60.4 + + vqfx1 + + $1$E./KlYWD$4IB3UHD/TK0rVbXchd0ex0 + + ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key + + + + + vrnetlab + 2001 + super-user + + $1$PvaswVKY$Nz5ELIzEL9M21FxSWAKdd1 + + + + + + allow + + + + + + + + + 8080 + + + + + + + * + + any + + + + + messages + + any + + + + authorization + + + + + interactive-commands + + interactive-commands + + + + + + + juniper + + juniper + commercial + + + + chef + + juniper + commercial + + + + + + + em0 + + 0 + + +
+ 10.0.0.15/24 +
+
+
+
+
+ + em3 + + 0 + + +
+ 10.31.0.11/24 +
+
+
+
+
+ + em4 + + 0 + + +
+ 10.12.0.11/24 +
+
+
+
+
+
+ + + default + + + + + + + 64001 + + + + + + default + + + + + + default + 1 + + +
\ No newline at end of file diff --git a/lessons/lesson-29/stage2/guide.md b/lessons/lesson-29/stage2/guide.md new file mode 100644 index 00000000..7b332631 --- /dev/null +++ b/lessons/lesson-29/stage2/guide.md @@ -0,0 +1,127 @@ +# Chapter 2 - Writing Testcases for Junos Devices + +Now that we have covered how to write a simple test case using Robot framework, let's use our knowledge to form test cases that verify the state of Juniper devices. + +## Learning Objectives +1. Understand the environment used for communicating with Junos devices +2. Use keywords from Junos private library +3. Pass command line arguments to Robot, and access them from inside the test case +3. Pass arguments for private functions/keywords + +----- +## Topology & Environment +For our next example, we have a vQFX (virtual QFX) which is firewall, connected to a Linux machine. We will run our test-cases using Robot on the Linux machine, and talk to the vQFX to fetch information like its model name, OS version, hostname, and serial number. + +The Robot framework will use the PyEZ library to communicate with Junos devices. The PyEZ library is a netconf wrapper written in Python and can be used to communicate with devices running Junos. PyEZ can be installed on Linux based machines using the command `pip install junos-eznc` + +Similar to the example in our previous chapter, we will create a python file(Robot private library), where we will define functions that use PyEZ library to open a connection to our device, fetch the necessary information, and close the connection to our device. + +Execute the below command to open the file *JunosDevice.py* +``` +cat /antidote/lessons/lesson-29/stage2/JunosDevice.py +``` + + + +Let's examine the file *JunosDevice.py* and understand the different functions. The main functions we will use are the below: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionDescriptionKeyword in Robot
connect_deviceInitiates a connection to the Juniper deviceConnect Device
gather_device_infoFetches device facts from the JuniperGather Device Info
close_deviceGracefully closes the PyEZ connection, once an operation is completedClose Device
get_hostnameFetch hostname from the deviceGet Hostname
get_modelFetch model name from the deviceGet Model
+ +------ + +Observe that the python functions are exposed as Robot keywords inside the Robot files. Also note that the robot keywords, unlike the python functions, don't contain the underscore and are case insensitive. If you don't understand the implementation of these functions, do not worry! You only need to understand the functionality to use them in the Robot Framework. + +*We also have a PyEZ primer tutorial on NRE-Labs which you can refer, in case you would like to learn more about the awesome PyEZ library.* + +---- +## Test Case using Junos Device + +Okay, let's start developing our test cases! We will write two test cases, one for fetching and verifying the hostname, and another for the device model. We will use the keywords from our private library, *JunosDevice.py*, to achieve this. + +Let's examine our Robot test-case file `chapter2_eg1.robot`. Execute the below command to open the file *chapter2_eg1.robot* +``` +cat /antidote/lessons/lesson-29/stage2/chapter2_eg1.robot +``` + + +In the `Settings` table, we define our private custom library *JunosDevice.py*. + +>``` +>*** Settings *** +>Library JunosDevice.py +>``` + + +In the `Test Cases` table, we have the `Check Hostname` and `Check Model` test cases. + +>``` +>Check Hostname +> Connect Device host=${HOST} user=${USER} password=${PASSWORD} +> ${hostname}= Get Hostname +> Should Be Equal As Strings ${hostname} vqfx1 +> Close Device +>``` +*The Check Hostname test-case verifies if the hostname of the device is 'vqfx1'.* + +>``` +>Check Model +> Connect Device host=${HOST} user=${USER} password=${PASSWORD} +> ${model}= Get Model +> Should Be Equal As Strings ${model} VQFX-10000 +> Close Device +>``` +*The Check Model test-case verifies if the device model name is VQFX-10000.* + +Here, each test case consists of four keywords - `Connect Device`, `Get Hostname`, `Should Be Equal As Strings`, and `Close Device` + +`Connect Device`, `Get Hostname`, and `Close Device` are keywords which are picked from our private Library *JunosDevice.py*. + +The keyword `Should Be Equal As Strings` is a "built-in" keyword that can be used in any Robot test cases, and does not explicitly require any library to be imported. This keyword checks if two strings variables passed to it are the same. + +The IP address of the vQFX, the username, and password for login, are provided to Robot by passing as command line arguments. These arguments can be accessed within the .robot file by referencing them using their names, as shown below. + +>``` +>Connect Device host=${HOST} user=${USER} password=${PASSWORD} +>``` + +Execute this script by running the below command (note the command line variables passed using the flag --variable) +``` +robot --variable HOST:vqfx1 --variable USER:root --variable PASSWORD:VR-netlab9 /antidote/lessons/lesson-29/stage2/chapter2_eg1.robot +``` + + +If both the test-cases succeed, the entire test-suite passes. If any of them fails, then the corresponding test-case raises an Exception which displays why the test case failed. + +To get a detailed report, we can also inspect the files log.html, report.html, and output.html, which are auto-generated for each run. \ No newline at end of file diff --git a/lessons/lesson-29/stage3/JunosDevice.py b/lessons/lesson-29/stage3/JunosDevice.py new file mode 100644 index 00000000..2ac59b95 --- /dev/null +++ b/lessons/lesson-29/stage3/JunosDevice.py @@ -0,0 +1,31 @@ +from jnpr.junos import Device + +class JunosDevice(object): + + def __init__(self): + self.device = None + + def connect_device(self,host, user, password): + self.device = Device(host, user=user, password=password, port=22) + self.device.open() + + def gather_device_info(self): + df = dict(self.device.facts) + device_facts = { + "os_version": df["version"], + "serialnumber": df["serialnumber"], + "model": df["model"], + "hostname": df["hostname"] + } + return device_facts + + def close_device(self): + self.device.close() + + def get_hostname(self): + facts = self.gather_device_info() + return facts["hostname"] + + def get_model(self): + facts = self.gather_device_info() + return facts["model"] diff --git a/lessons/lesson-29/stage3/chapter3_eg1.robot b/lessons/lesson-29/stage3/chapter3_eg1.robot new file mode 100644 index 00000000..7e42559f --- /dev/null +++ b/lessons/lesson-29/stage3/chapter3_eg1.robot @@ -0,0 +1,25 @@ +*** Settings *** +Library JunosDevice.py + + +*** Keywords *** +Log Facts + &{facts}= Gather Device Info + :FOR ${key} IN @{facts.keys()} + \ Log ${facts["${key}"]} + +Validate Facts + &{facts}= Gather Device Info + Should Be Equal As Strings ${facts["hostname"]} vqfx1 + Should Be Equal As Strings ${facts["model"]} VQFX-10000 + +*** Test Cases *** +Log Device Facts + Connect Device host=${HOST} user=${USER} password=${PASSWORD} + Log Facts + Close Device + +Verify Facts + Connect Device host=${HOST} user=${USER} password=${PASSWORD} + Validate Facts + Close Device diff --git a/lessons/lesson-29/stage3/chapter3_eg2.robot b/lessons/lesson-29/stage3/chapter3_eg2.robot new file mode 100644 index 00000000..66c20ce0 --- /dev/null +++ b/lessons/lesson-29/stage3/chapter3_eg2.robot @@ -0,0 +1,8 @@ +*** Settings *** +Resource chapter3_resource.robot +Test Setup Setup Actions +Test Teardown Teardown Actions + +*** Test Cases *** +Verify Facts + Validate Facts diff --git a/lessons/lesson-29/stage3/chapter3_resource.robot b/lessons/lesson-29/stage3/chapter3_resource.robot new file mode 100644 index 00000000..2f7cc29e --- /dev/null +++ b/lessons/lesson-29/stage3/chapter3_resource.robot @@ -0,0 +1,24 @@ +*** Settings *** +Documentation This is a resource file +Library JunosDevice.py + +*** Variables *** +${host}= vqfx1 +${user}= root +${password}= VR-netlab9 +${hostname}= vqfx1 +${model}= VQFX-10000 + +*** Keywords *** +Setup Actions + Log Setup Actions done here + Connect Device host=${host} user=${user} password=${password} + +Teardown Actions + Log Teardown Actions done here + Close Device + +Validate Facts + &{facts}= Gather Device Info + Should Be Equal As Strings ${facts["hostname"]} ${hostname} + Should Be Equal As Strings ${facts["model"]} ${model} diff --git a/lessons/lesson-29/stage3/configs/vqfx1.txt b/lessons/lesson-29/stage3/configs/vqfx1.txt new file mode 100644 index 00000000..e661ab00 --- /dev/null +++ b/lessons/lesson-29/stage3/configs/vqfx1.txt @@ -0,0 +1,147 @@ + + 15.1X53-D60.4 + + vqfx1 + + $1$E./KlYWD$4IB3UHD/TK0rVbXchd0ex0 + + ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key + + + + + vrnetlab + 2001 + super-user + + $1$PvaswVKY$Nz5ELIzEL9M21FxSWAKdd1 + + + + + + allow + + + + + + + + + 8080 + + + + + + + * + + any + + + + + messages + + any + + + + authorization + + + + + interactive-commands + + interactive-commands + + + + + + + juniper + + juniper + commercial + + + + chef + + juniper + commercial + + + + + + + em0 + + 0 + + +
+ 10.0.0.15/24 +
+
+
+
+
+ + em3 + + 0 + + +
+ 10.31.0.11/24 +
+
+
+
+
+ + em4 + + 0 + + +
+ 10.12.0.11/24 +
+
+
+
+
+
+ + + default + + + + + + + 64001 + + + + + + default + + + + + + default + 1 + + +
\ No newline at end of file diff --git a/lessons/lesson-29/stage3/guide.md b/lessons/lesson-29/stage3/guide.md new file mode 100644 index 00000000..10378f3c --- /dev/null +++ b/lessons/lesson-29/stage3/guide.md @@ -0,0 +1,97 @@ +# Chapter 3 - Developing Test cases using Robot framework + +Now that we have covered how to write robot files which verify the state of Juniper devices, let's delve into more advanced concepts and discuss some best practices. + +## Defining User Keywords + +While writing more complex network validation robot files, you'll soon realize that you end up repeating and rewriting some fixed series of keywords and logical statements over and over again. These are usually common across all the test cases. To avoid doing this and also to decrease the overall length of the robot file, we define *user keywords*. User keywords are new, high-level keywords which club together multiple preexisting keywords and logical statements. In a robot file, the user keywords are defined under the *Keywords* table. The use of user keywords has been demonstrated in Test Case 1. + +## Using Resource Files + +All the *variables* and *user keywords* defined inside a robot file can only be used within the file in which they were created. In order to reuse these variables and keywords across multiple robot files, we create resource files. Resource files have the same syntax as robot files, the only difference being, they cannot contain the *Test Case* table. Also, the *Settings* table can only contain the imported files (Library, Resource, Variables) and the documentation. The use of separate resource files also helps in separating test cases from auxiliary data. This helps in keeping the test cases file uncluttered and better organized, with only the relevant test cases being a part of it. Resource files can be imported by the other robot files inside the *Settings* table using the *resource* setting. The use of user keywords has been illustrated in Test Case 2. + +## Variable Files + +Variable files, like resource files, can be used to share variables across multiple test case robot files. Variable files are implemented as a Python module. All the variables declared inside a Python module can be directly imported by a robot file, under the settings table with the variable keyword. For more information on Variable files, refer [More Info](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#variable-files) + +## Setup and Teardown + +The robot framework supports two types of setup and teardown functions - "Test Setup", "Test Teardown" and "Suite Setup", "Suite Teardown". The keywords defined under the *Test* Setup and Teardown settings are run before and after every test case. The keywords defined under the *Suite* Setup and Teardown settings are run before and after every test suite(multiple test cases). Consider a scenario where NETCONF/SSH connection is initialized and terminated, before and after every test case. In this case, the size of the robot file can be reduced by using the Setup and Teardown settings, as required. +\ +\ +Now it's time to roll up your sleeves and jump on to tackling the final two test cases of this tutorial. Are you as thrilled as I am? Let's roll! + +## Test Case 1 +Let's examine our Robot test-case file `chapter3_eg1.robot`. Execute the below command to open the file *chapter3_eg1.robot* +``` +cat /antidote/lessons/lesson-29/stage3/chapter3_eg1.robot +``` + + +You must have noticed the new *Keywords* table in our robot file. Inside this table, two new keywords have been defined, Log Facts and Validate Facts. Allow me to explain each of these separately. + +>``` +>Log Facts +> &{facts}= Gather Device Info +> :FOR ${key} IN @{facts.keys()} +> \ Log ${facts["${key}"]} +>``` + +In this example, the *Gather Device Info* keyword returns a python dictionary, consisting of some basic device properties like serial number and the hostname, in a key-value format. Notice that we are using a FOR loop to parse a python dictionary which was stored in the *facts* variable. Observe that the syntax declaring a FOR loop in the robot framework is similar to that in Python. In the end, we are using the *Log* keyword to log the values for every key in the returned dictionary. All these functions defined under the *Log Facts* keyword get executed whenever this keyword is called inside the robot file. + +Let's now examine the second user keyword in the settings table. + +>``` +>Validate Facts +> &{facts}= Gather Device Info +> Should Be Equal As Strings ${facts["hostname"]} vqfx1 +> Should Be Equal As Strings ${facts["model"]} VQFX-10000 +>``` + +In this user keyword, we are first gathering the device information, storing it in a variable and then comparing whether the value pertaining to the *hostname* key of *facts* variable is equal to the string "vqfx1" or not. We do the same for the *model* key of *facts* variable. + +Let's now have a look at the test cases: + +>``` +>*** Test Cases *** +>Log Device Facts +> Connect Device host=${HOST} user=${USER} password=${PASSWORD} +> Log Facts +> Close Device +> +>Verify Facts +> Connect Device host=${HOST} user=${USER} password=${PASSWORD} +> Validate Facts +> Close Device +>``` + +Notice that both of the test cases are using the previously defined user keywords from the Keywords section of the robot file. Execute these test cases by running the robot script using the following command (note the command line variables passed using the flag --variable) +``` +robot --variable HOST:vqfx1 --variable USER:root --variable PASSWORD:VR-netlab9 /antidote/lessons/lesson-29/stage3/chapter3_eg1.robot +``` + + + + +## Test Case 2 + +Let's examine our Robot test-case file `chapter3_eg2.robot`. Execute the below command to open the file *chapter3_eg2.robot* +``` +cat /antidote/lessons/lesson-29/stage3/chapter3_eg2.robot +``` + + +Note that the robot file has only got two sections and inside the *Settings* section, a separate robot file has been imported using the *Resource* setting. This file is called the resource file. Also observe that there are two other settings present inside the *Settings* table, namely "Test Setup" and "Test Teardown". These settings call keywords which have been originally defined in the resource file. + +Let's now check out our resource file. Execute the below command to open the file *chapter3_resource.robot* +``` +cat /antidote/lessons/lesson-29/stage3/chapter3_resource.robot +``` + + +Notice that this time, we have declared all the required variables in the "Variables" section of the resource file. What this means is that we will no longer have to pass the variable names while running the robot file. Also, observe that three user keywords have been defined under the "Keywords" section in the resource file. Two of these keywords, "Setup Actions" and "Teardown Actions", have been used by the Setup and Teardown settings of our master robot file. The third keyword, Validate Facts, has been used by a test case inside the robot file. Execute the robot script by running the below command +``` +robot /antidote/lessons/lesson-29/stage3/chapter3_eg2.robot +``` + + diff --git a/lessons/lesson-29/substring.py b/lessons/lesson-29/substring.py deleted file mode 100644 index dd3f63f4..00000000 --- a/lessons/lesson-29/substring.py +++ /dev/null @@ -1,3 +0,0 @@ -def is_a_substring(str1, str2): - if str1 not in str2: - raise Exception(f"{str1} is not a substring of {str2}") diff --git a/lessons/lesson-29/syringe.yaml b/lessons/lesson-29/syringe.yaml new file mode 100644 index 00000000..211cdae7 --- /dev/null +++ b/lessons/lesson-29/syringe.yaml @@ -0,0 +1,41 @@ +--- +lessonName: Robot Framework for Automation Testing +lessonID: 29 +category: introductory +lessondiagram: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/lessondiagram.png +tier: prod + +topologyType: custom + +utilities: +- name: linux1 + image: antidotelabs/utility + sshuser: antidote + sshpassword: antidotepassword + +devices: +- name: vqfx1 + image: antidotelabs/vqfxspeedy:snap1 + sshuser: root + sshpassword: VR-netlab9 + +connections: +- a: vqfx1 + b: linux1 + subnet: 10.1.0.0/24 + +stages: + 1: + description: Introduction to Robot Framework + labguide: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/stage1/guide.md + + 2: + description: Writing Testcases for Junos Devices + labguide: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/stage2/guide.md + configs: + vqfx1: stage2/configs/vqfx1.txt + 3: + description: Developing Testcases using Robot framework + labguide: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/stage3/guide.md + configs: + vqfx1: stage3/configs/vqfx1.txt diff --git a/platform/prod/syringe.yml b/platform/prod/syringe.yml index ea236d56..2f923179 100644 --- a/platform/prod/syringe.yml +++ b/platform/prod/syringe.yml @@ -79,10 +79,10 @@ subjects: --- apiVersion: extensions/v1beta1 kind: Deployment -metadata: +metadata: name: syringe namespace: prod -spec: +spec: replicas: 1 revisionHistoryLimit: 3 template: From 271099d1173467efd8d354ec98454c411ac78476 Mon Sep 17 00:00:00 2001 From: saimkhan92 Date: Tue, 6 Nov 2018 15:03:15 -0800 Subject: [PATCH 3/8] added robot tutorial to change logs --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0c3e62f..e365026f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - Adding Lesson-30 Working with Salt [#114](https://github.com/nre-learning/antidote/pull/114) - Adding Lesson-16 Jinja2 Templates [#121](https://github.com/nre-learning/antidote/pull/121) +- Adding Lesson-29 Robot Framework [#125](https://github.com/nre-learning/antidote/pull/125) + ### Other From 8c1f6da9ff15f9bd649061fe8312da9975dadedf Mon Sep 17 00:00:00 2001 From: saimkhan92 Date: Tue, 6 Nov 2018 15:21:27 -0800 Subject: [PATCH 4/8] added contributors to stage1 guide --- lessons/lesson-29/stage1/guide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lessons/lesson-29/stage1/guide.md b/lessons/lesson-29/stage1/guide.md index ee199ed0..360f7679 100644 --- a/lessons/lesson-29/stage1/guide.md +++ b/lessons/lesson-29/stage1/guide.md @@ -1,4 +1,6 @@ # Chapter 1 - Introduction to Robot Framework +**Contributed by: [@saimkhan92](https://github.com/saimkhan92) and [@lara29](https://github.com/lara29)** + Robot Framework is a Python based test automation framework, which is extensively used by the mobile, web, and embedded systems industry to perform acceptance testing. It provides a simple interface to write test-cases that can be arranged into a test-suite and is easy to implement. From e30212e24b35b7f99dddeeea7fb65120f0a4ce3b Mon Sep 17 00:00:00 2001 From: Lakshmi Rajan Date: Tue, 6 Nov 2018 15:36:00 -0800 Subject: [PATCH 5/8] Modified guide.md --- lessons/lesson-29/stage1/guide.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lessons/lesson-29/stage1/guide.md b/lessons/lesson-29/stage1/guide.md index 360f7679..1a25841f 100644 --- a/lessons/lesson-29/stage1/guide.md +++ b/lessons/lesson-29/stage1/guide.md @@ -12,6 +12,7 @@ Reference: [Robot Framework User Guide](http://robotframework.org/robotframework Let's move on to the various concepts used in Robot Framework + --- ## Anatomy of a Robot file @@ -110,6 +111,7 @@ In the below example, `Check Name` is the name of the test case, which uses the > Should Be Equal ${name1} Jane >``` + ### General Syntax rules 1. There should be atleast two spaces between the following: @@ -118,6 +120,7 @@ In the below example, `Check Name` is the name of the test case, which uses the - Arguments and Arguments 2. Keywords and variables are case-insensitive + --- ## Running your first Robot file @@ -142,10 +145,12 @@ Under the Settings, we import our python file `substring.py` as a Library. We have five test-cases in total, and these will be executed one after the other. The first three test cases perform string comparison, while the last two execute the substring function. -We'll go ahead and start our test-cases - +We'll go ahead and start our test-cases: + ``` robot /antidote/lessons/lesson-29/stage1/chapter1_eg1.robot ``` + -As expected, test-cases `Check Equal1`, `Check Equal2`, `Check Substring2` fails, and `Check Equal1`, `Check Substring1` passes. Since all the test-cases did not pass, the test-suite result is "Fail". \ No newline at end of file +As expected, test-cases `Check Equal1`, `Check Equal2`, `Check Substring2` fails, and `Check Equal1`, `Check Substring1` passes. Since all the test-cases did not pass, the test-suite result is "Fail". From 2fb03db6ffc7fe61256cd90d6a603b9878718143 Mon Sep 17 00:00:00 2001 From: Lakshmi Rajan Date: Tue, 6 Nov 2018 15:42:45 -0800 Subject: [PATCH 6/8] Updated lesson 3 title in syringe.yml --- lessons/lesson-29/syringe.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lessons/lesson-29/syringe.yaml b/lessons/lesson-29/syringe.yaml index 211cdae7..2e0e9c00 100644 --- a/lessons/lesson-29/syringe.yaml +++ b/lessons/lesson-29/syringe.yaml @@ -35,7 +35,7 @@ stages: configs: vqfx1: stage2/configs/vqfx1.txt 3: - description: Developing Testcases using Robot framework + description: Robot Framework - Best Practices labguide: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/stage3/guide.md configs: vqfx1: stage3/configs/vqfx1.txt From fcd6cb17967d01201cb208b9890019854baf3bc2 Mon Sep 17 00:00:00 2001 From: Lakshmi Rajan Date: Tue, 6 Nov 2018 15:44:17 -0800 Subject: [PATCH 7/8] Updated lesson 3 title in guide.md --- lessons/lesson-29/stage3/guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lessons/lesson-29/stage3/guide.md b/lessons/lesson-29/stage3/guide.md index 10378f3c..c22b98c1 100644 --- a/lessons/lesson-29/stage3/guide.md +++ b/lessons/lesson-29/stage3/guide.md @@ -1,4 +1,4 @@ -# Chapter 3 - Developing Test cases using Robot framework +# Chapter 3 - Robot Framework - Best Practices Now that we have covered how to write robot files which verify the state of Juniper devices, let's delve into more advanced concepts and discuss some best practices. From dc5d131d9b622f052f48c7c976dc8743dea0fe98 Mon Sep 17 00:00:00 2001 From: Lakshmi Rajan Date: Fri, 9 Nov 2018 08:19:55 -0800 Subject: [PATCH 8/8] Adding vqfx config file to the stage 1 lesson --- lessons/lesson-29/syringe.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lessons/lesson-29/syringe.yaml b/lessons/lesson-29/syringe.yaml index 2e0e9c00..fc32a43c 100644 --- a/lessons/lesson-29/syringe.yaml +++ b/lessons/lesson-29/syringe.yaml @@ -28,6 +28,8 @@ stages: 1: description: Introduction to Robot Framework labguide: https://raw.githubusercontent.com/lara29/antidote/master/lessons/lesson-29/stage1/guide.md + configs: + vqfx1: stage1/configs/vqfx1.txt 2: description: Writing Testcases for Junos Devices