in tools/code/extractor/Subscription.cs [59:114]
private static ListSubscriptions GetListSubscriptions(IServiceProvider provider)
{
var findConfigurationNamesFactory = provider.GetRequiredService<FindConfigurationNamesFactory>();
var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
var pipeline = provider.GetRequiredService<HttpPipeline>();
var findConfigurationSubscriptions = findConfigurationNamesFactory.Create<SubscriptionName>();
var findConfigurationApis = findConfigurationNamesFactory.Create<ApiName>();
var findConfigurationProducts = findConfigurationNamesFactory.Create<ProductName>();
return cancellationToken =>
findConfigurationSubscriptions()
.Map(names => listFromSet(names, cancellationToken))
.IfNone(() => listAll(cancellationToken))
.Where(resource => shouldExtractSubscription(resource.Name, resource.Dto));
IAsyncEnumerable<(SubscriptionName Name, SubscriptionDto Dto)> listFromSet(IEnumerable<SubscriptionName> names, CancellationToken cancellationToken) =>
names.Select(name => SubscriptionUri.From(name, serviceUri))
.ToAsyncEnumerable()
.Choose(async uri =>
{
var dtoOption = await uri.TryGetDto(pipeline, cancellationToken);
return dtoOption.Map(dto => (uri.Name, dto));
});
IAsyncEnumerable<(SubscriptionName, SubscriptionDto)> listAll(CancellationToken cancellationToken)
{
var subscriptionsUri = SubscriptionsUri.From(serviceUri);
return subscriptionsUri.List(pipeline, cancellationToken);
}
bool shouldExtractSubscription(SubscriptionName name, SubscriptionDto dto)
{
var apiNamesOption = findConfigurationApis();
var productNamesOption = findConfigurationProducts();
var shouldExtractApi = (ApiName apiName) =>
apiNamesOption.Map(names => names.Contains(apiName))
.IfNone(true);
var shouldExtractProduct = (ProductName productName) =>
productNamesOption.Map(names => names.Contains(productName))
.IfNone(true);
// Don't extract the master subscription
return name != SubscriptionName.From("master")
// Don't extract subscription if its API should not be extracted
&& common.SubscriptionModule.TryGetApiName(dto)
.Map(shouldExtractApi)
.IfNone(true)
// Don't extract subscription if its product should not be extracted
&& common.SubscriptionModule.TryGetProductName(dto)
.Map(shouldExtractProduct)
.IfNone(true);
}
}