public override PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request) { _logger.LogInformation("Checking ADF pipeline status."); //Get pipeline status with provided run id PipelineRun pipelineRun; pipelineRun = _adfManagementClient.PipelineRuns.Get ( request.ResourceGroupName, request.OrchestratorName, request.RunId ); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); _logger.LogInformation("ADF pipeline status: " + pipelineRun.Status); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); //Final return detail return(new PipelineRunStatus() { PipelineName = request.PipelineName, RunId = pipelineRun.RunId, ActualStatus = pipelineRun.Status.Replace("Canceling", "Cancelling") //microsoft typo }); }
public override PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request) { _logger.LogInformation("Getting SYN pipeline status."); //Get pipeline status with provided run id PipelineRun pipelineRun; pipelineRun = _pipelineRunClient.GetPipelineRun ( request.RunId ); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); _logger.LogInformation("SYN pipeline status: " + pipelineRun.Status); //Final return detail return(new PipelineRunStatus() { PipelineName = request.PipelineName, RunId = pipelineRun.RunId, ActualStatus = pipelineRun.Status.Replace("Canceling", "Cancelling") //microsoft typo }); }
public override PipelineRunStatus CancelPipeline(PipelineRunRequest request) { _logger.LogInformation("Getting SYN pipeline current status."); PipelineRun pipelineRun; pipelineRun = _pipelineRunClient.GetPipelineRun ( request.RunId ); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); if (pipelineRun.Status == "InProgress" || pipelineRun.Status == "Queued") { _logger.LogInformation("Attempting to cancel SYN pipeline."); _pipelineRunClient.CancelPipelineRun ( request.RunId, isRecursive: request.RecursivePipelineCancel ); } else { _logger.LogInformation("ADF pipeline status: " + pipelineRun.Status); throw new InvalidRequestException("Target pipeline is not in a state that can be cancelled."); } //wait for cancelled state _logger.LogInformation("Checking ADF pipeline status after cancel request."); while (true) { pipelineRun = _pipelineRunClient.GetPipelineRun ( request.RunId ); _logger.LogInformation("Waiting for pipeline to cancel, current status: " + pipelineRun.Status); if (pipelineRun.Status == "Cancelled") { break; } Thread.Sleep(internalWaitDuration); } //Final return detail return(new PipelineRunStatus() { PipelineName = request.PipelineName, RunId = request.RunId, ActualStatus = pipelineRun.Status }); }
private async System.Threading.Tasks.Task <PipelineRun> CreatePipelineRunAsync( string pipelineRunName, PipelineRunRequest request, CancellationToken cancellationToken = default(CancellationToken)) { return(await _registryClient.PipelineRuns.CreateAsync( _registryConfiguration.ResourceGroupName, _registryConfiguration.Name, pipelineRunName, request, forceUpdateTag : null, cancellationToken).ConfigureAwait(false)); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest httpRequest, ILogger logger) { logger.LogInformation("CancelPipeline Function triggered by HTTP request."); logger.LogInformation("Parsing body from request."); PipelineRunRequest request = await new BodyReader(httpRequest).GetRunRequestBodyAsync(); request.Validate(logger); using (var service = PipelineService.GetServiceForRequest(request, logger)) { PipelineRunStatus result = service.CancelPipeline(request); logger.LogInformation("CancelPipeline Function complete."); return(new OkObjectResult(JsonConvert.SerializeObject(result))); } }
public async Task ExportImagesAsync(ExportPipeline exportPipeline) { var pipelineId = exportPipeline.Id; var pipelineRunName = options.ExportPipelineRun.PipelineRunName; var targetName = options.ExportPipelineRun.TargetName; var artifacts = options.ExportPipelineRun.Artifacts; Console.WriteLine($"Export PipelineRun properties:"); Console.WriteLine($" registryName: {options.ExportPipeline.RegistryName}"); Console.WriteLine($" pipelineRunName: {options.ExportPipelineRun.PipelineRunName}"); Console.WriteLine($" pipelineResourceId: {pipelineId}"); Console.WriteLine($" targetName: {options.ExportPipelineRun.TargetName}"); Console.WriteLine($" artifacts: {string.Join(Environment.NewLine, artifacts)}"); Console.WriteLine($"======================================================================"); var pipelineRunRequest = new PipelineRunRequest { PipelineResourceId = pipelineId, Target = new PipelineRunTargetProperties { Type = "AzureStorageBlob", Name = targetName }, Artifacts = artifacts }; Console.WriteLine($"Running pipelineRun {pipelineRunName}..."); var pipelineRun = await registryClient.PipelineRuns.CreateAsync(registryName : options.ExportPipeline.RegistryName, resourceGroupName : options.ExportPipeline.ResourceGroupName, pipelineRunName : pipelineRunName, request : pipelineRunRequest).ConfigureAwait(false); if (string.Equals(pipelineRun.ProvisioningState, "Failed", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine($"PipelineRun {pipelineRunName} failed with the inner error '{pipelineRun.Response.PipelineRunErrorMessage}'."); } else { Console.WriteLine($"PipelineRun {pipelineRunName} completed successfully!"); Console.WriteLine($"Uploaded blob {targetName} to {options.ExportPipeline.ContainerUri}."); } }
/// <summary> /// Creates a pipeline run for a container registry with the specified /// parameters /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group to which the container registry belongs. /// </param> /// <param name='registryName'> /// The name of the container registry. /// </param> /// <param name='pipelineRunName'> /// The name of the pipeline run. /// </param> /// <param name='request'> /// The request parameters for a pipeline run. /// </param> /// <param name='forceUpdateTag'> /// How the pipeline run should be forced to recreate even if the pipeline run /// configuration has not changed. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async System.Threading.Tasks.Task <PipelineRun> BeginCreateAsync(this IPipelineRunsOperations operations, string resourceGroupName, string registryName, string pipelineRunName, PipelineRunRequest request = default(PipelineRunRequest), string forceUpdateTag = default(string), CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.BeginCreateWithHttpMessagesAsync(resourceGroupName, registryName, pipelineRunName, request, forceUpdateTag, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Creates a pipeline run for a container registry with the specified /// parameters /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group to which the container registry belongs. /// </param> /// <param name='registryName'> /// The name of the container registry. /// </param> /// <param name='pipelineRunName'> /// The name of the pipeline run. /// </param> /// <param name='request'> /// The request parameters for a pipeline run. /// </param> /// <param name='forceUpdateTag'> /// How the pipeline run should be forced to recreate even if the pipeline run /// configuration has not changed. /// </param> public static PipelineRun BeginCreate(this IPipelineRunsOperations operations, string resourceGroupName, string registryName, string pipelineRunName, PipelineRunRequest request = default(PipelineRunRequest), string forceUpdateTag = default(string)) { return(operations.BeginCreateAsync(resourceGroupName, registryName, pipelineRunName, request, forceUpdateTag).GetAwaiter().GetResult()); }
public abstract PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request);
public abstract PipelineRunStatus GetPipelineRunStatus(PipelineRunRequest request);
public abstract PipelineRunStatus CancelPipeline(PipelineRunRequest request);
public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request) { PipelineRun pipelineRun = _adfManagementClient.PipelineRuns.Get ( request.ResourceGroupName, request.OrchestratorName, request.RunId ); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); _logger.LogInformation("Create pipeline Activity Runs query filters."); RunFilterParameters filterParams = new RunFilterParameters ( request.ActivityQueryStart, request.ActivityQueryEnd ); _logger.LogInformation("Querying ADF pipeline for Activity Runs."); ActivityRunsQueryResponse queryResponse = _adfManagementClient.ActivityRuns.QueryByPipelineRun ( request.ResourceGroupName, request.OrchestratorName, request.RunId, filterParams ); //Create initial output content PipelineErrorDetail output = new PipelineErrorDetail() { PipelineName = request.PipelineName, ActualStatus = pipelineRun.Status, RunId = request.RunId, ResponseCount = queryResponse.Value.Count }; _logger.LogInformation("Pipeline status: " + pipelineRun.Status); _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString()); //Loop over activities in pipeline run foreach (ActivityRun activity in queryResponse.Value) { if (activity.Error == null) { continue; //only want errors } //Parse error output to customise output dynamic outputBlockInner = JsonConvert.DeserializeObject(activity.Error.ToString()); string errorCode = outputBlockInner?.errorCode; string errorType = outputBlockInner?.failureType; string errorMessage = outputBlockInner?.message; _logger.LogInformation("Activity run id: " + activity.ActivityRunId); _logger.LogInformation("Activity name: " + activity.ActivityName); _logger.LogInformation("Activity type: " + activity.ActivityType); _logger.LogInformation("Error message: " + errorMessage); output.Errors.Add(new FailedActivity() { ActivityRunId = activity.ActivityRunId, ActivityName = activity.ActivityName, ActivityType = activity.ActivityType, ErrorCode = errorCode, ErrorType = errorType, ErrorMessage = errorMessage }); } return(output); }
public override PipelineErrorDetail GetPipelineRunActivityErrors(PipelineRunRequest request) { PipelineRun pipelineRun = _pipelineRunClient.GetPipelineRun ( request.RunId ); //Defensive check PipelineNameCheck(request.PipelineName, pipelineRun.PipelineName); _logger.LogInformation("Create pipeline Activity Runs query filters."); RunFilterParameters filterParams = new RunFilterParameters ( request.ActivityQueryStart, request.ActivityQueryEnd ); _logger.LogInformation("Querying SYN pipeline for Activity Runs."); ActivityRunsQueryResponse queryResponse = _pipelineRunClient.QueryActivityRuns ( request.PipelineName, request.RunId, filterParams ); //Create initial output content PipelineErrorDetail output = new PipelineErrorDetail() { PipelineName = request.PipelineName, ActualStatus = pipelineRun.Status, RunId = request.RunId, ResponseCount = queryResponse.Value.Count }; _logger.LogInformation("Pipeline status: " + pipelineRun.Status); _logger.LogInformation("Activities found in pipeline response: " + queryResponse.Value.Count.ToString()); //Loop over activities in pipeline run foreach (ActivityRun activity in queryResponse.Value) { if (activity.Error == null) { continue; //only want errors } //Parse error output to customise output var json = JsonConvert.SerializeObject(activity.Error); Dictionary <string, object> errorContent = JsonConvert.DeserializeObject <Dictionary <string, object> >(json); _logger.LogInformation("Activity run id: " + activity.ActivityRunId); _logger.LogInformation("Activity name: " + activity.ActivityName); _logger.LogInformation("Activity type: " + activity.ActivityType); _logger.LogInformation("Error message: " + errorContent["message"].ToString()); output.Errors.Add(new FailedActivity() { ActivityRunId = activity.ActivityRunId, ActivityName = activity.ActivityName, ActivityType = activity.ActivityType, ErrorCode = errorContent["errorCode"].ToString(), ErrorType = errorContent["failureType"].ToString(), ErrorMessage = errorContent["message"].ToString() }); } return(output); }