internal ContainerRegistryBlobClient( Uri endpoint, TokenCredential credential, string repository, IContainerRegistryAuthenticationClient authenticationClient, ContainerRegistryClientOptions options) { Argument.AssertNotNull(endpoint, nameof(endpoint)); Argument.AssertNotNull(credential, nameof(credential)); Argument.AssertNotNull(repository, nameof(repository)); if (options.Audience == null) { throw new InvalidOperationException($"{nameof(ContainerRegistryClientOptions.Audience)} property must be set to initialize a {nameof(ContainerRegistryBlobClient)}."); } _endpoint = endpoint; _registryName = endpoint.Host.Split('.')[0]; _repositoryName = repository; _clientDiagnostics = new ClientDiagnostics(options); _acrAuthPipeline = HttpPipelineBuilder.Build(options); _acrAuthClient = authenticationClient ?? new AuthenticationRestClient(_clientDiagnostics, _acrAuthPipeline, endpoint.AbsoluteUri); string defaultScope = options.Audience + "/.default"; _pipeline = HttpPipelineBuilder.Build(options, new ContainerRegistryChallengeAuthenticationPolicy(credential, defaultScope, _acrAuthClient)); _restClient = new ContainerRegistryRestClient(_clientDiagnostics, _pipeline, _endpoint.AbsoluteUri); _blobRestClient = new ContainerRegistryBlobRestClient(_clientDiagnostics, _pipeline, _endpoint.AbsoluteUri); }
private static void ProcessContainerRegistry(IRegistry containerRegistry, ILogger log) { log.LogInformation($"Processing container registry {containerRegistry.Name} ..."); var clientOptions = new ContainerRegistryClientOptions() { Retry = { Delay = TimeSpan.FromSeconds(2), MaxDelay = TimeSpan.FromSeconds(30), MaxRetries = 25, Mode = RetryMode.Exponential }, Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud }; var client = new ContainerRegistryClient(new Uri($"https://{containerRegistry.Name}.azurecr.io"), DefaultCredential, clientOptions); var repositoryNames = client.GetRepositoryNames(); var tasks = new List <Task>(); foreach (var repositoryName in repositoryNames) { tasks.Add(Task.Run(() => ProcessRepository(client, repositoryName, log))); } try { Task.WaitAll(tasks.ToArray()); } catch (AggregateException ae) { foreach (var e in ae.InnerExceptions) { log.LogError(e.Message); } } }
public ContainerRegistryBlobClient CreateAnonymouosBlobClient(RootConfiguration configuration, Uri registryUri, string repository) { var options = new ContainerRegistryClientOptions(); options.Diagnostics.ApplySharedContainerRegistrySettings(); options.Audience = new ContainerRegistryAudience(configuration.Cloud.ResourceManagerAudience); return(new(registryUri, repository, options)); }
public ContainerRegistryBlobClient CreateAuthenticatedBlobClient(RootConfiguration configuration, Uri registryUri, string repository) { var options = new ContainerRegistryClientOptions(); options.Diagnostics.ApplySharedContainerRegistrySettings(); options.Audience = new ContainerRegistryAudience(configuration.Cloud.ResourceManagerAudience); var credential = this.credentialFactory.CreateChain(configuration.Cloud.CredentialPrecedence, configuration.Cloud.ActiveDirectoryAuthorityUri); return(new(registryUri, credential, repository, options)); }
/// <summary> /// Initializes a new instance of the <see cref="ContainerRegistryBlobClient"/> for managing container images and artifacts. /// </summary> /// <param name="endpoint">The URI endpoint of the container registry. This is likely to be similar /// to "https://{registry-name}.azurecr.io".</param> /// <param name="credential">The API key credential used to authenticate requests /// against the container registry. </param> /// <param name="repository">The name of the repository that logically groups the artifact parts.</param> /// <param name="options">Client configuration options for connecting to Azure Container Registry.</param> /// <exception cref="ArgumentNullException"> Thrown when the <paramref name="endpoint"/>, <paramref name="credential"/>, or <paramref name="repository"/> is null. </exception> public ContainerRegistryBlobClient(Uri endpoint, TokenCredential credential, string repository, ContainerRegistryClientOptions options) : this(endpoint, credential, repository, null, options) { }
/// <summary> /// Initializes a new instance of the <see cref="ContainerRegistryBlobClient"/> for managing container images and artifacts, /// using anonymous access to the registry. Only operations that support anonymous access are enabled. Other service /// methods will throw <see cref="RequestFailedException"/> if called from this client. /// </summary> /// <param name="endpoint">The URI endpoint of the container registry. This is likely to be similar /// to "https://{registry-name}.azurecr.io".</param> /// <param name="repository">The name of the repository that logically groups the artifact parts.</param> /// <param name="options">Client configuration options for connecting to Azure Container Registry.</param> /// <exception cref="ArgumentNullException"> Thrown when the <paramref name="endpoint"/> or <paramref name="repository"/> is null. </exception> public ContainerRegistryBlobClient(Uri endpoint, string repository, ContainerRegistryClientOptions options) : this(endpoint, new ContainerRegistryAnonymousAccessCredential(), repository, options) { }