mirror of
https://github.com/benclaussen/NetboxPS.git
synced 2025-12-13 18:02:29 +00:00
Changes
- Add Remove-NetboxVirtualMachine - Rename Set-NetboxVirtualInterface - Update tests
This commit is contained in:
parent
644ddb95b6
commit
462357646e
2 changed files with 182 additions and 28 deletions
|
|
@ -502,7 +502,7 @@ function New-NetboxVirtualMachine {
|
||||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters
|
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters
|
||||||
}
|
}
|
||||||
|
|
||||||
function Add-NetboxVirtualInterface {
|
function Add-NetboxVirtualMachineInterface {
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param
|
param
|
||||||
(
|
(
|
||||||
|
|
@ -652,4 +652,86 @@ function Set-NetboxVirtualMachineInterface {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion SET commands
|
#endregion SET commands
|
||||||
|
|
||||||
|
|
||||||
|
#region REMOVE commands
|
||||||
|
|
||||||
|
function Remove-NetboxVirtualMachine {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Delete a virtual machine
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Deletes a virtual machine from Netbox by ID
|
||||||
|
|
||||||
|
.PARAMETER Id
|
||||||
|
Database ID of the virtual machine
|
||||||
|
|
||||||
|
.PARAMETER Force
|
||||||
|
Force deletion without any prompts
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
PS C:\> Remove-NetboxVirtualMachine -Id $value1
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
Additional information about the function.
|
||||||
|
#>
|
||||||
|
|
||||||
|
[CmdletBinding(ConfirmImpact = 'High',
|
||||||
|
SupportsShouldProcess = $true)]
|
||||||
|
param
|
||||||
|
(
|
||||||
|
[Parameter(Mandatory = $true,
|
||||||
|
ValueFromPipelineByPropertyName = $true)]
|
||||||
|
[uint16[]]$Id,
|
||||||
|
|
||||||
|
[switch]$Force
|
||||||
|
)
|
||||||
|
|
||||||
|
begin {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
process {
|
||||||
|
foreach ($VMId in $Id) {
|
||||||
|
$CurrentVM = Get-NetboxVirtualMachine -Id $VMId -ErrorAction Stop
|
||||||
|
|
||||||
|
if ($Force -or $pscmdlet.ShouldProcess("$($CurrentVM.Name)/$($CurrentVM.Id)", "Remove")) {
|
||||||
|
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines', $CurrentVM.Id))
|
||||||
|
|
||||||
|
$URI = BuildNewURI -Segments $Segments
|
||||||
|
|
||||||
|
InvokeNetboxRequest -URI $URI -Method DELETE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion REMOVE commands
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,10 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?status=1'
|
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?status=1'
|
||||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
It "Should throw for an invalid status" {
|
||||||
|
{ Get-NetboxVirtualMachine -Status 'Fake' } | Should -Throw
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Context -Name "Get-NetboxVirtualMachineInterface" -Fixture {
|
Context -Name "Get-NetboxVirtualMachineInterface" -Fixture {
|
||||||
|
|
@ -334,9 +338,9 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Context -Name "Add-NetboxVirtualInterface" -Fixture {
|
Context -Name "Add-NetboxVirtualMachineInterface" -Fixture {
|
||||||
It "Should add a basic interface" {
|
It "Should add a basic interface" {
|
||||||
$Result = Add-NetboxVirtualInterface -Name 'Ethernet0' -Virtual_Machine 10
|
$Result = Add-NetboxVirtualMachineInterface -Name 'Ethernet0' -Virtual_Machine 10
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
|
||||||
|
|
@ -347,7 +351,7 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Should add an interface with a MAC, MTU, and Description" {
|
It "Should add an interface with a MAC, MTU, and Description" {
|
||||||
$Result = Add-NetboxVirtualInterface -Name 'Ethernet0' -Virtual_Machine 10 -Mac_Address '11:22:33:44:55:66' -MTU 1500 -Description "Test description"
|
$Result = Add-NetboxVirtualMachineInterface -Name 'Ethernet0' -Virtual_Machine 10 -Mac_Address '11:22:33:44:55:66' -MTU 1500 -Description "Test description"
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
|
||||||
|
|
@ -358,18 +362,20 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Context -Name "Set-NetboxVirtualMachine" -Fixture {
|
|
||||||
Mock -CommandName "Get-NetboxVirtualMachine" -ModuleName NetboxPS -MockWith {
|
Mock -CommandName "Get-NetboxVirtualMachine" -ModuleName NetboxPS -MockWith {
|
||||||
return @{
|
return [pscustomobject]@{
|
||||||
'Id' = 1234
|
'Id' = $Id
|
||||||
'Name' = 'TestVM'
|
'Name' = $Name
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Context -Name "Set-NetboxVirtualMachine" -Fixture {
|
||||||
It "Should set a VM to a new name" {
|
It "Should set a VM to a new name" {
|
||||||
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Force
|
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Force
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||||
|
|
||||||
$Result.Method | Should -Be 'PATCH'
|
$Result.Method | Should -Be 'PATCH'
|
||||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
||||||
|
|
@ -381,6 +387,7 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Cluster 10 -Platform 15 -Status 'Offline' -Force
|
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Cluster 10 -Platform 15 -Status 'Offline' -Force
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||||
|
|
||||||
$Result.Method | Should -Be 'PATCH'
|
$Result.Method | Should -Be 'PATCH'
|
||||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
||||||
|
|
@ -392,17 +399,19 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
{ Set-NetboxVirtualMachine -Id 1234 -Status 'Fake' -Force } | Should -Throw
|
{ Set-NetboxVirtualMachine -Id 1234 -Status 'Fake' -Force } | Should -Throw
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 0 -Exactly -Scope 'It'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Mock -CommandName "Get-NetboxVirtualMachineInterface" -ModuleName NetboxPS -MockWith {
|
||||||
|
return [pscustomobject]@{
|
||||||
|
'Id' = $Id
|
||||||
|
'Name' = $Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Context -Name "Set-NetboxVirtualMachineInterface" -Fixture {
|
Context -Name "Set-NetboxVirtualMachineInterface" -Fixture {
|
||||||
Mock -CommandName "Get-NetboxVirtualMachineInterface" -ModuleName NetboxPS -MockWith {
|
|
||||||
return @{
|
|
||||||
'Id' = 1234
|
|
||||||
'Name' = 'TestVM'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
It "Should set an interface to a new name" {
|
It "Should set an interface to a new name" {
|
||||||
$Result = Set-NetboxVirtualMachineInterface -Id 1234 -Name 'newtestname' -Force
|
$Result = Set-NetboxVirtualMachineInterface -Id 1234 -Name 'newtestname' -Force
|
||||||
|
|
||||||
|
|
@ -437,15 +446,6 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Should set multiple interfaces to a new name" {
|
It "Should set multiple interfaces to a new name" {
|
||||||
Mock -CommandName "Get-NetboxVirtualMachineInterface" -ModuleName NetboxPS -MockWith {
|
|
||||||
return @(
|
|
||||||
@{
|
|
||||||
'Id' = $Id
|
|
||||||
'Name' = 'TestVM'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
$Result = Set-NetboxVirtualMachineInterface -Id 1234, 4321 -Name 'newtestname' -Force
|
$Result = Set-NetboxVirtualMachineInterface -Id 1234, 4321 -Name 'newtestname' -Force
|
||||||
|
|
||||||
Assert-VerifiableMock
|
Assert-VerifiableMock
|
||||||
|
|
@ -456,6 +456,78 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
||||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||||
$Result.Body | Should -Be '{"name":"newtestname"}', '{"name":"newtestname"}'
|
$Result.Body | Should -Be '{"name":"newtestname"}', '{"name":"newtestname"}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
It "Should set multiple interfaces to a new name from the pipeline" {
|
||||||
|
$Result = @(
|
||||||
|
[pscustomobject]@{
|
||||||
|
'Id' = 4123
|
||||||
|
},
|
||||||
|
[pscustomobject]@{
|
||||||
|
'Id' = 4321
|
||||||
|
}
|
||||||
|
) | Set-NetboxVirtualMachineInterface -Name 'newtestname' -Force
|
||||||
|
|
||||||
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName Get-NetboxVirtualMachineInterface -Times 2 -Scope 'It' -Exactly
|
||||||
|
|
||||||
|
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||||
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/4123/', 'https://netbox.domain.com/api/virtualization/interfaces/4321/'
|
||||||
|
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||||
|
$Result.Body | Should -Be '{"name":"newtestname"}', '{"name":"newtestname"}'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Context -Name "Remove-NetboxVirtualMachine" -Fixture {
|
||||||
|
It "Should remove a single VM" {
|
||||||
|
$Result = Remove-NetboxVirtualMachine -Id 4125 -Force
|
||||||
|
|
||||||
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||||
|
|
||||||
|
$Result.Method | Should -Be 'DELETE'
|
||||||
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/'
|
||||||
|
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should remove mulitple VMs" {
|
||||||
|
$Result = Remove-NetboxVirtualMachine -Id 4125, 4132 -Force
|
||||||
|
|
||||||
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||||
|
|
||||||
|
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||||
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/', 'https://netbox.domain.com/api/virtualization/virtual-machines/4132/'
|
||||||
|
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should remove a VM from the pipeline" {
|
||||||
|
$Result = Get-NetboxVirtualMachine -Id 4125 | Remove-NetboxVirtualMachine -Force
|
||||||
|
|
||||||
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||||
|
|
||||||
|
$Result.Method | Should -Be 'DELETE'
|
||||||
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/'
|
||||||
|
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should remove multiple VMs from the pipeline" {
|
||||||
|
$Result = @(
|
||||||
|
[pscustomobject]@{
|
||||||
|
'Id' = 4125
|
||||||
|
},
|
||||||
|
[pscustomobject]@{
|
||||||
|
'Id' = 4132
|
||||||
|
}
|
||||||
|
) | Remove-NetboxVirtualMachine -Force
|
||||||
|
|
||||||
|
Assert-VerifiableMock
|
||||||
|
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||||
|
|
||||||
|
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||||
|
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/', 'https://netbox.domain.com/api/virtualization/virtual-machines/4132/'
|
||||||
|
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue