示例#1
0
        public Task <ManifestQueryResult> GetManifestAsync(string image, IRegistryCredentialsHost credsHost, bool isDryRun)
        {
            if (isDryRun)
            {
                return(Task.FromResult(new ManifestQueryResult("", new JsonObject())));
            }

            ImageName imageName = ImageName.Parse(image, autoResolveImpliedNames: true);

            BasicAuthenticationCredentials?basicAuthCreds = null;

            // Lookup the credentials, if any, for the registry where the image is located
            if (credsHost.Credentials.TryGetValue(imageName.Registry !, out RegistryCredentials? registryCreds))
            {
                basicAuthCreds = new BasicAuthenticationCredentials
                {
                    UserName = registryCreds.Username,
                    Password = registryCreds.Password
                };
            }

            // Docker Hub's registry has a separate host name for its API
            string apiRegistry = imageName.Registry == DockerHelper.DockerHubRegistry ?
                                 DockerHelper.DockerHubApiRegistry :
                                 imageName.Registry !;

            RegistryServiceClient registryClient = new(apiRegistry, _httpClient, basicAuthCreds);

            return(registryClient.GetManifestAsync(imageName.Repo, (imageName.Tag ?? imageName.Digest) !));
        }
示例#2
0
        private Task ExecuteAsync(string image, IConsole console)
        {
            ImageName imageName = ImageName.Parse(image);

            return(CommandHelper.ExecuteCommandAsync(console, imageName.Registry, async() =>
            {
                using DockerRegistryClient.DockerRegistryClient client = await CommandHelper.GetRegistryClientAsync(imageName.Registry);

                ManifestInfo manifestInfo = await client.Manifests.GetAsync(imageName.Repo, (imageName.Tag ?? imageName.Digest) !);

                string output = JsonConvert.SerializeObject(manifestInfo.Manifest, Formatting.Indented);

                console.Out.WriteLine(output);
            }));
示例#3
0
        private Task ExecuteAsync(string repo, IConsole console)
        {
            ImageName imageName = ImageName.Parse(repo);

            return(CommandHelper.ExecuteCommandAsync(console, imageName.Registry, async() =>
            {
                using DockerRegistryClient.DockerRegistryClient client = await CommandHelper.GetRegistryClientAsync(imageName.Registry);

                List <string> tags = new();

                Page <RepositoryTags> tagsPage = await client.Tags.GetAsync(imageName.Repo);
                tags.AddRange(tagsPage.Value.Tags);
                while (tagsPage.NextPageLink is not null)
                {
                    tagsPage = await client.Tags.GetNextAsync(tagsPage.NextPageLink);
                    tags.AddRange(tagsPage.Value.Tags);
                }

                tags.Sort();

                string output = JsonConvert.SerializeObject(tags, Formatting.Indented);

                console.Out.WriteLine(output);
            }));