164 lines
5.7 KiB
PowerShell
164 lines
5.7 KiB
PowerShell
class DockerContainers { #: System.Management.Automation.IValidateSetValuesGenerator {
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[bool]$Strict) {
|
|
$local:possibleValues = $(
|
|
docker container ls -a --no-trunc --format "{{.Names}}"
|
|
)
|
|
return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerContainers]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
class DockerImages { #: System.Management.Automation.IValidateSetValuesGenerator {
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[bool]$Strict) {
|
|
$local:possibleValues = $(
|
|
docker image ls --format "{{.Repository}}"
|
|
)
|
|
return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerImages]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
class DockerNetworks {
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[bool]$Strict) {
|
|
$local:possibleValues = $(
|
|
docker network ls --no-trunc --format "{{.Name}}"
|
|
)
|
|
return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerNetworks]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
if( -not (Get-Command docker-compose -ErrorAction Ignore) ) { return }
|
|
class DockerComposeCommands { #: System.Management.Automation.IValidateSetValuesGenerator {
|
|
static [string[]] $cachedCommands = @()
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[string]$subcommand,[bool]$Strict) {
|
|
$local:gate = $false
|
|
|
|
$local:possibleValues = $(
|
|
docker-compose $subcommand --help | Out-String -Stream |
|
|
ForEach-Object {
|
|
if( $wordToComplete -match '^-' ) {
|
|
if( $_ -match "^ *(-.*) (\w.*)$" ) {
|
|
$matches[1] -split ', ' | ForEach-Object { $_ -split ' ' | Select-Object -First 1 }
|
|
}
|
|
} elseif( -not $gate ) {
|
|
if ( $_.trim() -eq 'Commands:' ) { $gate = $true }
|
|
} else {
|
|
$null = $_ -match '^\W+(\w+)\W+(.+)$';
|
|
$Matches[1];
|
|
}
|
|
}
|
|
)
|
|
[DockerComposeCommands]::cachedCommands = $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
return [DockerComposeCommands]::cachedCommands;
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerComposeCommands]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
$global:_DockerComposeCommandCompleter = [ScriptBlock]{
|
|
param(
|
|
$commandName,
|
|
$parameterName,
|
|
$wordToComplete,
|
|
$commandAst,
|
|
$fakeBoundParameters
|
|
)
|
|
[DockerComposeCommands]::_GetValidValues($wordToComplete,"",$true)
|
|
}
|
|
|
|
class DockerComposeServices { #: System.Management.Automation.IValidateSetValuesGenerator {
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[string]$Path,[bool]$Strict) {
|
|
$local:possibleValues = $(
|
|
dco -ProjectPath $Path config --services
|
|
)
|
|
return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
}
|
|
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[bool]$Strict) {
|
|
return [DockerComposeServices]::_GetValidValues($wordToComplete,'.',$true)
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerComposeServices]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
$null = [DockerComposeCommands]::_GetValidValues("","",$true)
|
|
$global:_DockerComposeCompleter = [ScriptBlock]{
|
|
param(
|
|
$commandName,
|
|
$parameterName,
|
|
$wordToComplete,
|
|
$commandAst,
|
|
$fakeBoundParameters,
|
|
$subCommand
|
|
)
|
|
$local:cmd = $subCommand
|
|
if( -not $cmd ) {
|
|
$cmd = $commandAst.CommandElements |
|
|
Where-Object Value -in ([DockerComposeCommands]::cachedCommands) |
|
|
Select-Object -First 1
|
|
}
|
|
$local:ProjectPath = $fakeBoundParameters.ProjectPath
|
|
if( -not $ProjectPath ) { $ProjectPath=@($PWD) }
|
|
if( -not $cmd -or $wordToComplete -match '^-' ) {
|
|
[DockerComposeCommands]::_GetValidValues($wordToComplete,$cmd,$true)
|
|
} else {
|
|
switch($cmd){
|
|
'down' {}
|
|
'images' {}
|
|
'config' {}
|
|
default {
|
|
[DockerComposeServices]::_GetValidValues($wordToComplete,$ProjectPath,$true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class DockerComposeDirs { #: System.Management.Automation.IValidateSetValuesGenerator {
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[string]$Path,[bool]$Strict) {
|
|
$local:possibleValues = $(
|
|
Get-ChildItem -LiteralPath $Path -Directory -Depth 3 |
|
|
Where-Object { $_ |
|
|
Get-ChildItem -Include 'docker-compose.y*l' |
|
|
Where-Object Extension -in '.yml','.yaml'
|
|
} | ForEach-Object {
|
|
$_.FullName.Replace($(Join-Path $PWD ""),'')
|
|
}
|
|
)
|
|
return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues -Strict:$Strict );
|
|
}
|
|
|
|
static [string[]] _GetValidValues([string]$wordToComplete,[bool]$Strict) {
|
|
return [DockerComposeDirs]::_GetValidValues($wordToComplete,'.',$true)
|
|
}
|
|
|
|
[String[]] GetValidValues() {
|
|
return [DockerComposeDirs]::_GetValidValues('',$true)
|
|
}
|
|
}
|
|
|
|
$global:_DockerComposeDirsCompleter = [ScriptBlock]{
|
|
param(
|
|
$commandName,
|
|
$parameterName,
|
|
$wordToComplete,
|
|
$commandAst,
|
|
$fakeBoundParameters
|
|
)
|
|
[DockerComposeDirs]::_GetValidValues($wordToComplete,$true)
|
|
}
|
|
|