protected override async Task <CmdResult> RunRawAsyncImpl(CliString arguments, string?standardInput, CancellationToken cancellationToken) { var consulIsRunning = SysProcess.GetProcesses() .Any(p => p.ProcessName == "consul" || p.ProcessName == "consul.exe"); var now = DateTimeOffset.Now; if (consulIsRunning) { return(new CmdResult(null !, 0, now, now, "Consul service is already running.")); } var targetCmd = TargetCmdFactory.Invoke(); // If the repo w/ Consul is supposed to be fetched, it is fetched at this point targetCmd.EchoMode = EchoMode; targetCmd.ResultValidation = ResultValidation; var consulTask = targetCmd.RunRawAsync(arguments, standardInput, cancellationToken); var completedTask = await Task.WhenAny(consulTask, Task.Delay(CheckDelay, cancellationToken)); if (completedTask == consulTask) { return(await consulTask); } return(new CmdResult(null !, 0, now, now, "Consul service seems to be started successfully.")); }
public void ListTest() { var actual = CliFormatter.Format(new Arguments { Flags = new CliList <string> { "x", "yy" } }); var q1 = CliString.Quote("x"); // Depends on OS, so can't use " or ' var q2 = CliString.Quote("yy"); actual.Value.Should().Be($"-flag {q1} -flag {q2}"); }
public async Task <CmdResult> InitAsync( CliString dir = default, InitArguments?arguments = null, CancellationToken cancellationToken = default) { // A workaround for this issue: // https://github.com/hashicorp/terraform/issues/21393 var oldEnv = EnvironmentVariables; EnvironmentVariables = oldEnv.SetItem("TF_WORKSPACE", "default"); try { return(await RunRawAsync("init", arguments ?? new InitArguments(), dir, cancellationToken) .ConfigureAwait(false)); } finally { EnvironmentVariables = oldEnv; } }
public async Task FormatterMockTest() { var formatter = new Mock <ICliFormatter>(); var terraformEcho = new TerraformCmd { EchoMode = true, CliFormatter = formatter.Object }; var applyArguments = new ApplyArguments(); var formattedArguments = CliString.New("arguments"); formatter .Setup(x => x.Format(It.IsAny <object>(), It.IsAny <CliArgumentAttribute>())) .Returns(formattedArguments); var dir = "dir"; var result = (await terraformEcho.ApplyAsync(dir, arguments: applyArguments)).StandardOutput.Trim(); result.Should().Be(terraformEcho + " apply arguments dir"); formatter.Verify(x => x.Format(applyArguments, It.IsAny <CliArgumentAttribute>())); }
public async Task FetchAsync(CancellationToken cancellationToken = default) { using var _ = await FileLock .LockAsync(TargetPath + ".lock", cancellationToken) .ConfigureAwait(false); async Task TryAsync() { var git = GitCmdFactory.Invoke(); git.ResultValidation = CommandResultValidation.ZeroExitCode; var gitFolder = TargetPath & ".git"; if (!Directory.Exists(gitFolder)) { if (!Directory.Exists(TargetPath)) { Directory.CreateDirectory(TargetPath); } git.WorkingDirectory = ""; // It has to be non-target path on cloning await git .RunAsync("clone" + CliString.Quote(SourceUrl) + CliString.Quote(TargetPath), cancellationToken) .ConfigureAwait(false); git.WorkingDirectory = TargetPath; await git .RunAsync("checkout" + new CliString(SourceRevision), cancellationToken) .ConfigureAwait(false); } else { git.WorkingDirectory = TargetPath; var mustFetch = AlwaysFetch; if (!AlwaysFetch) { using (git.ChangeResultValidation(0)) { var r = await git .RunAsync("rev-parse --short=10 HEAD", cancellationToken) .ConfigureAwait(false); mustFetch |= r.ExitCode != 0; mustFetch |= r.StandardOutput.Trim() != SourceRevision; } } if (mustFetch) { await git .RunAsync("reset --hard HEAD", cancellationToken) .ConfigureAwait(false); await git .RunAsync("fetch origin", cancellationToken) .ConfigureAwait(false); await git .RunAsync("checkout" + new CliString(SourceRevision), cancellationToken) .ConfigureAwait(false); } } } try { await TryAsync().ConfigureAwait(false); } catch (CommandExecutionException e) { if (!e.Message.Contains("non-zero exit code")) { throw; } Directory.Delete(TargetPath, true); await TryAsync().ConfigureAwait(false); } }
public Task <CmdResult> WorkspaceListAsync( CliString dirName = default, CancellationToken cancellationToken = default) => RunRawAsync("workspace list", null, dirName, cancellationToken);
public Task <CmdResult> WorkspaceSelectAsync( CliString workspaceName, CliString dirName = default, CancellationToken cancellationToken = default) => RunRawAsync("workspace select", null, workspaceName + dirName, cancellationToken);
public Task <CmdResult> WorkspaceDeleteAsync( CliString workspaceName, CliString dirName = default, WorkspaceDeleteArguments?arguments = null, CancellationToken cancellationToken = default) => RunRawAsync("workspace delete", arguments ?? new WorkspaceDeleteArguments(), workspaceName + dirName, cancellationToken);
public Task <CmdResult> DestroyAsync( CliString dir = default, DestroyArguments?arguments = null, CancellationToken cancellationToken = default) => RunRawAsync("destroy", arguments ?? new DestroyArguments(), dir, cancellationToken);
public Task <CmdResult> FmtAsync( CliString dir = default, FmtArguments?arguments = null, CancellationToken cancellationToken = default) => RunRawAsync("fmt", arguments ?? new FmtArguments(), dir, cancellationToken);
public Task <CmdResult> ApplyAsync( CliString dir = default, ApplyArguments?arguments = null, CancellationToken cancellationToken = default) => RunRawAsync("apply", arguments ?? new ApplyArguments(), dir, cancellationToken);