nautobot-auto-provisioner 2.0.0
Easily provision new or existing devices based on pre-defined intended configurations.
License: Apache-2.0
Requires Python: <3.14,>=3.10
Keywords: nautobot, nautobot-app, nautobot-plugin

# Nautobot Auto Provisioner

<p align="center">
  <img src="https://github.com/d-camacho/testing_readme/blob/main/images/auto_prov_full_logo.png "class="logo" height="200px">
  <br>
  An <a href="https://networktocode.com/nautobot-apps/">App</a> for <a href="https://nautobot.com/">Nautobot</a>.
</p>

## This App has been updated for Nautobot 3.0 ## 

## Overview

**Auto Provisioner** is a Nautobot Plugin that enables you to push configurations to both new and existing devices. You can select a Git repository from Nautobot Git Repositories—currently supported with the backup or intended config repository managed by Golden Config—as the source for your configurations.

This project was inspired after the successful completion of [#100DaysOfNautobot](https://go.networktocode.com/100-days-of-nautobot).

Auto Provisioner provides three core Nautobot Jobs, each tailored to a specific operational use case.

![Auto Provisioner Jobs](https://github.com/d-camacho/nautobot-auto-provisioner/blob/main/docs/images/all_jobs.png)

---

## Use Cases

> [!IMPORTANT] 
For all use cases, it is assumed that **Nautobot has IP connectivity with the target device** being provisioned. Ensure devices are reachable before running any jobs.

> [!TIP] 
When provisioning new devices, consider using technologies such as DMVPN, DHCP reservations, or similar solutions to establish initial connectivity with minimal configuration. Once basic reachability is in place, Auto Provisioner can handle the rest.

### This plugin addresses the following use cases:

### Use Case 1: Baseline Existing Device (from Backup)

**Baseline Existing Device Job** lets users push an entire configuration to a selected device to restore it to a known-good state. In dynamic environments where changes are made to support temporary operational needs, this job helps eliminate configuration drift by reverting the device to its last-known-good backup stored in the repo.

![Baseline Existing Device](https://github.com/d-camacho/nautobot-auto-provisioner/blob/main/docs/images/baseline_job.png)

### Use Case 2: Baseline Existing Device (from Intended)

The **same job** can also be used to push newly generated **intended configurations**. For example, if your organization rolls out a new security standard or feature update, you can use this job to apply those changes to the device using your intent-based templates from the intended config repository.

### Use Case 3: Replace Existing Device

The **Replace Existing Device Job** is designed for situations where hardware must be replaced—whether due to failure, upgrade, or lifecycle refresh. This job retains all existing metadata in Nautobot (like role, location, IP, etc.) and applies it to the new device. It also allows for updates to attributes like device type and serial number, ensuring that your source of truth remains accurate.

![Replace Existing Device](https://github.com/d-camacho/nautobot-auto-provisioner/blob/main/docs/images/replace_existing.png)

### Use Case 4: Provision New Device

**Provision New Device Job** enables users to create and provision a completely new device in Nautobot. The job prompts for required metadata (like hostname, IP address, and interface), creates the device object, and then pushes the appropriate configuration from the selected repository.

![Provision New Device](https://github.com/d-camacho/nautobot-auto-provisioner/blob/main/docs/images/provision_new.png)


---

## Supported Platforms

Auto Provisioner leverages **Netmiko's** multi-vendor library to simplify SSH connections to network devices. Below is a list of commonly supported platforms. Checkout [Kirk Byers' GitHub Site](https://ktbyers.github.io/netmiko/PLATFORMS.html) for the comprehensive list. 

* Arista vEOS
* Cisco IOS
* Cisco IOS-XE
* Cisco IOS-XR
* Cisco NX-OS
* Cisco SG300
* Juniper Junos
* Linux

---

## Installing the App in Nautobot

**Auto Provisioner** is Python package published in [pypi.org/project/nautobot-auto-provisioner](https://pypi.org/project/nautobot-auto-provisioner/) and can be installed using:

```bash
pip install nautobot-auto-provisioner
```

Please checkout the [full installation guide](docs/admin/install.md) for more detailed steps.

---

## How To Use the App

Using the the app is just as easy as running any other Nautobot Jobs! Just pick the right job for your use case.

For additional info and troubleshooting tips, check out the [Auto Provisioner User Guide](docs/user/app_user_guide.md).

---

## Planned Future Updates

1. Future versions will support user defined Git Repos to decouple from Golden Config's backup and intended configs for greater fexibility. This will allow users who already have a different proces for backups or generating intended configs.

2. Wider support for credentials used to connect to devices. Currently, credentials are based on Nautobot's Secret Group but future iterations may support other methods.

---

## Feedback

All feedbacks are welcome! This project began as part of a Nautobot learning journey and demonstrates key concepts like Nautobot Job creation, class-based approach, and plugin development. Open a topic under **Discussion** to share your ideas or ask questions.

Let's learn Nautobot together!