protected override void ProcessRecord() { if (Sink != null && Sink.Length > 0) { foreach (string sinkName in Sink) { string formattedSinkName = PrefixProjectToSinkName(sinkName, Project); try { ProjectsResource.SinksResource.GetRequest getRequest = Service.Projects.Sinks.Get(formattedSinkName); WriteObject(getRequest.Execute()); } catch (GoogleApiException ex) when(ex.HttpStatusCode == HttpStatusCode.NotFound) { WriteResourceMissingError( exceptionMessage: $"Sink '{sinkName}' does not exist in project '{Project}'.", errorId: "SinkNotFound", targetObject: sinkName); } } } else { ProjectsResource.SinksResource.ListRequest listRequest = Service.Projects.Sinks.List($"projects/{Project}"); do { ListSinksResponse response = listRequest.Execute(); if (response.Sinks != null) { WriteObject(response.Sinks, true); } listRequest.PageToken = response.NextPageToken; }while (!Stopping && listRequest.PageToken != null); } }
protected override LoggingBaseServiceRequest <LogSink> GetRequest(LogSink logSink) { string formattedSinkName = PrefixProjectToSinkName(SinkName, Project); bool destinationNotSpecified = GcsBucketDestination == null && BigQueryDataSetDestination == null && PubSubTopicDestination == null; // First checks whether the sink exists or not. try { ProjectsResource.SinksResource.GetRequest getRequest = Service.Projects.Sinks.Get(formattedSinkName); LogSink existingSink = getRequest.Execute(); // If destinations are not given, we still have to set the destination to the existing log sink destination. // Otherwise, the API will throw error. if (destinationNotSpecified) { logSink.Destination = existingSink.Destination; } } catch (GoogleApiException ex) when(ex.HttpStatusCode == HttpStatusCode.NotFound) { // If log sink does not exist to begin with, then we at least need a destination for the sink. // So simply throws a terminating error if we don't have that. if (destinationNotSpecified) { // Here we throw terminating error because the cmdlet cannot proceed without a valid sink. string exceptionMessage = $"Sink '{SinkName}' does not exist in project '{Project}'." + "Please use New-GcLogSink cmdlet to create it (Set-GcLogSink can only create a sink if you supply a destination)."; ErrorRecord errorRecord = new ErrorRecord( new ArgumentException(exceptionMessage), "SinkNotFound", ErrorCategory.ResourceUnavailable, SinkName); ThrowTerminatingError(errorRecord); } // Otherwise, returns a create request to create the log sink. ProjectsResource.SinksResource.CreateRequest createRequest = Service.Projects.Sinks.Create(logSink, $"projects/{Project}"); if (UniqueWriterIdentity.IsPresent) { createRequest.UniqueWriterIdentity = UniqueWriterIdentity.ToBool(); } return(createRequest); } ProjectsResource.SinksResource.UpdateRequest updateRequest = Service.Projects.Sinks.Update(logSink, formattedSinkName); if (UniqueWriterIdentity.IsPresent) { updateRequest.UniqueWriterIdentity = UniqueWriterIdentity.ToBool(); } return(updateRequest); }