psvagrant.psm1
# # Based on the great work by Posh-git! # # Vagrant status is slower then is resonable for a prompt to render. I am making some assumptions # by scraping the .vagrant folder for any id files that should represent active/aborted some sort # of Vagrant machine activity. # # function Get-VagrantFile { $fileName = 'Vagrantfile' $base = Get-Item -Force . if ($base.PSProvider.Name -ne 'FileSystem') { return $FALSE } $vagrantFile = Join-Path $base.FullName $fileName if (Test-Path -LiteralPath $vagrantFile) { return $TRUE } return $FALSE } function Get-VagrantDir { $dirName = '.vagrant' $base = Get-Item -Force . if ($base.PSProvider.Name -ne 'FileSystem') { return $FALSE } $vagrantDir = Join-Path $base.FullName $dirName if (Test-Path -LiteralPath $vagrantDir) { return $vagrantDir } return $FALSE } function Get-VagrantEnvIndex { if ($env:VAGRANT_HOME) { $vagrantEnvDir = $env:VAGRANT_HOME } else { $vagrantEnvDir = Join-Path -Path $env:USERPROFILE -ChildPath '.vagrant.d' } if (Test-Path -Path $vagrantEnvDir) { Get-ChildItem -Path $vagrantEnvDir -Recurse -File -Filter 'index' | ForEach-Object { $_.FullName } } } function Write-VagrantStatusSimple { $vagrantFolder = Get-VagrantDir if ((Test-Path $vagrantFolder) -and (Get-VagrantFile)) { $vagrantActive = $FALSE $items = Get-ChildItem -Path $vagrantFolder -Recurse -File -Filter 'id' foreach ($item in $items) { if ($item.ToString().Contains("id")) { $vagrantActive = $TRUE } else { $vagrantActive = $FALSE } } if ($vagrantActive) { Write-Host '[' -NoNewline Write-Host '^' -ForegroundColor Green -NoNewline Write-Host ']' -NoNewline } else { Write-Host '[' -NoNewline Write-Host '-' -ForegroundColor Gray -NoNewline Write-Host ']' -NoNewline } } elseif (Get-VagrantFile) { Write-Host '[' -NoNewline Write-Host '-' -ForegroundColor Gray -NoNewline Write-Host ']' -NoNewline } } function Write-VagrantStatusDetailed { $vagrantFolder = Get-VagrantDir $index = Get-VagrantEnvIndex -Raw if (@($index).count -eq 0) { return } try { $vagrantEnvJson = Get-Content(Get-VagrantEnvIndex -Raw) | ConvertFrom-Json } catch { Write-Host '[' -NoNewline Write-Host "!!!" -ForegroundColor Red -NoNewline Write-Host ']' -NoNewline return } $machines = @() $d = 0 $r = 0 $a = 0 if ((Test-Path $vagrantFolder) -and (Get-VagrantFile)) { $items = Get-ChildItem -Path $vagrantFolder -Recurse -File -Filter 'index_uuid' | % { $_.FullName } if ($items) { foreach ($item in $items) { if ($item.ToString().Contains("index_uuid")) { $machines = $machines + (get-content $item) } } foreach ($machine in $machines) { foreach ($envMachine in $vagrantEnvJson.machines) { $stateTemp = $envMachine.$machine | select -ExpandProperty state switch ($stateTemp) { 'aborted' { $d += 1; break} 'running' {$r += 1; break} 'poweroff' {$d += 1; break} default { break} } } } Write-Host '[' -NoNewline Write-Host "D:${d} " -ForegroundColor Gray -NoNewline Write-Host "R:${r}" -ForegroundColor Green -NoNewline Write-Host ']' -NoNewline } else { Write-Host '[' -NoNewline Write-Host "-" -ForegroundColor Gray -NoNewline Write-Host ']' -NoNewline } } elseif (Get-VagrantFile) { Write-Host '[' -NoNewline Write-Host "-" -ForegroundColor Gray -NoNewline Write-Host ']' -NoNewline } } |