mirror of
https://github.com/Grace-Solutions/PSProxmox.git
synced 2026-08-31 01:09:24 +00:00
Reorganize project structure to separate solution from module
This commit is contained in:
+6
-2
@@ -34,8 +34,8 @@ x86/
|
|||||||
[Aa][Rr][Mm]/
|
[Aa][Rr][Mm]/
|
||||||
[Aa][Rr][Mm]64/
|
[Aa][Rr][Mm]64/
|
||||||
bld/
|
bld/
|
||||||
[Bb]in/
|
PSProxmox/[Bb]in/
|
||||||
[Oo]bj/
|
PSProxmox/[Oo]bj/
|
||||||
[Ll]og/
|
[Ll]og/
|
||||||
[Ll]ogs/
|
[Ll]ogs/
|
||||||
|
|
||||||
@@ -46,6 +46,10 @@ bld/
|
|||||||
*.tar.gz
|
*.tar.gz
|
||||||
*.tgz
|
*.tgz
|
||||||
|
|
||||||
|
# Module bin folder (except the DLL)
|
||||||
|
Module/bin/*
|
||||||
|
!Module/bin/PSProxmox.dll
|
||||||
|
|
||||||
# PowerShell module artifacts
|
# PowerShell module artifacts
|
||||||
*.psm1
|
*.psm1
|
||||||
*.psd1.meta
|
*.psd1.meta
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# Install-PSProxmox.ps1
|
||||||
|
# This script installs the PSProxmox module to the user's PowerShell modules directory
|
||||||
|
|
||||||
|
# Define the module name
|
||||||
|
$moduleName = "PSProxmox"
|
||||||
|
|
||||||
|
# Define the destination path
|
||||||
|
$modulePath = "$env:USERPROFILE\Documents\WindowsPowerShell\Modules\$moduleName"
|
||||||
|
if ($PSVersionTable.PSEdition -eq "Core") {
|
||||||
|
$modulePath = "$env:USERPROFILE\Documents\PowerShell\Modules\$moduleName"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create the module directory if it doesn't exist
|
||||||
|
if (-not (Test-Path -Path $modulePath)) {
|
||||||
|
New-Item -Path $modulePath -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created module directory: $modulePath"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create the bin directory if it doesn't exist
|
||||||
|
if (-not (Test-Path -Path "$modulePath\bin")) {
|
||||||
|
New-Item -Path "$modulePath\bin" -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created bin directory: $modulePath\bin"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy the module files
|
||||||
|
Copy-Item -Path "$PSScriptRoot\PSProxmox.psd1" -Destination $modulePath -Force
|
||||||
|
Copy-Item -Path "$PSScriptRoot\bin\PSProxmox.dll" -Destination "$modulePath\bin" -Force
|
||||||
|
Copy-Item -Path "$PSScriptRoot\LICENSE" -Destination $modulePath -Force
|
||||||
|
Copy-Item -Path "$PSScriptRoot\README.md" -Destination $modulePath -Force
|
||||||
|
|
||||||
|
Write-Host "PSProxmox module has been installed to $modulePath"
|
||||||
|
Write-Host "You can now import the module using: Import-Module $moduleName"
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 freedbygrace
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
@{
|
@{
|
||||||
RootModule = 'PSProxmox.dll'
|
RootModule = 'PSProxmox.dll'
|
||||||
ModuleVersion = '2023.04.28.1324'
|
ModuleVersion = '2025.04.28.1934'
|
||||||
GUID = 'd24f0894-3d0c-4ef1-a41e-b273c3db86ad'
|
GUID = 'd24f0894-3d0c-4ef1-a41e-b273c3db86ad'
|
||||||
Author = 'PSProxmox Team'
|
Author = 'PSProxmox Team'
|
||||||
CompanyName = 'PSProxmox'
|
CompanyName = 'PSProxmox'
|
||||||
@@ -87,3 +87,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
# PSProxmox
|
||||||
|
|
||||||
|
PSProxmox is a PowerShell module for managing Proxmox VE clusters. It provides a comprehensive set of cmdlets for managing virtual machines, storage, networks, users, roles, and more.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Install from PowerShell Gallery
|
||||||
|
Install-Module -Name PSProxmox -Scope CurrentUser
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Connecting to a Proxmox VE Server
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Connect using username and password
|
||||||
|
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
|
||||||
|
$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam"
|
||||||
|
|
||||||
|
# Connect using a credential object
|
||||||
|
$credential = Get-Credential
|
||||||
|
$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Virtual Machines
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all VMs
|
||||||
|
$vms = Get-ProxmoxVM -Connection $connection
|
||||||
|
|
||||||
|
# Get a specific VM
|
||||||
|
$vm = Get-ProxmoxVM -Connection $connection -VMID 100
|
||||||
|
|
||||||
|
# Create a new VM
|
||||||
|
$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start
|
||||||
|
|
||||||
|
# Create a new VM using the builder pattern
|
||||||
|
$builder = New-ProxmoxVMBuilder -Name "web-server"
|
||||||
|
$builder.WithMemory(4096)
|
||||||
|
.WithCores(2)
|
||||||
|
.WithDisk(50, "local-lvm")
|
||||||
|
.WithNetwork("virtio", "vmbr0")
|
||||||
|
.WithIPConfig("192.168.1.10/24", "192.168.1.1")
|
||||||
|
.WithStart($true)
|
||||||
|
|
||||||
|
$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Builder $builder
|
||||||
|
|
||||||
|
# Start, stop, and restart VMs
|
||||||
|
Start-ProxmoxVM -Connection $connection -Node "pve1" -VMID 100
|
||||||
|
Stop-ProxmoxVM -Connection $connection -Node "pve1" -VMID 100
|
||||||
|
Restart-ProxmoxVM -Connection $connection -Node "pve1" -VMID 100
|
||||||
|
|
||||||
|
# Remove a VM
|
||||||
|
Remove-ProxmoxVM -Connection $connection -Node "pve1" -VMID 100 -Confirm:$false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Templates
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Create a template from an existing VM
|
||||||
|
$template = New-ProxmoxVMTemplate -Connection $connection -VMID 100 -Name "Ubuntu-Template" -Description "Ubuntu 20.04 Template"
|
||||||
|
|
||||||
|
# Get all templates
|
||||||
|
$templates = Get-ProxmoxVMTemplate
|
||||||
|
|
||||||
|
# Create a VM from a template
|
||||||
|
$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -Start
|
||||||
|
|
||||||
|
# Create multiple VMs from a template
|
||||||
|
$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Prefix "web" -Count 3 -Start
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Storage
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all storage
|
||||||
|
$storage = Get-ProxmoxStorage -Connection $connection
|
||||||
|
|
||||||
|
# Get storage on a specific node
|
||||||
|
$storage = Get-ProxmoxStorage -Connection $connection -Node "pve1"
|
||||||
|
|
||||||
|
# Create a new storage
|
||||||
|
$storage = New-ProxmoxStorage -Connection $connection -Name "backup" -Type "dir" -Path "/mnt/backup" -Content "backup,iso"
|
||||||
|
|
||||||
|
# Remove a storage
|
||||||
|
Remove-ProxmoxStorage -Connection $connection -Name "backup" -Confirm:$false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Networks
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all network interfaces on a node
|
||||||
|
$networks = Get-ProxmoxNetwork -Connection $connection -Node "pve1"
|
||||||
|
|
||||||
|
# Create a new bridge interface
|
||||||
|
$network = New-ProxmoxNetwork -Connection $connection -Node "pve1" -Interface "vmbr1" -Type "bridge" -BridgePorts "eth1" -Method "static" -Address "192.168.2.1" -Netmask "255.255.255.0" -Autostart
|
||||||
|
|
||||||
|
# Remove a network interface
|
||||||
|
Remove-ProxmoxNetwork -Connection $connection -Node "pve1" -Interface "vmbr1" -Confirm:$false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Users and Roles
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all users
|
||||||
|
$users = Get-ProxmoxUser -Connection $connection
|
||||||
|
|
||||||
|
# Create a new user
|
||||||
|
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
|
||||||
|
$user = New-ProxmoxUser -Connection $connection -Username "john" -Realm "pam" -Password $securePassword -FirstName "John" -LastName "Doe" -Email "john.doe@example.com"
|
||||||
|
|
||||||
|
# Remove a user
|
||||||
|
Remove-ProxmoxUser -Connection $connection -UserID "john@pam" -Confirm:$false
|
||||||
|
|
||||||
|
# Get all roles
|
||||||
|
$roles = Get-ProxmoxRole -Connection $connection
|
||||||
|
|
||||||
|
# Create a new role
|
||||||
|
$role = New-ProxmoxRole -Connection $connection -RoleID "Developer" -Privileges "VM.Allocate", "VM.Config.Disk", "VM.Config.CPU", "VM.PowerMgmt"
|
||||||
|
|
||||||
|
# Remove a role
|
||||||
|
Remove-ProxmoxRole -Connection $connection -RoleID "Developer" -Confirm:$false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing SDN
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all SDN zones
|
||||||
|
$zones = Get-ProxmoxSDNZone -Connection $connection
|
||||||
|
|
||||||
|
# Create a new SDN zone
|
||||||
|
$zone = New-ProxmoxSDNZone -Connection $connection -Zone "zone1" -Type "vlan" -Bridge "vmbr0"
|
||||||
|
|
||||||
|
# Remove an SDN zone
|
||||||
|
Remove-ProxmoxSDNZone -Connection $connection -Zone "zone1" -Confirm:$false
|
||||||
|
|
||||||
|
# Get all SDN VNets
|
||||||
|
$vnets = Get-ProxmoxSDNVnet -Connection $connection
|
||||||
|
|
||||||
|
# Create a new SDN VNet
|
||||||
|
$vnet = New-ProxmoxSDNVnet -Connection $connection -VNet "vnet1" -Zone "zone1" -IPv4 "192.168.1.0/24" -Gateway "192.168.1.1"
|
||||||
|
|
||||||
|
# Remove an SDN VNet
|
||||||
|
Remove-ProxmoxSDNVnet -Connection $connection -VNet "vnet1" -Confirm:$false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Clusters
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get cluster information
|
||||||
|
$cluster = Get-ProxmoxCluster -Connection $connection
|
||||||
|
|
||||||
|
# Join a node to a cluster
|
||||||
|
$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force
|
||||||
|
Join-ProxmoxCluster -Connection $connection -ClusterName "cluster1" -HostName "pve1" -Password $securePassword
|
||||||
|
|
||||||
|
# Leave a cluster
|
||||||
|
Leave-ProxmoxCluster -Connection $connection -Force
|
||||||
|
|
||||||
|
# Create a cluster backup
|
||||||
|
$backup = New-ProxmoxClusterBackup -Connection $connection -Compress -Wait
|
||||||
|
|
||||||
|
# Restore a cluster backup
|
||||||
|
Restore-ProxmoxClusterBackup -Connection $connection -BackupID "vzdump-cluster-2023_04_28-12_00_00.vma.lzo" -Force -Wait
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing IP Addresses
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Create a new IP pool
|
||||||
|
$pool = New-ProxmoxIPPool -Name "Production" -CIDR "192.168.1.0/24" -ExcludeIPs "192.168.1.1", "192.168.1.254"
|
||||||
|
|
||||||
|
# Get all IP pools
|
||||||
|
$pools = Get-ProxmoxIPPool
|
||||||
|
|
||||||
|
# Get a specific IP pool
|
||||||
|
$pool = Get-ProxmoxIPPool -Name "Production"
|
||||||
|
|
||||||
|
# Clear an IP pool
|
||||||
|
Clear-ProxmoxIPPool -Name "Production"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Disconnecting
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Disconnect from the server
|
||||||
|
Disconnect-ProxmoxServer -Connection $connection
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the LICENSE file for details.
|
||||||
Binary file not shown.
@@ -92,7 +92,11 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="PSProxmox.psd1" CopyToOutputDirectory="Always" />
|
<None Include="..\Module\PSProxmox.psd1" CopyToOutputDirectory="Always" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
|
<Copy SourceFiles="$(TargetDir)$(TargetFileName)" DestinationFolder="..\Module\bin" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# build.ps1
|
||||||
|
# This script builds the PSProxmox module and creates a release package
|
||||||
|
|
||||||
|
# Set the version based on the current date and time
|
||||||
|
$version = Get-Date -Format "yyyy.MM.dd.HHmm"
|
||||||
|
Write-Host "Building PSProxmox version $version"
|
||||||
|
|
||||||
|
# Update the module version in the PSD1 file
|
||||||
|
$psd1Path = ".\Module\PSProxmox.psd1"
|
||||||
|
$psd1Content = Get-Content -Path $psd1Path -Raw
|
||||||
|
$psd1Content = $psd1Content -replace "ModuleVersion = '.*'", "ModuleVersion = '$version'"
|
||||||
|
Set-Content -Path $psd1Path -Value $psd1Content
|
||||||
|
|
||||||
|
# Build the solution
|
||||||
|
Write-Host "Building solution..."
|
||||||
|
dotnet build .\PSProxmox\PSProxmox.Main.csproj -c Release
|
||||||
|
|
||||||
|
# Create the release directory
|
||||||
|
$releaseDir = ".\Release\$version"
|
||||||
|
if (-not (Test-Path -Path $releaseDir)) {
|
||||||
|
New-Item -Path $releaseDir -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created release directory: $releaseDir"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy the module files to the release directory
|
||||||
|
Copy-Item -Path .\Module\PSProxmox.psd1 -Destination $releaseDir -Force
|
||||||
|
Copy-Item -Path .\Module\bin\PSProxmox.dll -Destination $releaseDir -Force
|
||||||
|
Copy-Item -Path .\Module\LICENSE -Destination $releaseDir -Force
|
||||||
|
Copy-Item -Path .\Module\README.md -Destination $releaseDir -Force
|
||||||
|
Copy-Item -Path .\Module\Install-PSProxmox.ps1 -Destination $releaseDir -Force
|
||||||
|
|
||||||
|
# Create a bin directory in the release directory
|
||||||
|
$releaseBinDir = "$releaseDir\bin"
|
||||||
|
if (-not (Test-Path -Path $releaseBinDir)) {
|
||||||
|
New-Item -Path $releaseBinDir -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created bin directory: $releaseBinDir"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy the DLL to the bin directory
|
||||||
|
Copy-Item -Path .\Module\bin\PSProxmox.dll -Destination $releaseBinDir -Force
|
||||||
|
|
||||||
|
# Create a ZIP file of the release
|
||||||
|
$zipPath = ".\Release\PSProxmox-$version.zip"
|
||||||
|
Compress-Archive -Path $releaseDir\* -DestinationPath $zipPath -Force
|
||||||
|
Write-Host "Created release package: $zipPath"
|
||||||
|
|
||||||
|
Write-Host "Build completed successfully!"
|
||||||
Reference in New Issue
Block a user