Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//
using Microsoft.Extensions.Diagnostics.HealthChecks;
using System.Threading.Tasks;
using System.Threading;

namespace Microsoft.Extensions.Configuration.AzureAppConfiguration
{
internal sealed class AlwaysHealthyHealthCheck : IHealthCheck
{
private static readonly Task<HealthCheckResult> _healthyResult = Task.FromResult(HealthCheckResult.Healthy());

public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
return _healthyResult;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using Microsoft.Extensions.DependencyInjection.Extensions;
using System;
using System.Collections.Generic;
using System.Security;

namespace Microsoft.Extensions.Configuration
{
Expand All @@ -16,19 +15,7 @@ namespace Microsoft.Extensions.Configuration
/// </summary>
public static class AzureAppConfigurationExtensions
{
private const string DisableProviderEnvironmentVariable = "AZURE_APP_CONFIGURATION_PROVIDER_DISABLED";
private static readonly bool _isProviderDisabled = IsProviderDisabled();

private static bool IsProviderDisabled()
{
try
{
return bool.TryParse(Environment.GetEnvironmentVariable(DisableProviderEnvironmentVariable), out bool disabled) ? disabled : false;
}
catch (SecurityException) { }

return false;
}
private static readonly bool _isProviderDisabled = EnvironmentVariableHelper.GetBoolOrDefault(EnvironmentVariableNames.AppConfigurationProviderDisabled);

/// <summary>
/// Adds key-value data from an Azure App Configuration store to a configuration builder using its connection string.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

namespace Microsoft.Extensions.Configuration.AzureAppConfiguration
{
internal class AzureAppConfigurationHealthCheck : IHealthCheck
internal sealed class AzureAppConfigurationHealthCheck : IHealthCheck
{
private static readonly PropertyInfo _propertyInfo = typeof(ChainedConfigurationProvider).GetProperty("Configuration", BindingFlags.Public | BindingFlags.Instance);
private readonly IEnumerable<IHealthCheck> _healthChecks;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace Microsoft.Extensions.DependencyInjection
/// </summary>
public static class AzureAppConfigurationHealthChecksBuilderExtensions
{
private static readonly bool _isProviderDisabled = EnvironmentVariableHelper.GetBoolOrDefault(EnvironmentVariableNames.AppConfigurationProviderDisabled);

/// <summary>
/// Add a health check for Azure App Configuration to given <paramref name="builder"/>.
/// </summary>
Expand All @@ -32,10 +34,20 @@ public static IHealthChecksBuilder AddAzureAppConfiguration(
IEnumerable<string> tags = default,
TimeSpan? timeout = default)
{
IHealthCheck CreateHealthCheck(IServiceProvider sp)
{
if (_isProviderDisabled)
{
return new AlwaysHealthyHealthCheck();
}

return new AzureAppConfigurationHealthCheck(
factory?.Invoke(sp) ?? sp.GetRequiredService<IConfiguration>());
}

return builder.Add(new HealthCheckRegistration(
name ?? HealthCheckConstants.HealthCheckRegistrationName,
sp => new AzureAppConfigurationHealthCheck(
factory?.Invoke(sp) ?? sp.GetRequiredService<IConfiguration>()),
CreateHealthCheck,
failureStatus,
tags,
timeout));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
using System.Net;
using System.Net.Http;
using System.Net.Sockets;
using System.Security;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -143,15 +142,7 @@ public AzureAppConfigurationProvider(IConfigurationClientManager configClientMan
MinRefreshInterval = RefreshConstants.DefaultRefreshInterval;
}

// Enable request tracing if not opt-out
string requestTracingDisabled = null;
try
{
requestTracingDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing);
}
catch (SecurityException) { }

_requestTracingEnabled = bool.TryParse(requestTracingDisabled, out bool tracingDisabled) ? !tracingDisabled : true;
_requestTracingEnabled = !EnvironmentVariableHelper.GetBoolOrDefault(EnvironmentVariableNames.RequestTracingDisabled);

if (_requestTracingEnabled)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//

using System;
using System.Security;

namespace Microsoft.Extensions.Configuration.AzureAppConfiguration
{
internal static class EnvironmentVariableHelper
{
public static bool GetBoolOrDefault(string variableName)
{
try
{
return bool.TryParse(Environment.GetEnvironmentVariable(variableName), out bool disabled) ? disabled : false;
}
catch (SecurityException) { }

return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,26 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration
/// <summary>
/// Environment variables used to configure Azure App Configuration provider behavior.
/// </summary>
internal static class EnvironmentVariables
internal static class EnvironmentVariableNames
{
/// <summary>
/// Environment variable to disable Feature Management schema compatibility.
/// The value of this variable is a boolean string, e.g. "true" or "false".
/// When set to "true", schema compatibility checks for feature flags are disabled,
/// and all feature flags will be interpreted using the Microsoft Feature Flags schema.
/// </summary>
public const string DisableFmSchemaCompatibility = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED";
public const string FmSchemacompatibilityDisabled = "AZURE_APP_CONFIGURATION_FM_SCHEMA_COMPATIBILITY_DISABLED";

/// <summary>
/// Environment variable to disable request tracing.
/// The value of this variable is a boolean string, e.g. "true" or "false".
/// </summary>
public const string DisableRequestTracing = "AZURE_APP_CONFIGURATION_TRACING_DISABLED";
public const string RequestTracingDisabled = "AZURE_APP_CONFIGURATION_TRACING_DISABLED";

/// <summary>
/// Environment variable to disable Azure App Configuration provider.
/// The value of this variable is a boolean string, e.g. "true" or "false".
/// </summary>
public const string AppConfigurationProviderDisabled = "AZURE_APP_CONFIGURATION_PROVIDER_DISABLED";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,7 @@ public FeatureManagementKeyValueAdapter(FeatureFlagTracing featureFlagTracing)
{
_featureFlagTracing = featureFlagTracing ?? throw new ArgumentNullException(nameof(featureFlagTracing));

string fmSchemaCompatibilityDisabled = null;

try
{
fmSchemaCompatibilityDisabled = Environment.GetEnvironmentVariable(EnvironmentVariables.DisableFmSchemaCompatibility);
}
catch (SecurityException) { }

_fmSchemaCompatibilityDisabled = bool.TryParse(fmSchemaCompatibilityDisabled, out bool disabled) ? disabled : false;
_fmSchemaCompatibilityDisabled = EnvironmentVariableHelper.GetBoolOrDefault(EnvironmentVariableNames.FmSchemacompatibilityDisabled);
}

public Task<IEnumerable<KeyValuePair<string, string>>> ProcessKeyValue(ConfigurationSetting setting, Uri endpoint, Logger logger, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2309,7 +2309,7 @@ public void EnvironmentVariableForcesMicrosoftSchemaForAllFlags()
try
{
// Act - Set environment variable to force Microsoft schema
Environment.SetEnvironmentVariable(EnvironmentVariables.DisableFmSchemaCompatibility, "true");
Environment.SetEnvironmentVariable(EnvironmentVariableNames.FmSchemacompatibilityDisabled, "true");

var config = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
Expand Down
4 changes: 2 additions & 2 deletions tests/Tests.AzureAppConfiguration/Unit/Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ public void TestTurnOffRequestTracing()
var options = new AzureAppConfigurationOptions();
options.ClientOptions.Transport = mockTransport;

Environment.SetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing, "True");
Environment.SetEnvironmentVariable(EnvironmentVariableNames.RequestTracingDisabled, "True");

var clientManager = TestHelpers.CreateMockedConfigurationClientManager(options);
var config = new ConfigurationBuilder()
Expand All @@ -296,7 +296,7 @@ public void TestTurnOffRequestTracing()
options.ClientOptions.Transport = mockTransport;

// Delete the request tracing environment variable
Environment.SetEnvironmentVariable(EnvironmentVariables.DisableRequestTracing, null);
Environment.SetEnvironmentVariable(EnvironmentVariableNames.RequestTracingDisabled, null);
Environment.SetEnvironmentVariable(RequestTracingConstants.AzureFunctionEnvironmentVariable, "v1.0");

var clientManager1 = TestHelpers.CreateMockedConfigurationClientManager(options);
Expand Down