зеркало из https://github.com/microsoft/BuildXL.git
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:
Родитель
b97afb1500
Коммит
343bd394e4
|
@ -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",
|
||||
|
|
31
config.dsc
31
config.dsc
|
@ -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" },
|
||||
|
|
Загрузка…
Ссылка в новой задаче