From 8c0314f901daa5da9f48f993bc16c398fcc2e844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miha=20Marki=C4=8D?= Date: Thu, 21 Feb 2019 13:53:02 +0100 Subject: [PATCH] Closes #59 Adds docker ps command --- README.md | 2 +- src/Cake.Docker.Tests/Ps/DockerPsFixture.cs | 34 ++++++++++++ src/Cake.Docker.Tests/Ps/DockerPsTest.cs | 45 ++++++++++++++++ .../Container/Ps/Docker.Aliases.Ps.cs | 31 +++++++++++ .../Container/Ps/DockerContainerPsSettings.cs | 52 +++++++++++++++++++ 5 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 src/Cake.Docker.Tests/Ps/DockerPsFixture.cs create mode 100644 src/Cake.Docker.Tests/Ps/DockerPsTest.cs create mode 100644 src/Cake.Docker/Container/Ps/Docker.Aliases.Ps.cs create mode 100644 src/Cake.Docker/Container/Ps/DockerContainerPsSettings.cs diff --git a/README.md b/README.md index 5f747dc..a38cb89 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Including addin in cake script is easy. **BREAKING** Starting with 0.8.0 command's setting types that haven't been composed of all words have changed to full name. i.e. DockerBuildSettings to DockerImageBuildSettings). +- [DockerPs](https://docs.docker.com/engine/reference/commandline/ps/) v0.9.9 - [DockerComposeLogs](https://docs.docker.com/compose/reference/logs/) v0.9.7 - [DockerComposeExec](https://docs.docker.com/compose/reference/exec/) v0.9.2 - DockerCustomCommand (*can execute any command*) v0.8.4 @@ -60,7 +61,6 @@ Including addin in cake script is easy. - [DockerLogin](https://docs.docker.com/engine/reference/commandline/login/) v0.4.0 - [DockerPush](https://docs.docker.com/engine/reference/commandline/push/) v0.4.0 - [DockerTag](https://docs.docker.com/engine/reference/commandline/tag/) v0.4.0 -- [DockerPs](https://docs.docker.com/engine/reference/commandline/ps/) v0.3.0 - [DockerRm](https://docs.docker.com/engine/reference/commandline/rm/) - [DockerRmi](https://docs.docker.com/engine/reference/commandline/rmi/) - [DockerStop](https://docs.docker.com/engine/reference/commandline/stop/) diff --git a/src/Cake.Docker.Tests/Ps/DockerPsFixture.cs b/src/Cake.Docker.Tests/Ps/DockerPsFixture.cs new file mode 100644 index 0000000..bc7fea9 --- /dev/null +++ b/src/Cake.Docker.Tests/Ps/DockerPsFixture.cs @@ -0,0 +1,34 @@ +using Cake.Core; +using Cake.Core.Diagnostics; +using Cake.Core.IO; +using Cake.Testing.Fixtures; +using System; + +namespace Cake.Docker.Tests.Run +{ + public class DockerPsFixture : ToolFixture, ICakeContext + { + IFileSystem ICakeContext.FileSystem => FileSystem; + + ICakeEnvironment ICakeContext.Environment => Environment; + + public ICakeLog Log => Log; + + ICakeArguments ICakeContext.Arguments => throw new NotImplementedException(); + + IProcessRunner ICakeContext.ProcessRunner => ProcessRunner; + + public IRegistry Registry => Registry; + + public ICakeDataResolver Data => throw new NotImplementedException(); + + public DockerPsFixture(): base("docker") + { + ProcessRunner.Process.SetStandardOutput(new string[] { }); + } + protected override void RunTool() + { + this.DockerPs(Settings); + } + } +} diff --git a/src/Cake.Docker.Tests/Ps/DockerPsTest.cs b/src/Cake.Docker.Tests/Ps/DockerPsTest.cs new file mode 100644 index 0000000..bd0848d --- /dev/null +++ b/src/Cake.Docker.Tests/Ps/DockerPsTest.cs @@ -0,0 +1,45 @@ +using NUnit.Framework; + +namespace Cake.Docker.Tests.Run +{ + [TestFixture] + public class DockerPsTest + { + [Test] + public void WhenNoTruncIsSet_CommandLineIsCorrect() + { + var fixture = new DockerPsFixture + { + Settings = new DockerContainerPsSettings { NoTrunc = true }, + }; + + var actual = fixture.Run(); + + Assert.That(actual.Args, Is.EqualTo("ps --no-trunc")); + } + [Test] + public void WhenNoTruncIsNotSet_CommandLineIsCorrect() + { + var fixture = new DockerPsFixture + { + Settings = new DockerContainerPsSettings { NoTrunc = false }, + }; + + var actual = fixture.Run(); + + Assert.That(actual.Args, Is.EqualTo("ps")); + } + [Test] + public void WhenQuietIsSet_CommandLineIsCorrect() + { + var fixture = new DockerPsFixture + { + Settings = new DockerContainerPsSettings { Quiet = true }, + }; + + var actual = fixture.Run(); + + Assert.That(actual.Args, Is.EqualTo("ps --quiet")); + } + } +} diff --git a/src/Cake.Docker/Container/Ps/Docker.Aliases.Ps.cs b/src/Cake.Docker/Container/Ps/Docker.Aliases.Ps.cs new file mode 100644 index 0000000..d787984 --- /dev/null +++ b/src/Cake.Docker/Container/Ps/Docker.Aliases.Ps.cs @@ -0,0 +1,31 @@ +using Cake.Core; +using Cake.Core.Annotations; +using System; +using System.Linq; + +namespace Cake.Docker +{ + // Contains functionality for working with ps command. + partial class DockerAliases + { + + /// + /// List containers given . + /// + /// The context. + /// The settings. + /// Output text. + /// Return value are the lines from stdout. This method will redirect stdout and it won't be available for capture. + [CakeMethodAlias] + public static string DockerPs(this ICakeContext context, DockerContainerPsSettings settings) + { + if (context == null) + { + throw new ArgumentNullException("context"); + } + var runner = new GenericDockerRunner(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); + var result = runner.RunWithResult("ps", settings ?? new DockerContainerPsSettings(), r => r.ToArray()); + return string.Join("\n", result); + } + } +} diff --git a/src/Cake.Docker/Container/Ps/DockerContainerPsSettings.cs b/src/Cake.Docker/Container/Ps/DockerContainerPsSettings.cs new file mode 100644 index 0000000..2f4e75f --- /dev/null +++ b/src/Cake.Docker/Container/Ps/DockerContainerPsSettings.cs @@ -0,0 +1,52 @@ +using System; + +namespace Cake.Docker +{ + /// + /// Settings for docker ps [OPTIONS] + /// List containers + /// + public sealed partial class DockerContainerPsSettings : AutoToolSettings + { + /// + /// --all , -a + /// Show all containers (default shows just running) + /// + public bool? All { get; set; } + /// + /// --filter , -f + /// Filter output based on conditions provided + /// + public string Filter { get; set; } + /// + /// --format + /// Pretty-print containers using a Go template + /// + public string Format { get; set; } + /// + /// --last , -n + /// Show n last created containers (includes all states) + /// + public int Last { get; set; } + /// + /// --latest , -l + /// Show the latest created container (includes all states) + /// + public bool? Latest { get; set; } + /// + /// --no-trunc + /// Don’t truncate output + /// + public bool? NoTrunc { get; set; } + /// + /// --quiet , -q + /// Only display numeric IDs + /// + public bool? Quiet { get; set; } + /// + /// --size , -s + /// Display total file sizes + /// + public bool? Size { get; set; } + } +} \ No newline at end of file