{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# functions: print_result\n", "\n", "[print_result](../api/functions.rst#nornir_utils.plugins.functions.print_result) is a function that takes a result and prints it. For instance, imagine the following code:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from nornir import InitNornir\n", "\n", "def dummy_task(task):\n", " return \"hi!!!\"\n", "\n", "nr = InitNornir(\n", " inventory={\n", " \"plugin\":\"YAMLInventory\",\n", " \"options\": {\n", " \"host_file\": \"data/hosts.yaml\",\n", " \"group_file\": \"data/groups.yaml\",\n", " \"defaults_file\": \"data/defaults.yaml\",\n", " }\n", " }\n", ")\n", "\n", "result = nr.run(task=dummy_task)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we could print the result easily with the `print_result` function: " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[36mdummy_task**********************************************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev1.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv dummy_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END dummy_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev2.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv dummy_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END dummy_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev3.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv dummy_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END dummy_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev4.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv dummy_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END dummy_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev5.no_group ** changed : False *********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv dummy_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END dummy_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m" ] } ], "source": [ "from nornir_utils.plugins.functions import print_result\n", "\n", "print_result(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Printing specific data\n", "\n", "If the task returns different pieces of information you can also select which ones to print. For instance:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[36mtask_with_data******************************************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev1.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv task_with_data ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mJar Jar Binks\u001b[0m\n", "\u001b[0mhawaiian pizza\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END task_with_data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev2.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv task_with_data ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mJar Jar Binks\u001b[0m\n", "\u001b[0mhawaiian pizza\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END task_with_data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev3.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv task_with_data ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mJar Jar Binks\u001b[0m\n", "\u001b[0mhawaiian pizza\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END task_with_data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev4.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv task_with_data ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mJar Jar Binks\u001b[0m\n", "\u001b[0mhawaiian pizza\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END task_with_data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev5.no_group ** changed : False *********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv task_with_data ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mJar Jar Binks\u001b[0m\n", "\u001b[0mhawaiian pizza\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END task_with_data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m" ] } ], "source": [ "from nornir.core.task import Result\n", "\n", "def task_with_data(task):\n", " return Result(host=task.host, sw_char=\"Jar Jar Binks\", food=\"hawaiian pizza\", OS=\"windows\")\n", "\n", "\n", "fav_result = nr.run(task=task_with_data)\n", "\n", "print_result(fav_result, vars=[\"sw_char\", \"food\"]) # print only these vars" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Severity\n", "\n", "You can also ask `print_result` to print the results only if the severity is equal or superior to the one specified. This is particularly useful if your script is very large and you don't care about intermediate results. For instance:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import logging\n", "\n", "def complex_task(task):\n", " task.run(task=dummy_task, severity_level=logging.DEBUG)\n", " task.run(task=dummy_task, severity_level=logging.DEBUG)\n", " task.run(task=dummy_task, severity_level=logging.DEBUG)\n", " task.run(task=dummy_task, severity_level=logging.DEBUG)\n", " task.run(task=dummy_task, severity_level=logging.DEBUG)\n", " return \"I did a lot of things!!!\"\n", "\n", "complex_result = nr.run(task=complex_task)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`print_result` will only print `INFO` severity and above by default so if we print the result we should only see the result of the parent task:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[36mcomplex_task********************************************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev1.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev2.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev3.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev4.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev5.no_group ** changed : False *********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m" ] } ], "source": [ "print_result(complex_result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you wanted to print all the tasks for debugging purposes you could specify it with:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[36mcomplex_task********************************************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev1.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev2.group_1 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev3.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev4.group_2 ** changed : False **********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[34m* dev5.no_group ** changed : False *********************************************\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32mvvvv complex_task ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO\u001b[0m\n", "\u001b[0mI did a lot of things!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m---- dummy_task ** changed : False --------------------------------------------- DEBUG\u001b[0m\n", "\u001b[0mhi!!!\u001b[0m\n", "\u001b[0m\u001b[1m\u001b[32m^^^^ END complex_task ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n", "\u001b[0m" ] } ], "source": [ "print_result(complex_result, severity_level=logging.DEBUG)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" } }, "nbformat": 4, "nbformat_minor": 4 }