Merged PR 695709: Remove unnecessary dependencies to 'Microsoft.Azure.Management.*' packages

This is the first step towards fixing the Component Governance issue automatically created because of our dependency to a deprecated Azure.KeyVault package.

Related work items: #2011942
This commit is contained in:
Sergey Tepliakov 2023-01-05 18:15:49 +00:00
Родитель b97afb1500
Коммит 343bd394e4
19 изменённых файлов: 9 добавлений и 624 удалений

Просмотреть файл

@ -8,44 +8,6 @@ export declare const qualifier : BuildXLSdk.Net6Qualifier;
export {BuildXLSdk};
@@public
export const azureSdk = [
// Required for Azure Authentication
importFrom("Microsoft.Rest.ClientRuntime").pkg,
importFrom("Microsoft.Rest.ClientRuntime.Azure").pkg,
importFrom("Microsoft.Rest.ClientRuntime.Azure.Authentication").pkg,
importFrom("Microsoft.IdentityModel.Clients.ActiveDirectory").pkg,
// Useless stuff they force us to bring in
importFrom("Microsoft.Azure.Management.AppService.Fluent").pkg,
importFrom("Microsoft.Azure.Management.BatchAI.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Cdn.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Compute.Fluent").pkg,
importFrom("Microsoft.Azure.Management.ContainerInstance.Fluent").pkg,
importFrom("Microsoft.Azure.Management.ContainerRegistry.Fluent").pkg,
importFrom("Microsoft.Azure.Management.ContainerService.Fluent").pkg,
importFrom("Microsoft.Azure.Management.CosmosDB.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Dns.Fluent").pkg,
importFrom("Microsoft.Azure.Management.EventHub.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Graph.RBAC.Fluent").pkg,
importFrom("Microsoft.Azure.Management.KeyVault.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Locks.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Msi.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Network.Fluent").pkg,
importFrom("Microsoft.Azure.Management.PrivateDns.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Search.Fluent").pkg,
importFrom("Microsoft.Azure.Management.ServiceBus.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Sql.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Storage.Fluent").pkg,
importFrom("Microsoft.Azure.Management.TrafficManager.Fluent").pkg,
// These are the actual packages we care about
importFrom("Microsoft.Azure.Management.ResourceManager.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Monitor.Fluent").pkg,
importFrom("Microsoft.Azure.Management.Monitor").pkg,
];
namespace Default {
@@public
export const deployment: Deployment.Definition = !BuildXLSdk.Flags.isMicrosoftInternal ? undefined :

Просмотреть файл

@ -1,155 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Monitor;
using Microsoft.Azure.Management.Monitor.Models;
using System.Diagnostics.ContractsLight;
using System.Threading;
using Microsoft.Rest.TransientFaultHandling;
using Microsoft.Rest.Azure.OData;
using BuildXL.Cache.ContentStore.Interfaces.Synchronization.Internal;
#nullable enable
namespace BuildXL.Cache.Monitor.Library.Az
{
internal class AzureMetricsClient : IAzureMetricsClient
{
private readonly IMonitorManagementClient _monitorManagementClient;
private static readonly ExponentialBackoffRetryStrategy RetryStrategy = new ExponentialBackoffRetryStrategy();
private static readonly MetricsClientErrorDetectionStrategy ErrorDetectionStrategy = new MetricsClientErrorDetectionStrategy();
private static readonly RetryPolicy RetryPolicy = new RetryPolicy(ErrorDetectionStrategy, RetryStrategy);
/// <summary>
/// We allow few concurrent Azure Metrics requests. This is because the API seems to basically fail when doing
/// too many requests at once, and it sometimes happens that the monitor launches too many of these rules in
/// parallel.
/// </summary>
private static readonly SemaphoreSlim AzureMetricsRequestLimiter = new SemaphoreSlim(initialCount: 4);
public AzureMetricsClient(IMonitorManagementClient monitorManagementClient)
{
_monitorManagementClient = monitorManagementClient;
}
public Task<Dictionary<MetricName, List<MetricValue>>> GetMetricsWithDimensionAsync(
string resourceUri,
IReadOnlyList<MetricName> metrics,
string dimension,
DateTime startTimeUtc,
DateTime endTimeUtc,
TimeSpan samplingInterval,
IReadOnlyList<AggregationType> aggregations,
CancellationToken cancellationToken = default)
{
Contract.Requires(startTimeUtc < endTimeUtc);
// HERE BE DRAGONS. The Azure Monitor Metrics API is basically nondeterministic. It may fail at random, for
// unknown periods of time, and for unknown reasons. This function is an attempt to make a sane wrapper
// over it.
// We remove the seconds in an attempt to play nicely with the Azure Metrics API. Format is not strictly
// ISO, as they claim is supported, but what we have found to work by trial and error and looking at
// examples.
var startTime = startTimeUtc.ToString("yyyy-MM-ddTHH:mm:00Z");
var endTime = endTimeUtc.ToString("yyyy-MM-ddTHH:mm:00Z");
var interval = $"{startTime}/{endTime}";
return RetryPolicy.ExecuteAsync(async () =>
{
var metricNames = string.Join(",", metrics.Select(name => name.Name.ToLower()));
var odataQuery = new ODataQuery<MetadataValue>(odataExpression: $"{dimension} eq '*'");
var aggregation = string.Join(
",",
aggregations.Select(
agg =>
{
Contract.Assert(agg != AggregationType.None); return agg.ToString().ToLower();
}));
Response result;
using (var waitToken = await AzureMetricsRequestLimiter.WaitTokenAsync())
{
result = await _monitorManagementClient.Metrics.ListAsync(
resourceUri: resourceUri,
metricnames: metricNames,
odataQuery: odataQuery,
timespan: interval,
interval: samplingInterval,
aggregation: aggregation,
cancellationToken: cancellationToken);
}
result.Validate();
if (result.Value.Count == 0)
{
// Sometimes, for unknown reasons, this can be empty. This is an error, but can go away when
// retried. That's exactly what we do here (look at the retry policy's detection strategy).
throw new AzureMetricsClientValidationException("Invalid `result.Value` returned");
}
var output = new Dictionary<MetricName, List<MetricValue>>();
foreach (var metric in result.Value)
{
if (metric.Timeseries.Count == 0)
{
// Sometimes, there may be no timeseries. Reasons seem to be varied, but here's the predominant
// example that would brick us in production:
// - We'd attempt to fetch operationsPerSecond going back several weeks for all possible 10
// shards.
// - The current number of shards is less than 10, say 1
// - Shard 0 would have a result. Shards 1-9 wouldn't.
// WARNING: this continue means that we won't report the result for this metric. Usages must
// account for arbitrary metric disappearance.
continue;
}
var metricNameFromApi = metric.Name.Value;
if (string.IsNullOrEmpty(metricNameFromApi))
{
throw new AzureMetricsClientValidationException("Received empty metric name");
}
foreach (var timeseries in metric.Timeseries)
{
var metricGroupFromApi = timeseries.Metadatavalues.ToDictionary(v => v.Name.Value, v => v.Value);
var timeSeriesFromApi = timeseries.Data;
if (timeSeriesFromApi == null || timeSeriesFromApi.Count < 1)
{
throw new AzureMetricsClientValidationException($"Received invalid time series for metric `{metricNameFromApi}`. Size=[{timeSeriesFromApi?.Count ?? -1}]");
}
var metricName = new MetricName(metricNameFromApi, metricGroupFromApi);
output[metricName] = timeSeriesFromApi
.OrderBy(m => m.TimeStamp)
.ToList();
}
}
return output;
}, cancellationToken);
}
private class MetricsClientErrorDetectionStrategy : ITransientErrorDetectionStrategy
{
public bool IsTransient(Exception ex) => ex is AzureMetricsClientValidationException;
}
private class AzureMetricsClientValidationException : Exception
{
public AzureMetricsClientValidationException(string message) : base(message)
{
}
public AzureMetricsClientValidationException(string message, Exception innerException) : base(message, innerException)
{
}
}
}
}

Просмотреть файл

@ -1,38 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics.ContractsLight;
namespace BuildXL.Cache.Monitor.Library.Az
{
internal class MetricName
{
public string Name { get; }
public Dictionary<string, string>? Group { get; }
public MetricName(string name, Dictionary<string, string>? group = null)
{
Contract.RequiresNotNullOrEmpty(name);
Name = name;
Group = group;
}
public static implicit operator string(MetricName metric) => metric.ToString();
public override string ToString()
{
if (Group != null && Group.Count > 0)
{
var groupAsString = string.Join(
", ",
Group.Select(kvp => $"{kvp.Key}={kvp.Value}"));
return $"{Name}({groupAsString})";
}
return $"{Name}";
}
}
}

Просмотреть файл

@ -1,23 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Monitor.Models;
using System.Threading;
namespace BuildXL.Cache.Monitor.Library.Az
{
internal interface IAzureMetricsClient
{
Task<Dictionary<MetricName, List<MetricValue>>> GetMetricsWithDimensionAsync(
string resourceUri,
IReadOnlyList<MetricName> metrics,
string dimension,
DateTime startTimeUtc, DateTime endTimeUtc,
TimeSpan samplingInterval,
IReadOnlyList<AggregationType> aggregations,
CancellationToken cancellationToken = default);
}
}

Просмотреть файл

@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Kusto.Cloud.Platform.Data;
using Kusto.Data.Common;
namespace BuildXL.Cache.Monitor.Library.Client

Просмотреть файл

@ -10,16 +10,19 @@ namespace BuildXL.Cache.Monitor.Library.Client
{
private readonly ICslQueryProvider _client;
/// <nodoc />
public KustoClient(ICslQueryProvider client)
{
_client = client;
}
/// <inheritdoc />
public async Task<IReadOnlyList<T>> QueryAsync<T>(string query, string database, ClientRequestProperties? requestProperties = null)
{
return (await _client.QuerySingleResultSetAsync<T>(query, database, requestProperties)).ToList();
}
/// <inheritdoc />
public void Dispose()
{
_client.Dispose();

Просмотреть файл

@ -12,8 +12,8 @@ namespace BuildXL.Cache.Monitor.App.Az
{
public static async Task<ObjectReader<T>> QuerySingleResultSetAsync<T>(this ICslQueryProvider cslQueryProvider, string query, string database, ClientRequestProperties? requestProperties = null)
{
Contract.RequiresNotNullOrEmpty(query);
Contract.RequiresNotNullOrEmpty(database);
Contract.Requires(string.IsNullOrEmpty(query));
Contract.Requires(string.IsNullOrEmpty(database));
requestProperties ??= new ClientRequestProperties();

Просмотреть файл

@ -24,7 +24,6 @@ namespace Library {
importFrom("Newtonsoft.Json").pkg,
importFrom("RuntimeContracts").pkg,
...azureSdk,
// IcM
importFrom("Microsoft.AzureAd.Icm.Types.amd64").pkg,

Просмотреть файл

@ -3,19 +3,14 @@
using System;
using BuildXL.Cache.Monitor.Library.Client;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.Monitor;
namespace BuildXL.Cache.Monitor.App
{
public record EnvironmentResources(
IAzure Azure,
IMonitorManagementClient MonitorManagementClient,
IKustoClient KustoQueryClient) : IDisposable
public record EnvironmentResources(IKustoClient KustoQueryClient) : IDisposable
{
/// <inheritdoc />
public void Dispose()
{
MonitorManagementClient.Dispose();
KustoQueryClient.Dispose();
}
}

Просмотреть файл

@ -2,17 +2,11 @@
// Licensed under the MIT License.
using System.Diagnostics.ContractsLight;
using System.Threading.Tasks;
using BuildXL.Cache.ContentStore.Interfaces.Results;
using BuildXL.Cache.Monitor.Library.Client;
using Kusto.Data;
using Kusto.Data.Net.Client;
using Kusto.Ingest;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.Monitor;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
using Microsoft.Rest.Azure.Authentication;
namespace BuildXL.Cache.Monitor.App
{
@ -51,35 +45,5 @@ namespace BuildXL.Cache.Monitor.App
.WithAadApplicationKeyAuthentication(azureAppId, azureAppKey, azureTenantId);
return new Result<IKustoIngestClient>(KustoIngestFactory.CreateDirectIngestClient(kustoIngestConnectionString));
}
public static Task<Result<IMonitorManagementClient>> CreateAzureMetricsClientAsync(AzureCredentials credentials)
{
return CreateAzureMetricsClientAsync(credentials.Credentials.TenantId, credentials.SubscriptionId, credentials.Credentials.AppId, credentials.Credentials.AppKey);
}
public static async Task<Result<IMonitorManagementClient>> CreateAzureMetricsClientAsync(string azureTenantId, string azureSubscriptionId, string azureAppId, string azureAppKey)
{
var credentials = await ApplicationTokenProvider.LoginSilentAsync(azureTenantId, azureAppId, azureAppKey);
return new MonitorManagementClient(credentials)
{
SubscriptionId = azureSubscriptionId
};
}
public static Result<IAzure> CreateAzureClient(AzureCredentials credentials)
{
return CreateAzureClient(credentials.Credentials.TenantId, credentials.SubscriptionId, credentials.Credentials.AppId, credentials.Credentials.AppKey);
}
public static Result<IAzure> CreateAzureClient(string azureTenantId, string azureSubscriptionId, string azureAppId, string azureAppKey)
{
var tokenCredentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(azureAppId, azureAppKey, azureTenantId, AzureEnvironment.AzureGlobalCloud);
return new Result<IAzure>(Microsoft.Azure.Management.Fluent.Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.BodyAndHeaders)
.Authenticate(tokenCredentials).WithSubscription(azureSubscriptionId));
}
}
}

Просмотреть файл

@ -164,15 +164,12 @@ namespace BuildXL.Cache.Monitor.App
return environmentResources;
}
private static async Task<EnvironmentResources> CreateEnvironmentResourcesAsync(OperationContext context, EnvironmentConfiguration configuration)
private static Task<EnvironmentResources> CreateEnvironmentResourcesAsync(OperationContext context, EnvironmentConfiguration configuration)
{
var azure = ExternalDependenciesFactory.CreateAzureClient(configuration.AzureCredentials).ThrowIfFailure();
var monitorManagementClient = await ExternalDependenciesFactory.CreateAzureMetricsClientAsync(configuration.AzureCredentials).ThrowIfFailureAsync();
var kustoClient = ExternalDependenciesFactory.CreateKustoQueryClient(configuration.KustoCredentials).ThrowIfFailure();
context.Token.ThrowIfCancellationRequested();
return new EnvironmentResources(azure, monitorManagementClient, kustoClient);
return Task.FromResult(new EnvironmentResources(kustoClient));
}
private Monitor(Configuration configuration, IKustoIngestClient kustoIngestClient, IIcmClient icmClient, IClock clock, IReadOnlyDictionary<MonitorEnvironment, EnvironmentResources> environmentResources, ILogger logger)

Просмотреть файл

@ -29,7 +29,6 @@ namespace MonitorTest {
importFrom("BuildXL.Cache.ContentStore").Test.dll,
importFrom("RuntimeContracts").pkg,
...azureSdk,
...importFrom("BuildXL.Cache.ContentStore").kustoPackages,
],
runTestArgs: {

Просмотреть файл

@ -1,37 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using BuildXL.Cache.Monitor.Library.Az;
using Microsoft.Azure.Management.Monitor.Models;
namespace BuildXL.Cache.Monitor.Test
{
internal class MockAzureMetricsClient : IAzureMetricsClient
{
private readonly Queue<Dictionary<MetricName, List<MetricValue>>> _results = new Queue<Dictionary<MetricName, List<MetricValue>>>();
public void Add(Dictionary<MetricName, List<MetricValue>> metrics)
{
_results.Enqueue(metrics);
}
public Task<Dictionary<MetricName, List<MetricValue>>> GetMetricsWithDimensionAsync(
string resourceUri,
IReadOnlyList<MetricName> metrics,
string dimension,
DateTime startTimeUtc,
DateTime endTimeUtc,
TimeSpan samplingInterval,
IReadOnlyList<AggregationType> aggregations,
CancellationToken cancellationToken = default)
{
var result = _results.Peek();
_results.Dequeue();
return Task.FromResult(result);
}
}
}

Просмотреть файл

@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics.ContractsLight;
using System.Linq;
using System.Threading.Tasks;
using BuildXL.Cache.ContentStore.Interfaces.Results;
using BuildXL.Cache.Monitor.Library.Client;
using Kusto.Data.Common;

Просмотреть файл

@ -39,7 +39,6 @@ export namespace DropDaemon {
importFrom("Microsoft.AspNet.WebApi.Client").pkg,
importFrom("Microsoft.IdentityModel.Clients.ActiveDirectory").pkg,
importFrom("Microsoft.VisualStudio.Services.ArtifactServices.Shared").pkg,
importFrom("Microsoft.Azure.Storage.Common").pkg,
importFrom("Microsoft.VisualStudio.Services.BlobStore.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.InteractiveClient").pkg,

Просмотреть файл

@ -38,7 +38,6 @@ export const exe = !BuildXLSdk.isSymbolToolingEnabled ? undefined : BuildXLSdk.e
importFrom("Microsoft.AspNet.WebApi.Client").pkg,
importFrom("Microsoft.IdentityModel.Clients.ActiveDirectory").pkg,
importFrom("Microsoft.VisualStudio.Services.ArtifactServices.Shared").pkg,
importFrom("Microsoft.Azure.Storage.Common").pkg,
importFrom("Microsoft.VisualStudio.Services.BlobStore.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.InteractiveClient").pkg,

Просмотреть файл

@ -28,7 +28,6 @@ namespace Test.Tool.DropDaemon {
importFrom("Drop.Client").pkg,
importFrom("Microsoft.AspNet.WebApi.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.ArtifactServices.Shared").pkg,
importFrom("Microsoft.Azure.Storage.Common").pkg,
importFrom("Microsoft.VisualStudio.Services.BlobStore.Client").pkg,
importFrom("Microsoft.VisualStudio.Services.BlobStore.Client.Cache").pkg,
importFrom("Microsoft.IdentityModel.Clients.ActiveDirectory").pkg,

Просмотреть файл

@ -793,123 +793,6 @@
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.AppService.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.BatchAI.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Cdn.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Compute.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.ContainerInstance.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.ContainerRegistry.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.ContainerService.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.CosmosDB.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Dns.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.EventHub.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Graph.RBAC.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.KeyVault.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
@ -919,132 +802,6 @@
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Locks.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Monitor",
"Version": "0.25.0-preview"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Monitor.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Msi.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Network.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.PrivateDns.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Redis",
"Version": "5.0.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Redis.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.ResourceManager.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Search.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.ServiceBus.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Sql.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.Storage.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",
"NuGet": {
"Name": "Microsoft.Azure.Management.TrafficManager.Fluent",
"Version": "1.33.0"
}
}
},
{
"Component": {
"Type": "NuGet",

Просмотреть файл

@ -385,37 +385,6 @@ config({
{ id: "Microsoft.Rest.ClientRuntime.Azure", version: "3.3.18" },
{ id: "Microsoft.Rest.ClientRuntime.Azure.Authentication", version: "2.4.0" },
// Azure Management SDK
{ id: "Microsoft.Azure.Management.AppService.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.BatchAI.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Cdn.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Compute.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.ContainerInstance.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.ContainerRegistry.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.ContainerService.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.CosmosDB.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Dns.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.EventHub.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Graph.RBAC.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.KeyVault.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Locks.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Msi.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Network.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.PrivateDns.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Search.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.ServiceBus.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Sql.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Storage.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.TrafficManager.Fluent", version: "1.33.0" },
// These are the ones we actually care about
{ id: "Microsoft.Azure.Management.Redis", version: "5.0.0" },
{ id: "Microsoft.Azure.Management.Redis.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.ResourceManager.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Monitor.Fluent", version: "1.33.0" },
{ id: "Microsoft.Azure.Management.Monitor", version: "0.25.0-preview" },
// FsCheck
{ id: "FsCheck", version: "2.14.3" },
{ id: "FSharp.Core", version: "4.2.3" },