PowerNetbox provides full support for the netbox-branching plugin, enabling you to stage changes in isolated branches before merging them to the main database.
- Netbox 4.1 or later
- netbox-branching plugin installed on your Netbox server
Before using branching features, check if the plugin is available:
# Check if branching is available
if (Test-NBBranchingAvailable) {
Write-Host "Branching is available!"
} else {
Write-Host "Branching plugin not installed"
}# Create a new branch
$branch = New-NBBranch -Name "feature/new-datacenter" -Description "Planning new datacenter"
# List all branches
Get-NBBranch
# Get branches by status
Get-NBBranch -Status ready
Get-NBBranch -Status mergedPowerNetbox supports three ways to work within a branch:
This pattern is similar to Push-Location/Pop-Location:
# Enter the branch context
Enter-NBBranch -Name "feature/new-datacenter"
# All operations now work within the branch
New-NBDCIMSite -Name "DC-Amsterdam" -Slug "dc-ams"
New-NBDCIMDevice -Name "server-01" -DeviceType 1 -Site 1
New-NBIPAMAddress -Address "10.0.0.1/24"
# Exit back to main
Exit-NBBranchThis is the safest method as it automatically restores context even if errors occur:
# Execute operations in a branch
Invoke-NBInBranch -Branch "feature/new-datacenter" -ScriptBlock {
New-NBDCIMSite -Name "DC-Amsterdam" -Slug "dc-ams"
New-NBDCIMDevice -Name "server-01" -DeviceType 1 -Site 1
}
# Context is automatically restored after the scriptblockYou can nest branch contexts:
Enter-NBBranch -Name "outer-branch"
# Operations in outer-branch
Enter-NBBranch -Name "inner-branch"
# Operations in inner-branch
Exit-NBBranch # Back to outer-branch
Exit-NBBranch # Back to main
# Check current context
Get-NBBranchContext # Returns current branch name or $null
# View the entire stack
Get-NBBranchContext -StackSee what changes exist in a branch:
# Get all changes in a branch
Get-NBChangeDiff -Branch_Id 1
# Filter by action type
Get-NBChangeDiff -Branch_Id 1 -Action create
Get-NBChangeDiff -Branch_Id 1 -Action update
Get-NBChangeDiff -Branch_Id 1 -Action delete
# Filter by object type
Get-NBChangeDiff -Branch_Id 1 -Object_Type 'dcim.device'
# Check for conflicts
$conflicts = Get-NBChangeDiff -Branch_Id 1 | Where-Object { $_.conflicts }
if ($conflicts) {
Write-Warning "Branch has $($conflicts.Count) conflict(s)"
}Keep your branch up-to-date with changes in main:
# Sync a branch
Sync-NBBranch -Id 1
# Or using pipeline
Get-NBBranch -Name "feature/new-datacenter" | Sync-NBBranchMerge your changes back to the main database:
# Merge (will fail if conflicts exist)
Merge-NBBranch -Id 1
# Force merge despite conflicts
Merge-NBBranch -Id 1 -Force
# Using pipeline
Get-NBBranch -Name "feature/new-datacenter" | Merge-NBBranchIf you need to undo a merge:
# Revert a merged branch
Undo-NBBranchMerge -Id 1
# Using pipeline
Get-NBBranch -Status merged | Where-Object { $_.name -eq "feature/new-datacenter" } | Undo-NBBranchMergeTrack operations performed on branches:
# Get all branch events
Get-NBBranchEvent
# Get events for a specific branch
Get-NBBranchEvent -Branch_Id 1Here's a complete workflow for planning a new datacenter:
# Check if branching is available
if (-not (Test-NBBranchingAvailable)) {
throw "Branching plugin not available"
}
# Create planning branch
$branch = New-NBBranch -Name "planning/dc-amsterdam" -Description "Q1 2025 Datacenter Planning"
# Work in the branch
Invoke-NBInBranch -Branch "planning/dc-amsterdam" -ScriptBlock {
# Create site
$site = New-NBDCIMSite -Name "Amsterdam DC" -Slug "dc-ams" -Status "planned"
# Create racks
1..10 | ForEach-Object {
New-NBDCIMRack -Name "AMS-R$($_)" -Site $site.id -U_Height 42
}
# Reserve IP prefixes
New-NBIPAMPrefix -Prefix "10.100.0.0/16" -Description "Amsterdam DC supernet"
}
# Review what was created
$changes = Get-NBChangeDiff -Branch_Id $branch.id
Write-Host "Created $($changes.Count) objects in branch"
# When ready, sync and merge
$branch | Sync-NBBranch
$branch | Merge-NBBranch| Function | Description |
|---|---|
Test-NBBranchingAvailable |
Check if branching plugin is available |
Enter-NBBranch |
Enter a branch context |
Exit-NBBranch |
Exit the current branch context |
Get-NBBranchContext |
Get the current branch context |
Invoke-NBInBranch |
Execute a scriptblock in a branch |
Get-NBBranch |
Retrieve branch(es) |
New-NBBranch |
Create a new branch |
Set-NBBranch |
Update a branch |
Remove-NBBranch |
Delete a branch |
Sync-NBBranch |
Sync branch with main |
Merge-NBBranch |
Merge branch to main |
Undo-NBBranchMerge |
Revert a merged branch |
Get-NBBranchEvent |
Get branch event history |
Get-NBChangeDiff |
Get changes in a branch |