Skip to main content

No project description provided

Project description

Nornir Conditional Runner

The ConditionalRunner is a custom Nornir runner that enforces concurrency limits based on host groups or custom condition groups. It allows you to control task execution by defining limits on the number of simultaneous tasks for specific groups of hosts, ensuring your nornir tasks are not updating vital network devices at the same time.

Installation

pip install nornir-conditional-runner

Usage

Replace the default Nornir runner with ConditionalRunner in your configuration:

from nornir import InitNornir
from conditional_runner import ConditionalRunner

nr = InitNornir(
    runner={
        "plugin": "conditional_runner", # Use the ConditionalRunner instead of the default
        "options": {
            "num_workers": 10, # Maximum number of concurrent tasks
            "group_limits": {
                "core": 1, # Limit the "core" group to 1 concurrent task
                "distribution": 2,
                "edge": 3,
            },
            "conditional_group_key": "conditional_groups", # Custom key for conditional groups config in host data
        },
    },
    inventory={
        "plugin": "SimpleInventory",
        "options": {
            "host_file": "inventory/hosts.yaml",
            "group_file": "inventory/groups.yaml",
        },
    },
)

def my_task(task):
    return f"Running on {task.host.name}"

result = nr.run(task=my_task)
print(result)

Host Example

Hosts can define custom groups in their data dictionary using the conditional_group_key provided to the runner. The runner will use these groups to enforce the group_limits.

host1:
  data:
    conditional_groups:
      - core
host2:
  data:
    conditional_groups:
      - distribution

If no conditional groups are defined and conditional_group_key is not provided to the runner, the runner will use the host groups.

host1:
  groups: 
    - core
host2:
  groups: 
    - edge

Logging

The ConditionalRunner leverages Python's built-in logging system to provide insights into its operation. It logs key events, such as:

  • Warnings when a group limit is missing in group_limits, defaulting to the global limit.
  • Warnings when an invalid or missing conditional_group_key causes a fallback to host groups.

Demo

A demo can be found in the demo/demo.py file.

Demo topology with conditional groups: Demo topology

Error Handling

  • If conditional_group_key is provided but no conditional groups are defined in the host data, the runner will warn you and default to using the host groups as conditional groups.
  • If no group_limits are specified for a group, the runner will default to using the global num_workers value as the limit.
  • If neither group_limits nor a conditional_group_key are provided, the runner will fall back to using the host groups as conditional groups, with the default limits set to the global num_workers. This behavior thean basically mirrors that of the default threaded Nornir runner.
  • Invalid group limits (i.e., non-positive integers) will result in a ValueError.

Contributing

Contributions are welcome! Feel free to submit issues or feature requests on GitHub.


Enjoy using the Nornir Conditional Runner! 🎉

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nornir_conditional_runner-0.1.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file nornir_conditional_runner-0.1.0.tar.gz.

File metadata

File hashes

Hashes for nornir_conditional_runner-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cc82dfc0e24865f0af741bf1116c60592f4e8534066858e1a3d9028c4a3319a7
MD5 6aad69fbe78b96add9794d28c5f51dd4
BLAKE2b-256 ff4ba6a93edefd28f228ee2f6bb9cf1d741a6fbfaad1c083b5f83a176fbcc219

See more details on using hashes here.

File details

Details for the file nornir_conditional_runner-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nornir_conditional_runner-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 12d6e25f154c5a4024bf9fda38a1b8f32f6c8839a91f8c1509c0859c8b851550
MD5 603cf3fe2a895e9a133a17e172779554
BLAKE2b-256 c21fc1b6aabb35cbae94276808e44fb91639221515afaf38e5c879b7cdacbf73

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page