test success

master
xieguigang 7 years ago
parent f442403b63
commit ebf234089a

@ -7,4 +7,14 @@
Dim OFFICIAL As String
Dim AUTOMATED As String
End Structure
Public Structure Container
Dim CONTAINER_ID As String
Dim IMAGE As Image
Dim COMMAND As String
Dim CREATED As String
Dim STATUS As String
Dim PORTS As String
Dim NAMES As String
End Structure
End Namespace

@ -0,0 +1,26 @@
Imports System.Runtime.CompilerServices
Imports Microsoft.VisualBasic.Text
Imports r = System.Text.RegularExpressions.Regex
Namespace Captures
Module ParserHelpers
<Extension>
Public Iterator Function ParseTable(Of T)(text$, creator As Func(Of String(), T)) As IEnumerable(Of T)
Dim summary$() = text.Trim.LineTokens
Dim header = r.Matches(summary(Scan0), "(\S+\s+)|(\S+)").ToArray
Dim fieldLength%() = header.Select(AddressOf Len).ToArray
For Each line As String In summary.Skip(1)
Dim tokens$() = FormattedParser _
.FieldParser(line, fieldLength) _
.ToArray
Yield creator(tokens)
Next
End Function
End Module
End Namespace

@ -1,6 +1,6 @@
Imports Microsoft.VisualBasic.Text
Imports r = System.Text.RegularExpressions.Regex

Imports Docker.Captures
''' <summary>
''' Docker commands
''' </summary>
@ -84,33 +84,42 @@ Public Module Commands
' Run 'docker COMMAND --help' for more information on a command.
ReadOnly ps As New PowerShell
ReadOnly powershell As New PowerShell
''' <summary>
''' Search the Docker Hub for images
''' </summary>
''' <param name="term"></param>
''' <returns></returns>
Public Iterator Function Search(term As String) As IEnumerable(Of Captures.Search)
Dim summary$() = ps _
.RunScript($"docker search {term}") _
.Trim _
.LineTokens
Dim header = r.Matches(summary(Scan0), "(\S+\s+)|(\S+)").ToArray
Dim fieldLength%() = header.Select(AddressOf Len).ToArray
For Each line As String In summary.Skip(1)
Dim tokens$() = FormattedParser _
.FieldParser(line, fieldLength) _
.ToArray
Public Function Search(term As String) As IEnumerable(Of Search)
Return powershell($"docker search {term}") _
.ParseTable(Function(tokens)
Return New Search With {
.NAME = Image.ParseEntry(tokens(0)),
.DESCRIPTION = tokens(1).Trim,
.STARS = tokens(2).Trim,
.OFFICIAL = tokens(3).Trim,
.AUTOMATED = tokens(4).Trim
}
End Function)
End Function
Yield New Captures.Search With {
.NAME = Image.ParseEntry(tokens(0)),
.DESCRIPTION = tokens(1).Trim,
.STARS = tokens(2).Trim,
.OFFICIAL = tokens(3).Trim,
.AUTOMATED = tokens(4).Trim
}
Next
''' <summary>
''' List containers
''' </summary>
''' <returns></returns>
Public Function PS() As IEnumerable(Of Container)
Return powershell("docker ps") _
.ParseTable(Function(tokens)
Return New Container With {
.CONTAINER_ID = tokens(0).Trim,
.IMAGE = Image.ParseEntry(tokens(1)),
.COMMAND = tokens(2).Trim,
.CREATED = tokens(3).Trim,
.STATUS = tokens(4).Trim,
.PORTS = tokens(5),
.NAMES = tokens(6).Trim
}
End Function)
End Function
End Module

@ -94,6 +94,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Captures\Models.vb" />
<Compile Include="Captures\ParserHelpers.vb" />
<Compile Include="Image.vb" />
<Compile Include="PowerShell.vb" />
<Compile Include="Commands.vb" />

@ -1,6 +1,7 @@
Imports System.Collections.ObjectModel
Imports System.Management.Automation
Imports System.Management.Automation.Runspaces
Imports System.Runtime.CompilerServices
Imports System.Text
''' <summary>
@ -8,6 +9,13 @@ Imports System.Text
''' </summary>
Public Class PowerShell
Default Public ReadOnly Property EVal(command As String) As String
<MethodImpl(MethodImplOptions.AggressiveInlining)>
Get
Return RunScript(scriptText:=command)
End Get
End Property
''' <summary>
''' Takes script text as input and runs it, then converts the results to a string to return to the user
''' </summary>

@ -7,6 +7,8 @@ Module Module1
Call Console.WriteLine(ps.RunScript("docker ps"))
Call Console.WriteLine(Docker.PS.ToArray.GetJson)
Call Console.WriteLine(Docker.Search("centos").ToArray.GetJson)
Pause()

Loading…
Cancel
Save