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.1.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

File details

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

File metadata

File hashes

Hashes for nornir_conditional_runner-0.1.1.tar.gz
Algorithm Hash digest
SHA256 83e82d4fe9126cca34bc79b8f7dc5505fa9e0a6cdeddf9e91a4365016e44c16a
MD5 e608d4f38fcfc14ad8dfaea903eb3fb7
BLAKE2b-256 154bd38e92f30f4b50431b05d7ca81bb3124f99b200d3287ef6b643fb74d0788

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nornir_conditional_runner-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8bd742b449139c3788ae688757e45f9f7e9896f150fdaa4bec7c27829bdfa5a3
MD5 e8d5dcb3c50319d63bbe70cbdfa95191
BLAKE2b-256 78403d1b8eb44812399c5f53fa1d2a1b4fe7743e6f7dbefcb51fec88e07babc2

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