From c4bea36ece8e873036c330737b6cb498b50685bf Mon Sep 17 00:00:00 2001 From: Alphaeus Mote Date: Mon, 28 Apr 2025 14:59:49 -0400 Subject: [PATCH] Add comprehensive documentation and examples --- docs/README.md | 59 +-- docs/cmdlets/Connect-ProxmoxServer.md | 286 +++++++++++++ docs/cmdlets/Get-ProxmoxVM.md | 151 +++++++ docs/cmdlets/New-ProxmoxVM.md | 353 ++++++++++++++++ docs/cmdlets/New-ProxmoxVMFromTemplate.md | 389 ++++++++++++++++++ docs/cmdlets/README.md | 81 ++++ .../Advanced-MultipleVMsFromTemplate.ps1 | 39 ++ docs/examples/Advanced-VMBuilder.ps1 | 55 +++ docs/examples/Basic-Connection.ps1 | 27 ++ docs/examples/Basic-CreateVM.ps1 | 34 ++ docs/examples/Cluster-CreateBackup.ps1 | 43 ++ docs/examples/README.md | 69 ++++ docs/guides/Cluster-Backup-Restore.md | 212 ++++++++++ docs/guides/Creating-VMs.md | 145 +++++++ docs/guides/Installation.md | 110 +++++ docs/guides/README.md | 47 +++ 16 files changed, 2077 insertions(+), 23 deletions(-) create mode 100644 docs/cmdlets/Connect-ProxmoxServer.md create mode 100644 docs/cmdlets/Get-ProxmoxVM.md create mode 100644 docs/cmdlets/New-ProxmoxVM.md create mode 100644 docs/cmdlets/New-ProxmoxVMFromTemplate.md create mode 100644 docs/cmdlets/README.md create mode 100644 docs/examples/Advanced-MultipleVMsFromTemplate.ps1 create mode 100644 docs/examples/Advanced-VMBuilder.ps1 create mode 100644 docs/examples/Basic-Connection.ps1 create mode 100644 docs/examples/Basic-CreateVM.ps1 create mode 100644 docs/examples/Cluster-CreateBackup.ps1 create mode 100644 docs/examples/README.md create mode 100644 docs/guides/Cluster-Backup-Restore.md create mode 100644 docs/guides/Creating-VMs.md create mode 100644 docs/guides/Installation.md create mode 100644 docs/guides/README.md diff --git a/docs/README.md b/docs/README.md index 43e867d..9a76ddb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# PSProxmox +# PSProxmox Documentation PSProxmox is a C#-based PowerShell module for managing Proxmox VE clusters. It provides a comprehensive set of cmdlets for interacting with Proxmox VE API, featuring structured return objects, mass deployment tools, automatic IP management, and more. @@ -12,47 +12,60 @@ PSProxmox is a C#-based PowerShell module for managing Proxmox VE clusters. It p - **Structured Objects**: All outputs are typed C# classes (PowerShell-native) - **Pipeline Support**: Cmdlets support pipeline input where appropriate +## Getting Started + +- [Installation Guide](guides/Installation.md) +- [Connection Guide](guides/Connection.md) +- [Authentication Methods](guides/Authentication.md) + +## Documentation + +- [Cmdlet Reference](cmdlets/README.md) - Detailed documentation for all cmdlets +- [Examples](examples/README.md) - Example scripts for common tasks +- [Guides](guides/README.md) - Comprehensive guides for various topics + ## Requirements - PowerShell 5.1 or PowerShell 7+ - .NET Framework 4.7.2 or .NET Core 2.0+ -## Installation - -```powershell -# Install from PSGallery (when published) -Install-Module -Name PSProxmox - -# Import the module -Import-Module PSProxmox -``` - ## Quick Start ```powershell -# Connect to a Proxmox server -$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +# Install from PowerShell Gallery +Install-Module -Name PSProxmox -Scope CurrentUser + +# Import the module +Import-Module PSProxmox + +# Connect to a Proxmox VE server +$credential = Get-Credential +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" # Get all VMs $vms = Get-ProxmoxVM -Connection $connection # Create a new VM -$newVM = New-ProxmoxVM -Connection $connection -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start -# Start a VM -Start-ProxmoxVM -Connection $connection -VMID $newVM.VMID - -# Disconnect from the server +# Disconnect when done Disconnect-ProxmoxServer -Connection $connection ``` -## Documentation +## Using the Documentation -For detailed documentation on each cmdlet, use the built-in PowerShell help: +For detailed documentation on each cmdlet, you can: -```powershell -Get-Help Connect-ProxmoxServer -Full -``` +1. Use the built-in PowerShell help: + ```powershell + Get-Help Connect-ProxmoxServer -Full + ``` + +2. Browse the [Cmdlet Reference](cmdlets/README.md) for detailed documentation on all cmdlets. + +3. Check the [Examples](examples/README.md) for example scripts for common tasks. + +4. Read the [Guides](guides/README.md) for comprehensive guides on various topics. ## Contributing diff --git a/docs/cmdlets/Connect-ProxmoxServer.md b/docs/cmdlets/Connect-ProxmoxServer.md new file mode 100644 index 0000000..7cc6885 --- /dev/null +++ b/docs/cmdlets/Connect-ProxmoxServer.md @@ -0,0 +1,286 @@ +# Connect-ProxmoxServer + +Connects to a Proxmox VE server. + +## Syntax + +```powershell +Connect-ProxmoxServer + -Server + -Username + -Password + [-Realm ] + [-Port ] + [-UseSSL ] + [-SkipCertificateValidation ] + [-Timeout ] + [] +``` + +```powershell +Connect-ProxmoxServer + -Server + -Credential + [-Realm ] + [-Port ] + [-UseSSL ] + [-SkipCertificateValidation ] + [-Timeout ] + [] +``` + +```powershell +Connect-ProxmoxServer + -Server + -ApiToken + -ApiTokenSecret + [-Port ] + [-UseSSL ] + [-SkipCertificateValidation ] + [-Timeout ] + [] +``` + +## Description + +The `Connect-ProxmoxServer` cmdlet establishes a connection to a Proxmox VE server. This connection is required for all other cmdlets in the PSProxmox module. + +## Parameters + +### -Server + +The hostname or IP address of the Proxmox VE server. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Username + +The username to use for authentication. + +```yaml +Type: String +Parameter Sets: UsernamePassword +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Password + +The password to use for authentication. + +```yaml +Type: SecureString +Parameter Sets: UsernamePassword +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Credential + +The credential object to use for authentication. + +```yaml +Type: PSCredential +Parameter Sets: Credential +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ApiToken + +The API token to use for authentication. + +```yaml +Type: String +Parameter Sets: ApiToken +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ApiTokenSecret + +The API token secret to use for authentication. + +```yaml +Type: SecureString +Parameter Sets: ApiToken +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Realm + +The authentication realm to use. Default is "pam". + +```yaml +Type: String +Parameter Sets: UsernamePassword, Credential +Aliases: + +Required: False +Position: Named +Default value: pam +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Port + +The port to use for the connection. Default is 8006. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 8006 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -UseSSL + +Whether to use SSL for the connection. Default is $true. + +```yaml +Type: Boolean +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: True +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -SkipCertificateValidation + +Whether to skip SSL certificate validation. Default is $false. + +```yaml +Type: Boolean +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Timeout + +The timeout in seconds for the connection. Default is 30. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 30 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters + +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## Inputs + +### None + +## Outputs + +### PSProxmox.Session.ProxmoxConnection + +## Notes + +- This cmdlet must be called before using any other cmdlets in the PSProxmox module. +- The connection object is returned and should be stored in a variable for use with other cmdlets. +- If you use the `-SkipCertificateValidation` parameter, the SSL certificate validation will be skipped, which is not recommended for production environments. + +## Examples + +### Example 1: Connect to a Proxmox VE server using username and password + +```powershell +$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam" +``` + +This example connects to a Proxmox VE server using a username and password. + +### Example 2: Connect to a Proxmox VE server using a credential object + +```powershell +$credential = Get-Credential +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" +``` + +This example connects to a Proxmox VE server using a credential object. + +### Example 3: Connect to a Proxmox VE server using an API token + +```powershell +$secureSecret = ConvertTo-SecureString "secret" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -ApiToken "root@pam!token" -ApiTokenSecret $secureSecret +``` + +This example connects to a Proxmox VE server using an API token. + +### Example 4: Connect to a Proxmox VE server with SSL certificate validation disabled + +```powershell +$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam" -SkipCertificateValidation $true +``` + +This example connects to a Proxmox VE server with SSL certificate validation disabled. + +## Related Links + +- [Disconnect-ProxmoxServer](Disconnect-ProxmoxServer.md) +- [Get-ProxmoxVM](Get-ProxmoxVM.md) +- [Get-ProxmoxNode](Get-ProxmoxNode.md) diff --git a/docs/cmdlets/Get-ProxmoxVM.md b/docs/cmdlets/Get-ProxmoxVM.md new file mode 100644 index 0000000..7990923 --- /dev/null +++ b/docs/cmdlets/Get-ProxmoxVM.md @@ -0,0 +1,151 @@ +# Get-ProxmoxVM + +Gets virtual machines from Proxmox VE. + +## Syntax + +```powershell +Get-ProxmoxVM + -Connection + [-Node ] + [-VMID ] + [-RawJson] + [] +``` + +## Description + +The `Get-ProxmoxVM` cmdlet retrieves virtual machines from Proxmox VE. You can retrieve all VMs, VMs on a specific node, or a specific VM by ID. + +## Parameters + +### -Connection + +The connection to the Proxmox VE server. + +```yaml +Type: ProxmoxConnection +Parameter Sets: (All) +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Node + +The node to get VMs from. If not specified, VMs from all nodes will be returned. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -VMID + +The ID of the VM to get. If not specified, all VMs will be returned. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -RawJson + +Whether to return the raw JSON response instead of parsed objects. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters + +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## Inputs + +### None + +## Outputs + +### PSProxmox.Models.ProxmoxVM + +### System.String + +## Notes + +- This cmdlet requires a connection to a Proxmox VE server. Use `Connect-ProxmoxServer` to establish a connection. +- If the `-RawJson` parameter is specified, the raw JSON response will be returned instead of parsed objects. +- If the `-VMID` parameter is specified and the VM is not found, an error will be thrown. + +## Examples + +### Example 1: Get all VMs + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vms = Get-ProxmoxVM -Connection $connection +``` + +This example gets all VMs from all nodes. + +### Example 2: Get VMs on a specific node + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vms = Get-ProxmoxVM -Connection $connection -Node "pve1" +``` + +This example gets all VMs on the node "pve1". + +### Example 3: Get a specific VM by ID + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = Get-ProxmoxVM -Connection $connection -VMID 100 +``` + +This example gets the VM with ID 100. + +### Example 4: Get the raw JSON response + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$json = Get-ProxmoxVM -Connection $connection -RawJson +``` + +This example gets the raw JSON response for all VMs. + +## Related Links + +- [Connect-ProxmoxServer](Connect-ProxmoxServer.md) +- [New-ProxmoxVM](New-ProxmoxVM.md) +- [Remove-ProxmoxVM](Remove-ProxmoxVM.md) +- [Start-ProxmoxVM](Start-ProxmoxVM.md) +- [Stop-ProxmoxVM](Stop-ProxmoxVM.md) +- [Restart-ProxmoxVM](Restart-ProxmoxVM.md) diff --git a/docs/cmdlets/New-ProxmoxVM.md b/docs/cmdlets/New-ProxmoxVM.md new file mode 100644 index 0000000..b19bc7d --- /dev/null +++ b/docs/cmdlets/New-ProxmoxVM.md @@ -0,0 +1,353 @@ +# New-ProxmoxVM + +Creates a new virtual machine in Proxmox VE. + +## Syntax + +```powershell +New-ProxmoxVM + -Connection + -Node + -Name + [-VMID ] + [-Memory ] + [-Cores ] + [-Sockets ] + [-DiskSize ] + [-Storage ] + [-OSType ] + [-NetworkModel ] + [-NetworkBridge ] + [-Description ] + [-Start] + [] +``` + +```powershell +New-ProxmoxVM + -Connection + -Node + -Builder + [] +``` + +## Description + +The `New-ProxmoxVM` cmdlet creates a new virtual machine in Proxmox VE. You can specify the VM parameters directly or use a VM builder object. + +## Parameters + +### -Connection + +The connection to the Proxmox VE server. + +```yaml +Type: ProxmoxConnection +Parameter Sets: (All) +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Node + +The node to create the VM on. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Name + +The name of the VM to create. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -VMID + +The VM ID. If not specified, the next available ID will be used. + +```yaml +Type: Int32 +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Memory + +The amount of memory in MB. + +```yaml +Type: Int32 +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: 512 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Cores + +The number of CPU cores. + +```yaml +Type: Int32 +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: 1 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Sockets + +The number of CPU sockets. + +```yaml +Type: Int32 +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: 1 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -DiskSize + +The disk size in GB. + +```yaml +Type: Int32 +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: 8 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Storage + +The storage location for the disk. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: local-lvm +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -OSType + +The operating system type. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: l26 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -NetworkModel + +The network interface model. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: virtio +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -NetworkBridge + +The network bridge. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: vmbr0 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Description + +The description of the VM. + +```yaml +Type: String +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Start + +Whether to start the VM after creation. + +```yaml +Type: SwitchParameter +Parameter Sets: Direct +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Builder + +A VM builder object containing the VM configuration. + +```yaml +Type: ProxmoxVMBuilder +Parameter Sets: Builder +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters + +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## Inputs + +### None + +## Outputs + +### PSProxmox.Models.ProxmoxVM + +## Notes + +- This cmdlet requires a connection to a Proxmox VE server. Use `Connect-ProxmoxServer` to establish a connection. +- If the `-VMID` parameter is not specified, the next available ID will be used. +- If the `-Start` parameter is specified, the VM will be started after creation. +- You can use the `New-ProxmoxVMBuilder` cmdlet to create a VM builder object for more complex VM configurations. + +## Examples + +### Example 1: Create a basic VM + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start +``` + +This example creates a new VM with 2 GB of memory, 2 CPU cores, and a 32 GB disk, and starts it. + +### Example 2: Create a VM using a builder + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$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 +``` + +This example creates a new VM using a builder object with 4 GB of memory, 2 CPU cores, a 50 GB disk, and a static IP address, and starts it. + +### Example 3: Create a VM with a specific ID + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -VMID 100 -Memory 2048 -Cores 2 -DiskSize 32 +``` + +This example creates a new VM with ID 100. + +### Example 4: Create a VM with a description + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Description "Test VM for development" +``` + +This example creates a new VM with a description. + +## Related Links + +- [Connect-ProxmoxServer](Connect-ProxmoxServer.md) +- [Get-ProxmoxVM](Get-ProxmoxVM.md) +- [Remove-ProxmoxVM](Remove-ProxmoxVM.md) +- [Start-ProxmoxVM](Start-ProxmoxVM.md) +- [Stop-ProxmoxVM](Stop-ProxmoxVM.md) +- [Restart-ProxmoxVM](Restart-ProxmoxVM.md) +- [New-ProxmoxVMBuilder](New-ProxmoxVMBuilder.md) diff --git a/docs/cmdlets/New-ProxmoxVMFromTemplate.md b/docs/cmdlets/New-ProxmoxVMFromTemplate.md new file mode 100644 index 0000000..7b6d2bb --- /dev/null +++ b/docs/cmdlets/New-ProxmoxVMFromTemplate.md @@ -0,0 +1,389 @@ +# New-ProxmoxVMFromTemplate + +Creates a new virtual machine from a template in Proxmox VE. + +## Syntax + +```powershell +New-ProxmoxVMFromTemplate + -Connection + -Node + -TemplateName + -Name + [-VMID ] + [-Memory ] + [-Cores ] + [-DiskSize ] + [-Storage ] + [-NetworkModel ] + [-NetworkBridge ] + [-Description ] + [-IPPool ] + [-Start] + [] +``` + +```powershell +New-ProxmoxVMFromTemplate + -Connection + -Node + -TemplateName + -Prefix + -Count + [-StartIndex ] + [-Memory ] + [-Cores ] + [-DiskSize ] + [-Storage ] + [-NetworkModel ] + [-NetworkBridge ] + [-Description ] + [-IPPool ] + [-Start] + [] +``` + +## Description + +The `New-ProxmoxVMFromTemplate` cmdlet creates a new virtual machine from a template in Proxmox VE. You can create a single VM or multiple VMs with a prefix and counter. + +## Parameters + +### -Connection + +The connection to the Proxmox VE server. + +```yaml +Type: ProxmoxConnection +Parameter Sets: (All) +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Node + +The node to create the VM on. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TemplateName + +The name of the template to use. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Name + +The name of the VM to create. + +```yaml +Type: String +Parameter Sets: SingleVM +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Prefix + +The prefix for the VM names when creating multiple VMs. + +```yaml +Type: String +Parameter Sets: MultipleVMs +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Count + +The number of VMs to create. + +```yaml +Type: Int32 +Parameter Sets: MultipleVMs +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StartIndex + +The starting index for the VM names when creating multiple VMs. + +```yaml +Type: Int32 +Parameter Sets: MultipleVMs +Aliases: + +Required: False +Position: Named +Default value: 1 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -VMID + +The VM ID. If not specified, the next available ID will be used. + +```yaml +Type: Int32 +Parameter Sets: SingleVM +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Memory + +The amount of memory in MB. If specified, overrides the template value. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Cores + +The number of CPU cores. If specified, overrides the template value. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -DiskSize + +The disk size in GB. If specified, overrides the template value. + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Storage + +The storage location for the disk. If specified, overrides the template value. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -NetworkModel + +The network interface model. If specified, overrides the template value. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -NetworkBridge + +The network bridge. If specified, overrides the template value. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Description + +The description of the VM. If specified, overrides the template value. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -IPPool + +The IP pool to use for assigning an IP address. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Start + +Whether to start the VM after creation. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters + +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## Inputs + +### None + +## Outputs + +### PSProxmox.Models.ProxmoxVM + +## Notes + +- This cmdlet requires a connection to a Proxmox VE server. Use `Connect-ProxmoxServer` to establish a connection. +- If the `-VMID` parameter is not specified, the next available ID will be used. +- If the `-Start` parameter is specified, the VM will be started after creation. +- If the `-IPPool` parameter is specified, an IP address will be assigned from the specified pool. +- When creating multiple VMs, the names will be in the format `{Prefix}{StartIndex + i}` where `i` is the index of the VM (0 to Count-1). + +## Examples + +### Example 1: Create a VM from a template + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -Start +``` + +This example creates a new VM from the "Ubuntu-Template" template and starts it. + +### Example 2: Create multiple VMs from a template + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Prefix "web" -Count 3 -Start +``` + +This example creates three new VMs from the "Ubuntu-Template" template with names "web1", "web2", and "web3", and starts them. + +### Example 3: Create a VM from a template with custom settings + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -Memory 4096 -Cores 2 -DiskSize 50 -Start +``` + +This example creates a new VM from the "Ubuntu-Template" template with 4 GB of memory, 2 CPU cores, and a 50 GB disk, and starts it. + +### Example 4: Create a VM from a template with an IP from a pool + +```powershell +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential (Get-Credential) +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -IPPool "Production" -Start +``` + +This example creates a new VM from the "Ubuntu-Template" template, assigns an IP address from the "Production" pool, and starts it. + +## Related Links + +- [Connect-ProxmoxServer](Connect-ProxmoxServer.md) +- [Get-ProxmoxVM](Get-ProxmoxVM.md) +- [New-ProxmoxVM](New-ProxmoxVM.md) +- [Get-ProxmoxVMTemplate](Get-ProxmoxVMTemplate.md) +- [New-ProxmoxVMTemplate](New-ProxmoxVMTemplate.md) +- [New-ProxmoxIPPool](New-ProxmoxIPPool.md) diff --git a/docs/cmdlets/README.md b/docs/cmdlets/README.md new file mode 100644 index 0000000..25b5afe --- /dev/null +++ b/docs/cmdlets/README.md @@ -0,0 +1,81 @@ +# PSProxmox Cmdlets + +This directory contains documentation for all cmdlets in the PSProxmox module. + +## Cmdlet Categories + +- [Session Management](#session-management) +- [VM Management](#vm-management) +- [Storage Management](#storage-management) +- [Network Management](#network-management) +- [User and Role Management](#user-and-role-management) +- [SDN Management](#sdn-management) +- [Cluster Management](#cluster-management) +- [Template Management](#template-management) +- [IP Management](#ip-management) + +## Session Management + +- [Connect-ProxmoxServer](Connect-ProxmoxServer.md) - Connects to a Proxmox VE server +- [Disconnect-ProxmoxServer](Disconnect-ProxmoxServer.md) - Disconnects from a Proxmox VE server + +## VM Management + +- [Get-ProxmoxVM](Get-ProxmoxVM.md) - Gets virtual machines from Proxmox VE +- [New-ProxmoxVM](New-ProxmoxVM.md) - Creates a new virtual machine in Proxmox VE +- [Remove-ProxmoxVM](Remove-ProxmoxVM.md) - Removes a virtual machine from Proxmox VE +- [Start-ProxmoxVM](Start-ProxmoxVM.md) - Starts a virtual machine in Proxmox VE +- [Stop-ProxmoxVM](Stop-ProxmoxVM.md) - Stops a virtual machine in Proxmox VE +- [Restart-ProxmoxVM](Restart-ProxmoxVM.md) - Restarts a virtual machine in Proxmox VE + +## Storage Management + +- [Get-ProxmoxStorage](Get-ProxmoxStorage.md) - Gets storage from Proxmox VE +- [New-ProxmoxStorage](New-ProxmoxStorage.md) - Creates a new storage in Proxmox VE +- [Remove-ProxmoxStorage](Remove-ProxmoxStorage.md) - Removes a storage from Proxmox VE + +## Network Management + +- [Get-ProxmoxNetwork](Get-ProxmoxNetwork.md) - Gets network interfaces from Proxmox VE +- [New-ProxmoxNetwork](New-ProxmoxNetwork.md) - Creates a new network interface in Proxmox VE +- [Remove-ProxmoxNetwork](Remove-ProxmoxNetwork.md) - Removes a network interface from Proxmox VE + +## User and Role Management + +- [Get-ProxmoxUser](Get-ProxmoxUser.md) - Gets users from Proxmox VE +- [New-ProxmoxUser](New-ProxmoxUser.md) - Creates a new user in Proxmox VE +- [Remove-ProxmoxUser](Remove-ProxmoxUser.md) - Removes a user from Proxmox VE +- [Get-ProxmoxRole](Get-ProxmoxRole.md) - Gets roles from Proxmox VE +- [New-ProxmoxRole](New-ProxmoxRole.md) - Creates a new role in Proxmox VE +- [Remove-ProxmoxRole](Remove-ProxmoxRole.md) - Removes a role from Proxmox VE + +## SDN Management + +- [Get-ProxmoxSDNZone](Get-ProxmoxSDNZone.md) - Gets SDN zones from Proxmox VE +- [New-ProxmoxSDNZone](New-ProxmoxSDNZone.md) - Creates a new SDN zone in Proxmox VE +- [Remove-ProxmoxSDNZone](Remove-ProxmoxSDNZone.md) - Removes an SDN zone from Proxmox VE +- [Get-ProxmoxSDNVnet](Get-ProxmoxSDNVnet.md) - Gets SDN VNets from Proxmox VE +- [New-ProxmoxSDNVnet](New-ProxmoxSDNVnet.md) - Creates a new SDN VNet in Proxmox VE +- [Remove-ProxmoxSDNVnet](Remove-ProxmoxSDNVnet.md) - Removes an SDN VNet from Proxmox VE + +## Cluster Management + +- [Get-ProxmoxCluster](Get-ProxmoxCluster.md) - Gets cluster information from Proxmox VE +- [Join-ProxmoxCluster](Join-ProxmoxCluster.md) - Joins a node to a Proxmox VE cluster +- [Leave-ProxmoxCluster](Leave-ProxmoxCluster.md) - Removes a node from a Proxmox VE cluster +- [Get-ProxmoxClusterBackup](Get-ProxmoxClusterBackup.md) - Gets cluster backups from Proxmox VE +- [New-ProxmoxClusterBackup](New-ProxmoxClusterBackup.md) - Creates a new cluster backup in Proxmox VE +- [Restore-ProxmoxClusterBackup](Restore-ProxmoxClusterBackup.md) - Restores a cluster backup in Proxmox VE + +## Template Management + +- [Get-ProxmoxVMTemplate](Get-ProxmoxVMTemplate.md) - Gets VM templates from Proxmox VE +- [New-ProxmoxVMTemplate](New-ProxmoxVMTemplate.md) - Creates a new VM template in Proxmox VE +- [Remove-ProxmoxVMTemplate](Remove-ProxmoxVMTemplate.md) - Removes a VM template from Proxmox VE +- [New-ProxmoxVMFromTemplate](New-ProxmoxVMFromTemplate.md) - Creates a new VM from a template in Proxmox VE + +## IP Management + +- [New-ProxmoxIPPool](New-ProxmoxIPPool.md) - Creates a new IP pool +- [Get-ProxmoxIPPool](Get-ProxmoxIPPool.md) - Gets IP pools +- [Clear-ProxmoxIPPool](Clear-ProxmoxIPPool.md) - Clears an IP pool diff --git a/docs/examples/Advanced-MultipleVMsFromTemplate.ps1 b/docs/examples/Advanced-MultipleVMsFromTemplate.ps1 new file mode 100644 index 0000000..5fd27cd --- /dev/null +++ b/docs/examples/Advanced-MultipleVMsFromTemplate.ps1 @@ -0,0 +1,39 @@ +# Advanced-MultipleVMsFromTemplate.ps1 +# This script demonstrates how to create multiple VMs from a template using the PSProxmox module. + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Method 1: Create multiple VMs from a template with default settings +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Prefix "web" -Count 3 -Start + +# Display the VM information +$vms + +# Method 2: Create multiple VMs from a template with custom settings +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Prefix "db" -Count 2 -StartIndex 1 -Memory 4096 -Cores 2 -DiskSize 50 -Start + +# Display the VM information +$vms + +# Method 3: Create multiple VMs from a template with IP addresses from a pool +# First, create an IP pool if it doesn't exist +if (-not (Get-ProxmoxIPPool -Name "Production")) { + New-ProxmoxIPPool -Name "Production" -CIDR "192.168.1.0/24" -ExcludeIPs "192.168.1.1", "192.168.1.254" +} + +# Create the VMs with IP addresses from the pool +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Prefix "app" -Count 5 -IPPool "Production" -Start + +# Display the VM information +$vms + +# Disconnect from the server when done +Disconnect-ProxmoxServer -Connection $connection diff --git a/docs/examples/Advanced-VMBuilder.ps1 b/docs/examples/Advanced-VMBuilder.ps1 new file mode 100644 index 0000000..8ab49d2 --- /dev/null +++ b/docs/examples/Advanced-VMBuilder.ps1 @@ -0,0 +1,55 @@ +# Advanced-VMBuilder.ps1 +# This script demonstrates how to create a VM using the builder pattern with the PSProxmox module. + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Create a VM builder +$builder = New-ProxmoxVMBuilder -Name "web-server" + +# Configure the VM using the builder pattern +$builder.WithMemory(4096) # 4 GB of memory + .WithCores(2) # 2 CPU cores + .WithSockets(1) # 1 CPU socket + .WithDisk(50, "local-lvm") # 50 GB disk on local-lvm storage + .WithNetwork("virtio", "vmbr0") # virtio network on vmbr0 bridge + .WithIPConfig("192.168.1.10/24", "192.168.1.1") # Static IP configuration + .WithDescription("Web server for production") # Description + .WithStart($true) # Start the VM after creation + +# Create the VM using the builder +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Builder $builder + +# Display the VM information +$vm + +# Create another VM with a more complex configuration +$builder = New-ProxmoxVMBuilder -Name "db-server" + +# Configure the VM using the builder pattern +$builder.WithMemory(8192) # 8 GB of memory + .WithCores(4) # 4 CPU cores + .WithSockets(2) # 2 CPU sockets + .WithDisk(100, "local-lvm") # 100 GB primary disk on local-lvm storage + .WithAdditionalDisk(200, "local-lvm") # 200 GB additional disk on local-lvm storage + .WithNetwork("virtio", "vmbr0") # virtio network on vmbr0 bridge + .WithAdditionalNetwork("virtio", "vmbr1") # Additional network interface on vmbr1 + .WithIPConfig("192.168.1.20/24", "192.168.1.1") # Static IP configuration for first interface + .WithCPUType("host") # CPU type + .WithVGA("std") # VGA type + .WithBoot("order=scsi0;net0") # Boot order + .WithDescription("Database server for production") # Description + .WithStart($true) # Start the VM after creation + +# Create the VM using the builder +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Builder $builder + +# Display the VM information +$vm + +# Disconnect from the server when done +Disconnect-ProxmoxServer -Connection $connection diff --git a/docs/examples/Basic-Connection.ps1 b/docs/examples/Basic-Connection.ps1 new file mode 100644 index 0000000..f0997c4 --- /dev/null +++ b/docs/examples/Basic-Connection.ps1 @@ -0,0 +1,27 @@ +# Basic-Connection.ps1 +# This script demonstrates how to connect to a Proxmox VE server using the PSProxmox module. + +# Import the PSProxmox module +Import-Module PSProxmox + +# Method 1: Connect using username and password +$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam" + +# Method 2: Connect using a credential object +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Method 3: Connect using an API token +$secureSecret = ConvertTo-SecureString "secret" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -ApiToken "root@pam!token" -ApiTokenSecret $secureSecret + +# Method 4: Connect with SSL certificate validation disabled (not recommended for production) +$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam" -SkipCertificateValidation $true + +# Display the connection information +$connection + +# Disconnect from the server when done +Disconnect-ProxmoxServer -Connection $connection diff --git a/docs/examples/Basic-CreateVM.ps1 b/docs/examples/Basic-CreateVM.ps1 new file mode 100644 index 0000000..7c254f2 --- /dev/null +++ b/docs/examples/Basic-CreateVM.ps1 @@ -0,0 +1,34 @@ +# Basic-CreateVM.ps1 +# This script demonstrates how to create a new VM using the PSProxmox module. + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Method 1: Create a basic VM +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start + +# Display the VM information +$vm + +# Method 2: Create a VM with more options +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "web-server" ` + -Memory 4096 -Cores 2 -Sockets 1 -DiskSize 50 -Storage "local-lvm" ` + -OSType "l26" -NetworkModel "virtio" -NetworkBridge "vmbr0" ` + -Description "Web server for testing" -Start + +# Display the VM information +$vm + +# Method 3: Create a VM with a specific ID +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "db-server" -VMID 200 ` + -Memory 8192 -Cores 4 -DiskSize 100 -Storage "local-lvm" -Start + +# Display the VM information +$vm + +# Disconnect from the server when done +Disconnect-ProxmoxServer -Connection $connection diff --git a/docs/examples/Cluster-CreateBackup.ps1 b/docs/examples/Cluster-CreateBackup.ps1 new file mode 100644 index 0000000..f09223d --- /dev/null +++ b/docs/examples/Cluster-CreateBackup.ps1 @@ -0,0 +1,43 @@ +# Cluster-CreateBackup.ps1 +# This script demonstrates how to create a cluster backup using the PSProxmox module. + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Method 1: Create a cluster backup with default settings +$backup = New-ProxmoxClusterBackup -Connection $connection + +# Display the backup information +$backup + +# Method 2: Create a cluster backup with compression +$backup = New-ProxmoxClusterBackup -Connection $connection -Compress + +# Display the backup information +$backup + +# Method 3: Create a cluster backup and wait for it to complete +$backup = New-ProxmoxClusterBackup -Connection $connection -Compress -Wait -Timeout 600 + +# Display the backup information +$backup + +# Method 4: Get all cluster backups +$backups = Get-ProxmoxClusterBackup -Connection $connection + +# Display the backups +$backups + +# Method 5: Get a specific cluster backup +$backupID = $backup.BackupID +$specificBackup = Get-ProxmoxClusterBackup -Connection $connection -BackupID $backupID + +# Display the specific backup +$specificBackup + +# Disconnect from the server when done +Disconnect-ProxmoxServer -Connection $connection diff --git a/docs/examples/README.md b/docs/examples/README.md new file mode 100644 index 0000000..42f5def --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,69 @@ +# PSProxmox Examples + +This directory contains example scripts for the PSProxmox module. + +## Basic Examples + +- [Connect to a Proxmox VE server](Basic-Connection.ps1) +- [Get information about VMs](Basic-GetVMs.ps1) +- [Create a new VM](Basic-CreateVM.ps1) +- [Start, stop, and restart VMs](Basic-VMPowerManagement.ps1) +- [Remove a VM](Basic-RemoveVM.ps1) + +## Advanced Examples + +- [Create a VM using the builder pattern](Advanced-VMBuilder.ps1) +- [Create multiple VMs from a template](Advanced-MultipleVMsFromTemplate.ps1) +- [Create a VM with a static IP address](Advanced-VMWithStaticIP.ps1) +- [Create a VM with multiple disks](Advanced-VMWithMultipleDisks.ps1) +- [Create a VM with multiple network interfaces](Advanced-VMWithMultipleNetworks.ps1) + +## Cluster Management Examples + +- [Join a node to a cluster](Cluster-JoinNode.ps1) +- [Remove a node from a cluster](Cluster-RemoveNode.ps1) +- [Create a cluster backup](Cluster-CreateBackup.ps1) +- [Restore a cluster backup](Cluster-RestoreBackup.ps1) + +## Storage Management Examples + +- [Get information about storage](Storage-GetStorage.ps1) +- [Create a new storage](Storage-CreateStorage.ps1) +- [Remove a storage](Storage-RemoveStorage.ps1) + +## Network Management Examples + +- [Get information about network interfaces](Network-GetInterfaces.ps1) +- [Create a new network interface](Network-CreateInterface.ps1) +- [Remove a network interface](Network-RemoveInterface.ps1) + +## User and Role Management Examples + +- [Get information about users](User-GetUsers.ps1) +- [Create a new user](User-CreateUser.ps1) +- [Remove a user](User-RemoveUser.ps1) +- [Get information about roles](Role-GetRoles.ps1) +- [Create a new role](Role-CreateRole.ps1) +- [Remove a role](Role-RemoveRole.ps1) + +## SDN Management Examples + +- [Get information about SDN zones](SDN-GetZones.ps1) +- [Create a new SDN zone](SDN-CreateZone.ps1) +- [Remove an SDN zone](SDN-RemoveZone.ps1) +- [Get information about SDN VNets](SDN-GetVNets.ps1) +- [Create a new SDN VNet](SDN-CreateVNet.ps1) +- [Remove an SDN VNet](SDN-RemoveVNet.ps1) + +## Template Management Examples + +- [Get information about VM templates](Template-GetTemplates.ps1) +- [Create a new VM template](Template-CreateTemplate.ps1) +- [Remove a VM template](Template-RemoveTemplate.ps1) +- [Create a VM from a template](Template-CreateVMFromTemplate.ps1) + +## IP Management Examples + +- [Create a new IP pool](IP-CreatePool.ps1) +- [Get information about IP pools](IP-GetPools.ps1) +- [Clear an IP pool](IP-ClearPool.ps1) diff --git a/docs/guides/Cluster-Backup-Restore.md b/docs/guides/Cluster-Backup-Restore.md new file mode 100644 index 0000000..a3a1edc --- /dev/null +++ b/docs/guides/Cluster-Backup-Restore.md @@ -0,0 +1,212 @@ +# Cluster Backup and Restore + +This guide explains how to backup and restore Proxmox VE clusters using the PSProxmox module. + +## Prerequisites + +- PSProxmox module installed +- Connection to a Proxmox VE server +- Administrative access to the Proxmox VE cluster + +## Cluster Backups + +Cluster backups in Proxmox VE contain the cluster configuration, including: +- Cluster configuration +- User and role configuration +- Storage configuration +- Network configuration +- Firewall configuration +- HA configuration + +They do not include VM data or container data. + +## Creating Cluster Backups + +### Basic Backup + +To create a basic cluster backup: + +```powershell +# Connect to the Proxmox VE server +$credential = Get-Credential +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Create a cluster backup +$backup = New-ProxmoxClusterBackup -Connection $connection +``` + +### Backup with Compression + +To create a compressed cluster backup: + +```powershell +$backup = New-ProxmoxClusterBackup -Connection $connection -Compress +``` + +### Backup and Wait for Completion + +To create a backup and wait for it to complete: + +```powershell +$backup = New-ProxmoxClusterBackup -Connection $connection -Compress -Wait -Timeout 600 +``` + +This will wait up to 10 minutes (600 seconds) for the backup to complete. + +## Listing Cluster Backups + +To list all cluster backups: + +```powershell +$backups = Get-ProxmoxClusterBackup -Connection $connection +``` + +To get a specific backup by ID: + +```powershell +$backupID = "vzdump-cluster-2023_04_28-12_00_00.vma.lzo" +$backup = Get-ProxmoxClusterBackup -Connection $connection -BackupID $backupID +``` + +## Restoring Cluster Backups + +### Basic Restore + +To restore a cluster backup: + +```powershell +$backupID = "vzdump-cluster-2023_04_28-12_00_00.vma.lzo" +Restore-ProxmoxClusterBackup -Connection $connection -BackupID $backupID -Force +``` + +The `-Force` parameter is required to confirm the restore operation. + +### Restore and Wait for Completion + +To restore a backup and wait for it to complete: + +```powershell +Restore-ProxmoxClusterBackup -Connection $connection -BackupID $backupID -Force -Wait -Timeout 600 +``` + +This will wait up to 10 minutes (600 seconds) for the restore to complete. + +## Best Practices + +### Backup Frequency + +- Create regular backups of your cluster configuration +- Automate backup creation using scheduled tasks +- Keep multiple backups to ensure you can restore to different points in time + +### Backup Verification + +- Verify that backups are created successfully +- Test restoring backups in a non-production environment +- Document the backup and restore procedures + +### Backup Storage + +- Store backups in a secure location +- Consider storing backups off-site +- Implement backup rotation to manage storage space + +## Example: Automated Backup Script + +Here's an example script for automated cluster backups: + +```powershell +# Automated-Cluster-Backup.ps1 +# This script creates a cluster backup and logs the result + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$securePassword = ConvertTo-SecureString "password" -AsPlainText -Force +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Username "root" -Password $securePassword -Realm "pam" + +# Create a timestamp for the log +$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + +try { + # Create a cluster backup + $backup = New-ProxmoxClusterBackup -Connection $connection -Compress -Wait -Timeout 600 + + # Log the successful backup + $logMessage = "$timestamp - Backup created successfully: $($backup.BackupID)" + Add-Content -Path "C:\Logs\ProxmoxBackup.log" -Value $logMessage +} +catch { + # Log the error + $logMessage = "$timestamp - Backup failed: $($_.Exception.Message)" + Add-Content -Path "C:\Logs\ProxmoxBackup.log" -Value $logMessage +} +finally { + # Disconnect from the server + Disconnect-ProxmoxServer -Connection $connection +} +``` + +## Example: Restore Script + +Here's an example script for restoring a cluster backup: + +```powershell +# Restore-Cluster-Backup.ps1 +# This script restores a cluster backup + +# Import the PSProxmox module +Import-Module PSProxmox + +# Connect to the Proxmox VE server +$credential = Get-Credential -Message "Enter your Proxmox VE credentials" +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Get the latest backup +$latestBackup = Get-ProxmoxClusterBackup -Connection $connection | Sort-Object -Property Time -Descending | Select-Object -First 1 + +if ($latestBackup) { + Write-Host "Latest backup: $($latestBackup.BackupID) from $(Get-Date -Date $latestBackup.Time -Format 'yyyy-MM-dd HH:mm:ss')" + + # Confirm the restore operation + $confirm = Read-Host "Do you want to restore this backup? (y/n)" + + if ($confirm -eq "y") { + # Restore the backup + Restore-ProxmoxClusterBackup -Connection $connection -BackupID $latestBackup.BackupID -Force -Wait -Timeout 600 + Write-Host "Backup restored successfully" + } + else { + Write-Host "Restore operation cancelled" + } +} +else { + Write-Host "No backups found" +} + +# Disconnect from the server +Disconnect-ProxmoxServer -Connection $connection +``` + +## Troubleshooting + +### Backup Creation Fails + +If backup creation fails, check: +- The user has sufficient permissions +- There is enough disk space +- The storage is accessible +- The cluster is healthy + +### Restore Operation Fails + +If restore operation fails, check: +- The backup file exists and is accessible +- The backup file is not corrupted +- The user has sufficient permissions +- The cluster is in a state that allows restore operations + +## Next Steps + +Now that you know how to backup and restore Proxmox VE clusters, you can proceed to the [High Availability](High-Availability.md) guide to learn how to configure high availability for your cluster. diff --git a/docs/guides/Creating-VMs.md b/docs/guides/Creating-VMs.md new file mode 100644 index 0000000..4f1fef9 --- /dev/null +++ b/docs/guides/Creating-VMs.md @@ -0,0 +1,145 @@ +# Creating VMs + +This guide explains how to create virtual machines using the PSProxmox module. + +## Prerequisites + +- PSProxmox module installed +- Connection to a Proxmox VE server + +## Basic VM Creation + +The simplest way to create a VM is to use the `New-ProxmoxVM` cmdlet with basic parameters: + +```powershell +# Connect to the Proxmox VE server +$credential = Get-Credential +$connection = Connect-ProxmoxServer -Server "proxmox.example.com" -Credential $credential -Realm "pam" + +# Create a basic VM +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "test-vm" -Memory 2048 -Cores 2 -DiskSize 32 -Start +``` + +This creates a VM with the following specifications: +- Name: test-vm +- Memory: 2 GB +- CPU: 2 cores +- Disk: 32 GB +- The VM will be started after creation + +## Advanced VM Creation + +For more control over the VM configuration, you can specify additional parameters: + +```powershell +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Name "web-server" ` + -Memory 4096 -Cores 2 -Sockets 1 -DiskSize 50 -Storage "local-lvm" ` + -OSType "l26" -NetworkModel "virtio" -NetworkBridge "vmbr0" ` + -Description "Web server for testing" -Start +``` + +This creates a VM with more specific configuration: +- Name: web-server +- Memory: 4 GB +- CPU: 2 cores, 1 socket +- Disk: 50 GB on local-lvm storage +- OS Type: Linux 2.6+ kernel +- Network: virtio model on vmbr0 bridge +- Description: "Web server for testing" +- The VM will be started after creation + +## Using the VM Builder Pattern + +For complex VM configurations, you can use the VM builder pattern: + +```powershell +# Create a VM builder +$builder = New-ProxmoxVMBuilder -Name "db-server" + +# Configure the VM using the builder pattern +$builder.WithMemory(8192) # 8 GB of memory + .WithCores(4) # 4 CPU cores + .WithSockets(2) # 2 CPU sockets + .WithDisk(100, "local-lvm") # 100 GB primary disk on local-lvm storage + .WithAdditionalDisk(200, "local-lvm") # 200 GB additional disk on local-lvm storage + .WithNetwork("virtio", "vmbr0") # virtio network on vmbr0 bridge + .WithAdditionalNetwork("virtio", "vmbr1") # Additional network interface on vmbr1 + .WithIPConfig("192.168.1.20/24", "192.168.1.1") # Static IP configuration for first interface + .WithCPUType("host") # CPU type + .WithVGA("std") # VGA type + .WithBoot("order=scsi0;net0") # Boot order + .WithDescription("Database server for production") # Description + .WithStart($true) # Start the VM after creation + +# Create the VM using the builder +$vm = New-ProxmoxVM -Connection $connection -Node "pve1" -Builder $builder +``` + +The builder pattern allows you to: +- Chain configuration methods together +- Configure complex settings like multiple disks and network interfaces +- Set advanced parameters like CPU type, VGA type, and boot order + +## Creating VMs from Templates + +If you have VM templates, you can create VMs from them using the `New-ProxmoxVMFromTemplate` cmdlet: + +```powershell +# Create a VM from a template +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" -Name "web01" -Start +``` + +You can also override template settings: + +```powershell +# Create a VM from a template with custom settings +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Name "web01" -Memory 4096 -Cores 2 -DiskSize 50 -Start +``` + +## Creating Multiple VMs from Templates + +You can create multiple VMs from a template in one operation: + +```powershell +# Create multiple VMs from a template +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Prefix "web" -Count 3 -Start +``` + +This creates three VMs named "web1", "web2", and "web3". + +You can also specify a starting index: + +```powershell +# Create multiple VMs from a template with a custom starting index +$vms = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Prefix "web" -Count 3 -StartIndex 10 -Start +``` + +This creates three VMs named "web10", "web11", and "web12". + +## Creating VMs with IP Addresses from a Pool + +If you have IP pools configured, you can assign IP addresses from them: + +```powershell +# Create a VM with an IP address from a pool +$vm = New-ProxmoxVMFromTemplate -Connection $connection -Node "pve1" -TemplateName "Ubuntu-Template" ` + -Name "web01" -IPPool "Production" -Start +``` + +This assigns an IP address from the "Production" pool to the VM. + +## Best Practices + +- Use descriptive names for your VMs +- Use templates for consistent VM configurations +- Use the builder pattern for complex VM configurations +- Document your VM configurations +- Use IP pools for IP address management +- Test your VM configurations before deploying to production + +## Next Steps + +Now that you know how to create VMs, you can proceed to the [Managing VMs](Managing-VMs.md) guide to learn how to manage them. diff --git a/docs/guides/Installation.md b/docs/guides/Installation.md new file mode 100644 index 0000000..ad942ec --- /dev/null +++ b/docs/guides/Installation.md @@ -0,0 +1,110 @@ +# Installation Guide + +This guide explains how to install the PSProxmox module. + +## Prerequisites + +- PowerShell 5.1 or later +- Windows PowerShell or PowerShell Core +- .NET Framework 4.7.2 or later (for Windows PowerShell) +- .NET Core 2.0 or later (for PowerShell Core) + +## Installation Methods + +### Method 1: Install from PowerShell Gallery (Recommended) + +The PSProxmox module is available on the PowerShell Gallery. To install it, run the following command: + +```powershell +Install-Module -Name PSProxmox -Scope CurrentUser +``` + +If you want to install it for all users on the system, run the following command with administrative privileges: + +```powershell +Install-Module -Name PSProxmox -Scope AllUsers +``` + +### Method 2: Install from GitHub + +You can also install the PSProxmox module directly from GitHub: + +1. Download the latest release from the [GitHub repository](https://github.com/freedbygrace/PSProxmox/releases) +2. Extract the ZIP file +3. Run the `Install-PSProxmox.ps1` script included in the package: + +```powershell +.\Install-PSProxmox.ps1 +``` + +### Method 3: Manual Installation + +You can manually install the PSProxmox module by copying the files to your PowerShell modules directory: + +1. Download the latest release from the [GitHub repository](https://github.com/freedbygrace/PSProxmox/releases) +2. Extract the ZIP file +3. Copy the extracted files to a folder named "PSProxmox" in your PowerShell modules directory: + +For Windows PowerShell: +```powershell +Copy-Item -Path .\PSProxmox-Dist\* -Destination "$env:USERPROFILE\Documents\WindowsPowerShell\Modules\PSProxmox" -Recurse -Force +``` + +For PowerShell Core: +```powershell +Copy-Item -Path .\PSProxmox-Dist\* -Destination "$env:USERPROFILE\Documents\PowerShell\Modules\PSProxmox" -Recurse -Force +``` + +## Verifying the Installation + +To verify that the PSProxmox module is installed correctly, run the following command: + +```powershell +Get-Module -Name PSProxmox -ListAvailable +``` + +You should see output similar to the following: + +``` + Directory: C:\Users\username\Documents\WindowsPowerShell\Modules + +ModuleType Version Name ExportedCommands +---------- ------- ---- ---------------- +Binary 2023.04... PSProxmox {Clear-ProxmoxIPPool, Connect-ProxmoxServer, Disconnect-ProxmoxServer, Get-ProxmoxCluster...} +``` + +## Importing the Module + +To import the PSProxmox module into your PowerShell session, run the following command: + +```powershell +Import-Module PSProxmox +``` + +You can verify that the module is imported correctly by running: + +```powershell +Get-Command -Module PSProxmox +``` + +This will list all the cmdlets available in the PSProxmox module. + +## Updating the Module + +To update the PSProxmox module to the latest version, run the following command: + +```powershell +Update-Module -Name PSProxmox +``` + +## Uninstalling the Module + +To uninstall the PSProxmox module, run the following command: + +```powershell +Uninstall-Module -Name PSProxmox +``` + +## Next Steps + +Now that you have installed the PSProxmox module, you can proceed to the [Connection Guide](Connection.md) to learn how to connect to a Proxmox VE server. diff --git a/docs/guides/README.md b/docs/guides/README.md new file mode 100644 index 0000000..f133f8f --- /dev/null +++ b/docs/guides/README.md @@ -0,0 +1,47 @@ +# PSProxmox Guides + +This directory contains guides for common tasks with the PSProxmox module. + +## Getting Started + +- [Installation Guide](Installation.md) +- [Connection Guide](Connection.md) +- [Authentication Methods](Authentication.md) + +## VM Management + +- [Creating VMs](Creating-VMs.md) +- [Managing VMs](Managing-VMs.md) +- [VM Templates](VM-Templates.md) +- [VM Snapshots](VM-Snapshots.md) +- [VM Migration](VM-Migration.md) + +## Cluster Management + +- [Cluster Setup](Cluster-Setup.md) +- [Cluster Backup and Restore](Cluster-Backup-Restore.md) +- [High Availability](High-Availability.md) + +## Storage Management + +- [Storage Types](Storage-Types.md) +- [Managing Storage](Managing-Storage.md) +- [Storage Replication](Storage-Replication.md) + +## Network Management + +- [Network Configuration](Network-Configuration.md) +- [SDN Setup](SDN-Setup.md) +- [Firewall Configuration](Firewall-Configuration.md) + +## User Management + +- [User and Role Management](User-Role-Management.md) +- [Permissions and ACLs](Permissions-ACLs.md) +- [API Tokens](API-Tokens.md) + +## Advanced Topics + +- [Automation and Scripting](Automation-Scripting.md) +- [Performance Tuning](Performance-Tuning.md) +- [Troubleshooting](Troubleshooting.md)