private static async Task PackageApplicationAsync(OutputContext output, Application application, DirectoryInfo outputDirectory, string applicationName, string environment) { using var step = output.BeginStep("Writing Application Manifests..."); var outputFile = Path.Combine(outputDirectory.FullName, $"{applicationName}-{environment}.yaml"); output.WriteInfoLine($"Writing output to '{outputFile}'."); File.Delete(outputFile); using var stream = File.OpenWrite(outputFile); using var writer = new StreamWriter(stream, Encoding.UTF8, leaveOpen: true); if (application.Globals.DeploymentKind == DeploymentKind.None) { // No extra steps } else if (application.Globals.DeploymentKind == DeploymentKind.Kubernetes) { await ApplicationYamlWriter.WriteAsync(output, writer, application); } else if (application.Globals.DeploymentKind == DeploymentKind.Oam) { await OamApplicationGenerator.WriteOamApplicationAsync(writer, output, application, applicationName, environment); } else { throw new InvalidOperationException($"Unknown DeploymentKind: " + application.Globals.DeploymentKind); } step.MarkComplete(); }
private static async Task PackageApplicationAsync(OutputContext output, Application application, string applicationName, string environment) { using var step = output.BeginStep("Deploying Application Manifests..."); using var tempFile = TempFile.Create(); output.WriteInfoLine($"Writing output to '{tempFile.FilePath}'."); { using var stream = File.OpenWrite(tempFile.FilePath); using var writer = new StreamWriter(stream, Encoding.UTF8, leaveOpen: true); if (application.Globals.DeploymentKind == DeploymentKind.None) { // No extra steps } else if (application.Globals.DeploymentKind == DeploymentKind.Kubernetes) { await ApplicationYamlWriter.WriteAsync(output, writer, application); } else if (application.Globals.DeploymentKind == DeploymentKind.Oam) { await OamApplicationGenerator.WriteOamApplicationAsync(writer, output, application, applicationName, environment); } else { throw new InvalidOperationException($"Unknown DeploymentKind: " + application.Globals.DeploymentKind); } } output.WriteDebugLine("Running 'kubectl apply'."); output.WriteCommandLine("kubectl", $"apply -f \"{tempFile.FilePath}\""); var capture = output.Capture(); var exitCode = await Process.ExecuteAsync( $"kubectl", $"apply -f \"{tempFile.FilePath}\"", System.Environment.CurrentDirectory, stdOut : capture.StdOut, stdErr : capture.StdErr); output.WriteDebugLine($"Done running 'kubectl apply' exit code: {exitCode}"); if (exitCode != 0) { throw new CommandException("'kubectl apply' failed."); } output.WriteInfoLine($"Deployed application '{applicationName}'."); step.MarkComplete(); }