/// <summary> /// Determines the API version. /// </summary> /// <param name="context">The azure profile.</param> /// <param name="resourceId">The resource Id.</param> /// <param name="cancellationToken">The cancellation token</param> /// <param name="pre">When specified, indicates if pre-release API versions should be considered.</param> internal static Task <string> DetermineApiVersion(IAzureContext context, string resourceId, CancellationToken cancellationToken, bool?pre = null, Dictionary <string, string> cmdletHeaderValues = null) { var providerNamespace = ResourceIdUtility.GetExtensionProviderNamespace(resourceId) ?? ResourceIdUtility.GetProviderNamespace(resourceId); var resourceType = ResourceIdUtility.GetExtensionResourceType(resourceId: resourceId, includeProviderNamespace: false) ?? ResourceIdUtility.GetResourceType(resourceId: resourceId, includeProviderNamespace: false); return(ApiVersionHelper.DetermineApiVersion(context: context, providerNamespace: providerNamespace, resourceType: resourceType, cancellationToken: cancellationToken, pre: pre, cmdletHeaderValues: cmdletHeaderValues)); }
/// <summary> /// Determines the API version. /// </summary> /// <param name="profile">The azure profile.</param> /// <param name="resourceId">The resource Id.</param> /// <param name="cancellationToken">The cancellation token</param> /// <param name="pre">When specified, indicates if pre-release API versions should be considered.</param> internal static Task <string> DetermineApiVersion(AzureProfile profile, string resourceId, CancellationToken cancellationToken, bool?pre = null) { var providerNamespace = ResourceIdUtility.GetExtensionProviderNamespace(resourceId) ?? ResourceIdUtility.GetProviderNamespace(resourceId); var resourceType = ResourceIdUtility.GetExtensionResourceType(resourceId: resourceId, includeProviderNamespace: false) ?? ResourceIdUtility.GetResourceType(resourceId: resourceId, includeProviderNamespace: false); return(ApiVersionHelper.DetermineApiVersion(profile: profile, providerNamespace: providerNamespace, resourceType: resourceType, cancellationToken: cancellationToken, pre: pre)); }
/// <summary> /// Determines the API version. /// </summary> /// <param name="context">The azure profile.</param> /// <param name="providerNamespace">The provider namespace.</param> /// <param name="resourceType">The resource type.</param> /// <param name="cancellationToken">The cancellation token</param> /// <param name="pre">When specified, indicates if pre-release API versions should be considered.</param> internal static Task <string> DetermineApiVersion(IAzureContext context, string providerNamespace, string resourceType, CancellationToken cancellationToken, bool?pre = null, Dictionary <string, string> cmdletHeaderValues = null) { var cacheKey = ApiVersionCache.GetCacheKey(context.Environment.Name, providerNamespace: providerNamespace, resourceType: resourceType); var apiVersions = ApiVersionCache.Instance .AddOrGetExisting(cacheKey: cacheKey, getFreshData: () => ApiVersionHelper.GetApiVersionsForResourceType( context, providerNamespace: providerNamespace, resourceType: resourceType, cancellationToken: cancellationToken, cmdletHeaderValues: cmdletHeaderValues)); apiVersions = apiVersions.CoalesceEnumerable().ToArray(); var apiVersionsToSelectFrom = apiVersions; if (pre == null || pre == false) { apiVersionsToSelectFrom = apiVersions .Where(apiVersion => apiVersion.IsDecimal(NumberStyles.AllowDecimalPoint) || apiVersion.IsDateTime("yyyy-mm-dd", DateTimeStyles.None)) .ToArray(); } var selectedApiVersion = apiVersionsToSelectFrom.OrderByDescending(apiVersion => apiVersion).FirstOrDefault(); if (string.IsNullOrWhiteSpace(selectedApiVersion) && apiVersions.Any()) { // fall back on pre-release APIs if they're the only ones available. selectedApiVersion = apiVersions.OrderByDescending(apiVersion => apiVersion).FirstOrDefault(); } var result = string.IsNullOrWhiteSpace(selectedApiVersion) ? Constants.DefaultApiVersion : selectedApiVersion; return(Task.FromResult(result)); }