Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 3.2 Develop --> Main #151

Merged
merged 16 commits into from
Apr 2, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add enable default os env var to override
jeffkala committed Mar 28, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit 1f15aa999175de7363347bac593e4ffa454fb60d
9 changes: 8 additions & 1 deletion docs/task/task.md
Original file line number Diff line number Diff line change
@@ -102,4 +102,11 @@ class DispatcherMixin:
if isinstance(config_context, int):
return config_context
return cls.tcp_port
```
```

## Environment Variables

| Environment Variable | Explanation |
| ----- | ----------- |
| NORNIR_NAUTOBOT_REVERT_IN_SECONDS | Amount in seconds to revert if a config based method fails. |
| NORNIR_NAUTOBOT_NETMIKO_ENABLE_DEFAULT | Override the default(True) to not automatically call the `enable` function before running commands. |
35 changes: 35 additions & 0 deletions examples/basic_with_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from nornir import InitNornir
from nornir_nautobot.plugins.tasks.dispatcher import dispatcher
from nornir_utils.plugins.functions import print_result

import logging

LOGGER = logging.getLogger(__name__)

my_nornir = InitNornir(
inventory={
"plugin": "NautobotInventory",
"options": {
"nautobot_url": "http://localhost:8080/",
"nautobot_token": "0123456789abcdef0123456789abcdef01234567",
"filter_parameters": {"location": "Site 1"},
"ssl_verify": False,
},
},
)
my_nornir.inventory.defaults.username = "jeff"
my_nornir.inventory.defaults.password = "cisco"

for nr_host, nr_obj in my_nornir.inventory.hosts.items():
network_driver = my_nornir.inventory.hosts[nr_host].platform
result = my_nornir.run(
task=dispatcher,
logger=LOGGER,
method="get_config",
obj=nr_host,
framework="netmiko",
backup_file="./ios.cfg",
remove_lines=None,
substitute_lines=None,
)
print_result(result)
9 changes: 6 additions & 3 deletions nornir_nautobot/plugins/tasks/dispatcher/default.py
Original file line number Diff line number Diff line change
@@ -23,9 +23,8 @@
from nornir_jinja2.plugins.tasks import template_file
from nornir_napalm.plugins.tasks import napalm_configure, napalm_get
from nornir_netmiko.tasks import netmiko_send_command

from nornir_nautobot.exceptions import NornirNautobotException
from nornir_nautobot.utils.helpers import make_folder
from nornir_nautobot.utils.helpers import make_folder, is_truthy

_logger = logging.getLogger(__name__)

@@ -459,7 +458,11 @@ def get_config(
command = cls.config_command

try:
result = task.run(task=netmiko_send_command, command_string=command, enable=True)
result = task.run(
task=netmiko_send_command,
command_string=command,
enable=is_truthy(os.getenv("NORNIR_NAUTOBOT_NETMIKO_ENABLE_DEFAULT", default="True")),
)
except NornirSubTaskError as exc:
if isinstance(exc.result.exception, NetmikoAuthenticationException):
error_msg = f"`E1017:` Failed with an authentication issue: `{exc.result.exception}`"
22 changes: 22 additions & 0 deletions nornir_nautobot/utils/helpers.py
Original file line number Diff line number Diff line change
@@ -31,3 +31,25 @@ def import_string(dotted_path):
return getattr(importlib.import_module(module_name), class_name)
except (ModuleNotFoundError, AttributeError):
return None


def is_truthy(arg):
"""Convert "truthy" strings into Booleans.
Args:
arg (str): Truthy string (True values are y, yes, t, true, on and 1; false values are n, no,
f, false, off and 0. Raises ValueError if val is anything else.
Examples:
>>> is_truthy('yes')
True
"""
if isinstance(arg, bool):
return arg

val = str(arg).lower()
if val in ("y", "yes", "t", "true", "on", "1"):
return True
if val in ("n", "no", "f", "false", "off", "0"):
return False
return True