예제 #1
0
        public override async Task ExecuteAsync()
        {
            LoggerService.WriteHeading("COPYING IMAGES");

            IEnumerable <ManifestInfo> manifests;
            string fullRegistryName;

            if (Options.SubscriptionOptions.SubscriptionsPath is null)
            {
                manifests        = new ManifestInfo[] { Manifest };
                fullRegistryName = Manifest.Registry;
            }
            else
            {
                if (Options.RegistryOverride is null)
                {
                    throw new InvalidOperationException($"{Options.RegistryOverride} must be set.");
                }

                manifests =
                    (await SubscriptionHelper.GetSubscriptionManifestsAsync(
                         Options.SubscriptionOptions.SubscriptionsPath, Options.FilterOptions, _httpClient, LoggerService,
                         options => options.RegistryOverride = Options.RegistryOverride))
                    .Select(subscriptionManifest => subscriptionManifest.Manifest);
                fullRegistryName = Options.RegistryOverride;
            }

            IEnumerable <Task> copyImageTasks = manifests
                                                .SelectMany(manifest => GetFromImages(manifest))
                                                .Distinct()
                                                .Select(fromImage => CopyImageAsync(fromImage, GetBaseRegistryName(fullRegistryName)));

            await Task.WhenAll(copyImageTasks);
        }