/// <summary> /// SendAsync override method. /// Recursive call. /// </summary> /// <param name="request">The request given.</param> /// <param name="cancellationToken">The cancelation token.</param> /// <returns>The Http response.</returns> protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request == null) { throw new ArgumentNullException(nameof(request)); } Uri originalUri = request.RequestUri; DnsEndPoint host = await TargetSelector.SelectHostAsync(ServiceDescription); if (host == null) { Logger?.LogInformation("No Dns Host Found"); return(await base.SendAsync(request, cancellationToken)); } request.RequestUri = ReplaceHost(request.RequestUri, host); Logger?.LogInformation("Request uri : {requestRequestUri}", request.RequestUri); var response = await base.SendAsync(request, cancellationToken); if (response == null) { return(response); } Logger?.LogTrace("Response status code : {response.StatusCode}", response.StatusCode); if (QuarantinePolicy.ShouldQuarantine(response)) { Logger?.LogWarning("Host {host} (from original host {original_host}) is send in quarantine", host, originalUri.Host); await TargetSelector.BlacklistHostForAsync(host, QuarantinePolicy.QuarantineDuration); request.RequestUri = originalUri; return(await SendAsync(request, cancellationToken)); } return(response); }
/// <summary> /// Updates the policies for the specified container registry. /// </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='quarantinePolicy'> /// An object that represents quarantine policy for a container registry. /// </param> /// <param name='trustPolicy'> /// An object that represents content trust policy for a container registry. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async System.Threading.Tasks.Task <RegistryPolicies> BeginUpdatePoliciesAsync(this IRegistriesOperations operations, string resourceGroupName, string registryName, QuarantinePolicy quarantinePolicy = default(QuarantinePolicy), TrustPolicy trustPolicy = default(TrustPolicy), CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.BeginUpdatePoliciesWithHttpMessagesAsync(resourceGroupName, registryName, quarantinePolicy, trustPolicy, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Updates the policies for the specified container registry. /// </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='quarantinePolicy'> /// An object that represents quarantine policy for a container registry. /// </param> /// <param name='trustPolicy'> /// An object that represents content trust policy for a container registry. /// </param> public static RegistryPolicies BeginUpdatePolicies(this IRegistriesOperations operations, string resourceGroupName, string registryName, QuarantinePolicy quarantinePolicy = default(QuarantinePolicy), TrustPolicy trustPolicy = default(TrustPolicy)) { return(operations.BeginUpdatePoliciesAsync(resourceGroupName, registryName, quarantinePolicy, trustPolicy).GetAwaiter().GetResult()); }