예제 #1
0
        public async Task SetImagePropertiesAsync()
        {
            // Set up
            await ImportImageAsync(TestEnvironment.Registry, "library/hello-world", new List <string>() { "v1", "latest" });

            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_SetArtifactPropertiesAsync
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient and RegistryArtifact to access image operations
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());
            RegistryArtifact        image  = client.GetArtifact("library/hello-world", "v1");

            // Set permissions on the image's "latest" tag
            await image.UpdateTagPropertiesAsync("latest", new ArtifactTagProperties()
            {
                CanWrite  = false,
                CanDelete = false
            });

            #endregion

            // Reset registry state
            await image.UpdateTagPropertiesAsync("latest", new ArtifactTagProperties()
            {
                CanRead   = true,
                CanList   = true,
                CanWrite  = true,
                CanDelete = true
            });
        }
        public void DeleteImages()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_DeleteImage
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

            // Iterate through repositories
            Pageable <string> repositoryNames = client.GetRepositoryNames();
            foreach (string repositoryName in repositoryNames)
            {
                ContainerRepository repository = client.GetRepository(repositoryName);

                // Obtain the images ordered from newest to oldest
                Pageable <ArtifactManifestProperties> imageManifests =
                    repository.GetManifestPropertiesCollection(orderBy: ArtifactManifestOrderBy.LastUpdatedOnDescending);

                // Delete images older than the first three.
                foreach (ArtifactManifestProperties imageManifest in imageManifests.Skip(3))
                {
                    Console.WriteLine($"Deleting image with digest {imageManifest.Digest}.");
                    Console.WriteLine($"   This image has the following tags: ");
                    foreach (var tagName in imageManifest.Tags)
                    {
                        Console.WriteLine($"        {imageManifest.RepositoryName}:{tagName}");
                    }
                    repository.GetArtifact(imageManifest.Digest).Delete();
                }
            }
            #endregion
        }
 public void TestSetup()
 {
     client = InstrumentClient(new ContainerRegistryClient(_url, GetCredential(), new ContainerRegistryClientOptions()
     {
         Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
     }));
 }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        private static void ProcessRepository(ContainerRegistryClient client, string repositoryName, ILogger log)
        {
            log.LogInformation($"Processing repository {repositoryName} ...");
            var tasks = new List <Task>();

            Azure.Containers.ContainerRegistry.ContainerRepository repository = client.GetRepository(repositoryName);
            var manifests = repository.GetManifestPropertiesCollection();

            foreach (var manifest in manifests)
            {
                if (manifest.Tags.Count < 1)
                {
                    log.LogInformation($"Found untagged manifest {repositoryName}:{manifest.Digest}. Will delete.");
                    tasks.Add(client.GetArtifact(repositoryName, manifest.Digest).DeleteAsync());
                }
            }
            try
            {
                Task.WaitAll(tasks.ToArray());
            }
            catch (AggregateException ae)
            {
                foreach (var e in ae.InnerExceptions)
                {
                    log.LogError(e.Message);
                }
            }
        }
        public async Task HandleErrorsAsync()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_HandleErrorsAsync
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a ContainerRepository class for an invalid repository
            string fakeRepositoryName      = "doesnotexist";
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
                                                                         new ContainerRegistryClientOptions()
            {
                Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
            });
            ContainerRepository repository = client.GetRepository(fakeRepositoryName);

            try
            {
                await repository.GetPropertiesAsync();
            }
            catch (RequestFailedException ex) when(ex.Status == 404)
            {
                Console.WriteLine("Repository wasn't found.");
            }
            #endregion Snippet:ContainerRegistry_Tests_Samples_HandleErrorsAsync
        }
        public async Task AnonymouslyListTagsAsync()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.AnonymousAccessEndpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_ListTagsAnonymousAsync
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient for anonymous access
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new ContainerRegistryClientOptions()
            {
                Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
            });

            // Obtain a RegistryArtifact object to get access to image operations
            RegistryArtifact image = client.GetArtifact("library/hello-world", "latest");

            // List the set of tags on the hello_world image tagged as "latest"
            AsyncPageable <ArtifactTagProperties> tags = image.GetAllTagPropertiesAsync();

            // Iterate through the image's tags, listing the tagged alias for the image
            Console.WriteLine($"{image.FullyQualifiedReference} has the following aliases:");
            await foreach (ArtifactTagProperties tag in tags)
            {
                Console.WriteLine($"    {image.RegistryEndpoint.Host}/{image.RepositoryName}:{tag}");
            }
            #endregion
        }
예제 #8
0
        public void CorrectRequestForGetAllSubscriptionTiers()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.GetAllSubscriptionTiers();
            factory.Received().GetPaginated <SubscriptionTier>("registry/options", null, "subscription_tiers");
        }
예제 #9
0
 public ListArtifacts(PerfOptions options) : base(options)
 {
     _client = new ContainerRegistryClient(new Uri(PerfTestEnvironment.Instance.Endpoint), PerfTestEnvironment.Instance.Credential,
                                           new ContainerRegistryClientOptions()
     {
         Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
     });
 }
예제 #10
0
        public void CorrectRequestForDelete()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.Delete();
            factory.Received().ExecuteRaw("registry", null, null, Method.DELETE);
        }
예제 #11
0
        public void CorrectRequestForGetSubscription()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.GetSubscription();
            factory.Received().ExecuteRequest <Subscription>("registry/subscription", null, null, "subscription");
        }
예제 #12
0
        public void CorrectRequestForGetDockerCredentials()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.GetDockerCredentials();
            factory.Received().ExecuteRequest <JObject>("registry/docker-credentials", null, null, "auths");
        }
예제 #13
0
        protected ContainerRepositoryClient CreateClient(string repository = null)
        {
            ContainerRegistryClient registryClient = new ContainerRegistryClient(
                new Uri(TestEnvironment.Endpoint),
                TestEnvironment.Credential,
                InstrumentClientOptions(new ContainerRegistryClientOptions()));

            return(InstrumentClient(registryClient.GetRepositoryClient(repository ?? _repositoryName)));
        }
예제 #14
0
        public void CorrectRequestForDeleteRepositoryManifest()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.DeleteRepositoryManifest("registryName", "repositoryName", "manifestDigest");
            var parameters = Arg.Is <List <Parameter> >(list => (string)list[0].Value == "registryName" && (string)list[1].Value == "repositoryName" && (string)list[2].Value == "manifestDigest");

            factory.Received().ExecuteRaw("registry/{registryName}/repositories/{repositoryName}/digests/{manifestDigest}", parameters, null, Method.DELETE);
        }
예제 #15
0
        public void CorrectRequestForGetActiveGarbageCollection()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.GetActiveGarbageCollection("registryName");
            var parameters = Arg.Is <List <Parameter> >(list => (string)list[0].Value == "registryName");

            factory.Received().ExecuteRequest <GarbageCollection>("registry/{registryName}/garbage-collection", parameters, null, "garbage_collections");
        }
예제 #16
0
        public void CorrectRequestForConfigure()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            var data = new Models.Requests.ContainerRegistryConfigure();

            client.Configure(data);
            factory.Received().ExecuteRequest <Models.Responses.ContainerRegistryConfigure>("registry", null, data, null, Method.POST);
        }
예제 #17
0
        public void CorrectRequestForGetAllRepositories()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            client.GetAllRepositories("registryName");
            var parameters = Arg.Is <List <Parameter> >(list => (string)list[0].Value == "registryName");

            factory.Received().GetPaginated <ContainerRegistryRepository>("registry/{registryName}/repositories", parameters, "repositories");
        }
예제 #18
0
        public void CorrectRequestForValidateName()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            var data = new ContainerRegistryValidateName();

            client.ValidateName(data);
            factory.Received().ExecuteRaw("registry/validate-name", null, data, Method.POST);
        }
예제 #19
0
        public void CorrectRequestForUpdateSubscriptionTier()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            var data = new UpdateSubscriptionTier();

            client.UpdateSubscriptionTier(data);
            factory.Received().ExecuteRequest <SubscriptionTierUpdate>("registry/subscription", null, data, "subscription", Method.POST);
        }
예제 #20
0
        public void CorrectRequestForUpdateGarbageCollection()
        {
            var factory = Substitute.For <IConnection>();
            var client  = new ContainerRegistryClient(factory);

            var data = new UpdateGarbageCollection();

            client.UpdateGarbageCollection("registryName", "uuid", data);
            var parameters = Arg.Is <List <Parameter> >(list => (string)list[0].Value == "registryName" && (string)list[1].Value == "uuid");

            factory.Received().ExecuteRequest <GarbageCollection>("registry/{registryName}/garbage-collection/{uuid}", parameters, data, "garbage_collections", Method.PUT);
        }
예제 #21
0
        public async Task DeleteImagesAsync()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_DeleteImageAsync
#if SNIPPET
            using System.Linq;
            using Azure.Containers.ContainerRegistry;
            using Azure.Identity;
#endif

            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
                                                                         new ContainerRegistryClientOptions()
            {
                Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
            });

            // Iterate through repositories
            AsyncPageable <string> repositoryNames = client.GetRepositoryNamesAsync();
            await foreach (string repositoryName in repositoryNames)
            {
                ContainerRepository repository = client.GetRepository(repositoryName);

                // Obtain the images ordered from newest to oldest
                AsyncPageable <ArtifactManifestProperties> imageManifests =
                    repository.GetAllManifestPropertiesAsync(manifestOrder: ArtifactManifestOrder.LastUpdatedOnDescending);

                // Delete images older than the first three.
                await foreach (ArtifactManifestProperties imageManifest in imageManifests.Skip(3))
                {
                    RegistryArtifact image = repository.GetArtifact(imageManifest.Digest);
                    Console.WriteLine($"Deleting image with digest {imageManifest.Digest}.");
                    Console.WriteLine($"   Deleting the following tags from the image: ");
                    foreach (var tagName in imageManifest.Tags)
                    {
                        Console.WriteLine($"        {imageManifest.RepositoryName}:{tagName}");
                        await image.DeleteTagAsync(tagName);
                    }
                    await image.DeleteAsync();
                }
            }

            #endregion
        }
예제 #22
0
        public async Task GetRepositories()
        {
            var endpoint = TestEnvironment.Endpoint;
            var userName = TestEnvironment.UserName;
            var password = TestEnvironment.Password;

            #region Snippet:GetSecret
            var client = new ContainerRegistryClient(new Uri(endpoint), userName, password);

            AsyncPageable <string> repositories = client.GetRepositoriesAsync();

            await foreach (string repository in repositories)
            {
                Console.WriteLine(repository);
            }
            #endregion
        }
예제 #23
0
        public async Task CreateClientAsync()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_CreateClientAsync
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

            // Get the collection of repository names from the registry
            AsyncPageable <string> repositories = client.GetRepositoryNamesAsync();
            await foreach (string repository in repositories)
            {
                Console.WriteLine(repository);
            }
            #endregion Snippet:ContainerRegistry_Tests_Samples_CreateClientAsync
        }
예제 #24
0
        public void CreateClient()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_CreateClient
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

            // Perform an operation
            Pageable <string> repositories = client.GetRepositoryNames();
            foreach (string repository in repositories)
            {
                Console.WriteLine(repository);
            }
            #endregion Snippet:ContainerRegistry_Tests_Samples_CreateClient
        }
예제 #25
0
        public DigitalOceanClient(string token)
        {
            var client = new RestClient(DigitalOceanApiUrl)
            {
                UserAgent = "digitalocean-api-dotnet"
            };

            client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", token));

            _connection = new Connection(client);

            Account           = new AccountClient(_connection);
            Actions           = new ActionsClient(_connection);
            CdnEndpoints      = new CdnEndpointsClient(_connection);
            Certificates      = new CertificatesClient(_connection);
            ContainerRegistry = new ContainerRegistryClient(_connection);
            Databases         = new DatabasesClient(_connection);
            DomainRecords     = new DomainRecordsClient(_connection);
            Domains           = new DomainsClient(_connection);
            DropletActions    = new DropletActionsClient(_connection);
            Droplets          = new DropletsClient(_connection);
            Firewalls         = new FirewallsClient(_connection);
            FloatingIpActions = new FloatingIpActionsClient(_connection);
            FloatingIps       = new FloatingIpsClient(_connection);
            ImageActions      = new ImageActionsClient(_connection);
            Images            = new ImagesClient(_connection);
            LoadBalancers     = new LoadBalancerClient(_connection);
            Projects          = new ProjectsClient(_connection);
            ProjectResources  = new ProjectResourcesClient(_connection);
            Keys          = new KeysClient(_connection);
            Kubernetes    = new KubernetesClient(_connection);
            Regions       = new RegionsClient(_connection);
            Sizes         = new SizesClient(_connection);
            Snapshots     = new SnapshotsClient(_connection);
            Tags          = new TagsClient(_connection);
            Volumes       = new VolumesClient(_connection);
            VolumeActions = new VolumeActionsClient(_connection);
            BalanceClient = new BalanceClient(_connection);
            Vpc           = new VpcClient(_connection);
        }
        public void CreateClient()
        {
            Environment.SetEnvironmentVariable("REGISTRY_ENDPOINT", TestEnvironment.Endpoint);

            #region Snippet:ContainerRegistry_Tests_Samples_CreateClient
            // Get the service endpoint from the environment
            Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

            // Create a new ContainerRegistryClient
            ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
                                                                         new ContainerRegistryClientOptions()
            {
                Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
            });

            // Get the collection of repository names from the registry
            Pageable <string> repositories = client.GetRepositoryNames();
            foreach (string repository in repositories)
            {
                Console.WriteLine(repository);
            }
            #endregion Snippet:ContainerRegistry_Tests_Samples_CreateClient
        }
예제 #27
0
 public ListArtifacts(PerfOptions options) : base(options)
 {
     _client = new ContainerRegistryClient(new Uri(PerfTestEnvironment.Instance.Endpoint), PerfTestEnvironment.Instance.Credential);
 }
 public void TestSetup()
 {
     client = InstrumentClient(new ContainerRegistryClient(_url, GetCredential(), new ContainerRegistryClientOptions()));
 }