Initialer Import der Synology Scripts
This commit is contained in:
Executable
+163
@@ -0,0 +1,163 @@
|
||||
# Import necessary modules
|
||||
Import-Module Corsinvest.ProxmoxVE.Api
|
||||
Import-Module ImportExcel
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
|
||||
# Proxmox connection info
|
||||
$ProxmoxURL = "https://your-proxmox-url:8006"
|
||||
$ProxmoxUser = "root"
|
||||
$ProxmoxPassword = "P@ssw0rd"
|
||||
$ProxmoxRealm = "pam"
|
||||
|
||||
# Connect to Proxmox
|
||||
$credentials = New-Object System.Management.Automation.PSCredential ($ProxmoxUser, (ConvertTo-SecureString $ProxmoxPassword -AsPlainText -Force))
|
||||
$null = Connect-PveCluster -Server $ProxmoxURL -User $ProxmoxUser -Realm $ProxmoxRealm -Credential $credentials
|
||||
|
||||
# Read Excel data
|
||||
$excelPath = "C:\path\to\depl_systems.xlsx"
|
||||
$hostsData = Import-Excel -Path $excelPath
|
||||
|
||||
# Function to get VMs from Proxmox
|
||||
function Get-ProxmoxVMs {
|
||||
$vms = Get-PveVMList
|
||||
return $vms
|
||||
}
|
||||
|
||||
# Function to check missing VMs
|
||||
function Get-MissingVMs {
|
||||
$proxmoxVMs = Get-ProxmoxVMs
|
||||
$missingVMs = @()
|
||||
|
||||
foreach ($host in $hostsData) {
|
||||
$vmName = $host.'VM-Name'
|
||||
if ($proxmoxVMs | Where-Object { $_.name -eq $vmName } -eq $null) {
|
||||
$missingVMs += $host
|
||||
}
|
||||
}
|
||||
|
||||
return $missingVMs
|
||||
}
|
||||
|
||||
# Function to get node usage
|
||||
function Get-NodeUsage {
|
||||
param ($node)
|
||||
|
||||
$usage = Get-PveNodeStatus -NodeName $node
|
||||
return @{
|
||||
Node = $node
|
||||
MaxMem = $usage.memory.total
|
||||
Mem = $usage.memory.used
|
||||
MaxDisk = $usage.rootfs.total
|
||||
Disk = $usage.rootfs.used
|
||||
}
|
||||
}
|
||||
|
||||
# Function to create and start VM
|
||||
function Create-VM {
|
||||
param (
|
||||
$node,
|
||||
$vmId,
|
||||
$vmName,
|
||||
$vmCores,
|
||||
$vmMemory,
|
||||
$vmDiskSize,
|
||||
$isoFile
|
||||
)
|
||||
|
||||
$params = @{
|
||||
NodeName = $node
|
||||
VMID = $vmId
|
||||
Name = $vmName
|
||||
Cores = $vmCores
|
||||
Memory = $vmMemory
|
||||
DiskSize = $vmDiskSize
|
||||
ISOImage = $isoFile
|
||||
}
|
||||
|
||||
New-PveVM @params
|
||||
Start-PveVM -NodeName $node -VMID $vmId
|
||||
Write-Host "VM wurde auf dem Node $node erstellt und gestartet"
|
||||
}
|
||||
|
||||
# Create GUI
|
||||
$form = New-Object System.Windows.Forms.Form
|
||||
$form.Text = "Proxmox VM Manager"
|
||||
$form.Size = New-Object System.Drawing.Size(600, 400)
|
||||
|
||||
$listBox = New-Object System.Windows.Forms.ListBox
|
||||
$listBox.Size = New-Object System.Drawing.Size(560, 300)
|
||||
$listBox.Location = New-Object System.Drawing.Point(10, 10)
|
||||
|
||||
$buttonCheck = New-Object System.Windows.Forms.Button
|
||||
$buttonCheck.Text = "Check Missing VMs"
|
||||
$buttonCheck.Size = New-Object System.Drawing.Size(120, 30)
|
||||
$buttonCheck.Location = New-Object System.Drawing.Point(10, 320)
|
||||
$buttonCheck.Add_Click({
|
||||
$missingVMs = Get-MissingVMs
|
||||
$listBox.Items.Clear()
|
||||
if ($missingVMs.Count -eq 0) {
|
||||
$listBox.Items.Add("Es fehlen keine VMs.")
|
||||
} else {
|
||||
foreach ($vm in $missingVMs) {
|
||||
$listBox.Items.Add("$($vm.'VM-Name')")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
$buttonDeploy = New-Object System.Windows.Forms.Button
|
||||
$buttonDeploy.Text = "Deploy Missing VMs"
|
||||
$buttonDeploy.Size = New-Object System.Drawing.Size(120, 30)
|
||||
$buttonDeploy.Location = New-Object System.Drawing.Point(140, 320)
|
||||
$buttonDeploy.Add_Click({
|
||||
$missingVMs = Get-MissingVMs
|
||||
if ($missingVMs.Count -eq 0) {
|
||||
[System.Windows.Forms.MessageBox]::Show("Es fehlen keine VMs.")
|
||||
return
|
||||
}
|
||||
|
||||
foreach ($hostData in $missingVMs) {
|
||||
# Create custom ISO for host (implement your own logic)
|
||||
$customIsoPath = "C:\path\to\custom.iso"
|
||||
|
||||
# Upload ISO to Proxmox
|
||||
$isoUploadPath = "/var/lib/vz/template/iso/custom.iso"
|
||||
$null = Upload-PveFile -NodeName $bestNode.Node -ContentType iso -FilePath $customIsoPath -Storage local
|
||||
|
||||
# Get cluster nodes and their usage
|
||||
$nodes = Get-PveNode
|
||||
$nodeUsages = @()
|
||||
foreach ($node in $nodes) {
|
||||
$nodeUsages += Get-NodeUsage -node $node.name
|
||||
}
|
||||
|
||||
# Select the best node based on available resources
|
||||
$bestNode = $nodeUsages | Sort-Object {[math]::Min($_.MaxMem - $_.Mem, $_.MaxDisk - $_.Disk)} -Descending | Select-Object -First 1
|
||||
Write-Host "Der beste Node zur Erstellung der VM ist: $($bestNode.Node)"
|
||||
|
||||
# VM creation parameters
|
||||
$vmId = $hostData.'VM-ID'
|
||||
$vmName = $hostData.'VM-Name'
|
||||
$vmCores = $hostData.'Cores'
|
||||
$vmMemory = $hostData.'Memory'
|
||||
$vmDiskSize = $hostData.'Disk-Size'
|
||||
$isoFile = "local:iso/custom.iso"
|
||||
|
||||
# Create and start the VM
|
||||
Create-VM -node $bestNode.Node -vmId $vmId -vmName $vmName -vmCores $vmCores -vmMemory $vmMemory -vmDiskSize $vmDiskSize -isoFile $isoFile
|
||||
}
|
||||
|
||||
[System.Windows.Forms.MessageBox]::Show("Alle fehlenden VMs wurden erstellt.")
|
||||
})
|
||||
|
||||
$form.Controls.Add($listBox)
|
||||
$form.Controls.Add($buttonCheck)
|
||||
$form.Controls.Add($buttonDeploy)
|
||||
|
||||
# Load existing VMs into the listbox
|
||||
$listBox.Items.Clear()
|
||||
$vms = Get-ProxmoxVMs
|
||||
foreach ($vm in $vms) {
|
||||
$listBox.Items.Add($vm.name)
|
||||
}
|
||||
|
||||
$form.ShowDialog()
|
||||
Reference in New Issue
Block a user