protected override Task Execute(RunningDeployment deployment, Dictionary <string, string> environmentVariables) { using var cli = new TerraformCliExecutor(log, fileSystem, commandLineRunner, deployment, environmentVariables); cli.ExecuteCommand("apply", "-no-color", "-auto-approve", cli.TerraformVariableFiles, cli.ActionParams); // Attempt to get the outputs. This will fail if none are defined in versions prior to v0.11.15 // Please note that we really don't want to log the following command output as it can contain sensitive variables etc. hence the IgnoreCommandOutput() if (cli.ExecuteCommand(out var result, false, "output", "-no-color", "-json") .ExitCode != 0) { return(this.CompletedTask()); } foreach (var(name, token) in OutputVariables(result)) { bool.TryParse(token.SelectToken("sensitive")?.ToString(), out var isSensitive); var json = token.ToString(); var value = token.SelectToken("value")?.ToString(); log.SetOutputVariable($"TerraformJsonOutputs[{name}]", json, deployment.Variables, isSensitive); if (value != null) { log.SetOutputVariable($"TerraformValueOutputs[{name}]", value, deployment.Variables, isSensitive); } log.Info( $"Saving {(isSensitive ? "sensitive " : string.Empty)}variable 'Octopus.Action[{deployment.Variables["Octopus.Action.StepName"]}].Output.TerraformJsonOutputs[\"{name}\"]' with the JSON value only of '{json}'"); if (value != null) { log.Info( $"Saving {(isSensitive ? "sensitive " : string.Empty)}variable 'Octopus.Action[{deployment.Variables["Octopus.Action.StepName"]}].Output.TerraformValueOutputs[\"{name}\"]' with the value only of '{value}'"); } } return(this.CompletedTask()); }
protected override Task Execute(RunningDeployment deployment, Dictionary <string, string> environmentVariables) { using (var cli = new TerraformCliExecutor(log, fileSystem, commandLineRunner, deployment, environmentVariables)) { cli.ExecuteCommand("destroy", "-auto-approve", "-no-color", cli.TerraformVariableFiles, cli.ActionParams) .VerifySuccess(); } return(this.CompletedTask()); }
protected override Task Execute(RunningDeployment deployment, Dictionary <string, string> environmentVariables) { string results; using (var cli = new TerraformCliExecutor(log, fileSystem, commandLineRunner, deployment, environmentVariables)) { if (cli.Version.IsLessThan(TerraformPlanJsonMinVersion) && deployment.Variables.GetFlag(TerraformSpecialVariables.Action.Terraform.PlanJsonOutput)) { log.Warn($"JSON output is not supported in versions of Terraform prior to {TerraformPlanJsonMinVersion}. The version of Terraform being used is {cli.Version}"); } var commandResult = cli.ExecuteCommand(out results, "plan", "-no-color", "-detailed-exitcode", GetOutputParameter(deployment, cli.Version), ExtraParameter, cli.TerraformVariableFiles, cli.ActionParams); var resultCode = commandResult.ExitCode; cli.VerifySuccess(commandResult, r => r.ExitCode == 0 || r.ExitCode == 2); log.Info( $"Saving variable 'Octopus.Action[{deployment.Variables["Octopus.Action.StepName"]}].Output.{TerraformSpecialVariables.Action.Terraform.PlanDetailedExitCode}' with the detailed exit code of the plan, with value '{resultCode}'."); log.SetOutputVariable(TerraformSpecialVariables.Action.Terraform.PlanDetailedExitCode, resultCode.ToString(), deployment.Variables); if (IsUsingPlanJSON(deployment, cli.Version)) { CaptureJsonOutput(deployment, results); } else { CapturePlainTextOutput(deployment, results); } } return(this.CompletedTask()); }