Comments (4)
Reproducible using customer's code.
from aws-dotnet-extensions-configuration.
The reason why the customer's scenarios fails is that it tries to process the parameter value that starts with path that begins with /release/api
and convert it to Dictionary
at
Here, it would first process JSON value for parameter for path /release/api/ObjectA
and add value with key Bucket
to dictionary. When it proceeds to process JSON value for parameter for path /release/api/ObjectB
, duplicate key Bucket
is added and hence exception is thrown.
The desired fix might be to path separate parameters by remaining path segment (e.g. ObjectA
or ObjectB
or somepath/ObjectA
) using configuration builder convention (which is to separate parameter path with :
separator), but would not work for issue reported in the case. It's the JsonParameterProcessor
, not the JsonParameterDeserializer
/JsonConfigurationProvider
.
The following change could be made in JsonParameterProcessor
:
public override IDictionary<string, string> ProcessParameters(IEnumerable<Parameter> parameters, string path)
{
var outputDictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (Parameter parameter in parameters.Where(parameter => IncludeParameter(parameter, path)))
{
string prefix = parameter.Name.Substring(path.Length, parameter.Name.Length - path.Length);
var prefixParts = prefix.Split('/').Where(p => !string.IsNullOrWhiteSpace(p));
prefix = ConfigurationPath.Combine(prefixParts);
var parameterDictionary = JsonConfigurationParser.Parse(parameter.Value);
foreach (var keyValue in parameterDictionary)
{
string key = ConfigurationPath.Combine(prefix, keyValue.Key);
outputDictionary.Add(key, keyValue.Value);
}
}
return outputDictionary;
}
Then the values for ObjectA
or ObjectB
could be retrieved using options pattern (refer https://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/ as an example):
Program.cs
builder.Services.Configure<ObjectA>(options => builder.Configuration.GetSection("ObjectA").Bind(options));
builder.Services.Configure<ObjectB>(options => builder.Configuration.GetSection("ObjectB").Bind(options));
Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Options;
namespace SystemsManagerJsonParameter_Issue123.Pages;
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly string _bucketName;
public IndexModel(ILogger<IndexModel> logger, IOptions<ObjectA> options)
{
_logger = logger;
_bucketName = options.Value.Bucket;
}
public void OnGet()
{
}
}
from aws-dotnet-extensions-configuration.
Fixed in Amazon.Extensions.Configuration.SystemsManager version 5.0.0. Kindly take note of the breaking change entry in RELEASE.CHANGELOG.md.
from aws-dotnet-extensions-configuration.
⚠️ COMMENT VISIBILITY WARNING⚠️
Comments on closed issues are hard for our team to see.
If you need more assistance, please either tag a team member or open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.
from aws-dotnet-extensions-configuration.
Related Issues (20)
- AWS Parameter Store - Loading and Processing Sequence of Operations HOT 5
- Configuring a Dictionary HOT 3
- AppConfigProcessor to expose LastConfigVersion as part of the GetDataAsync HOT 5
- ssm:GetParametersByPath permission is required HOT 2
- Unable to load params from AWS Param Store HOT 7
- "AddSystemsManager" method doesn't work with DI and .Net 6 HOT 6
- Missing documentation for loading Secret Manager secrets as SSM parameters HOT 3
- AddSystemsManager Takes 1+ Minutes to Complete HOT 3
- Loading AppConfig feature flags into strong-type options HOT 7
- Support for the AWS Lambda Extension HOT 4
- NotImplementedException - application/json; charset=utf-8 HOT 6
- AddSystemsManager with SecretsManager path resolves parameters with ':' prefix HOT 4
- Missing dependency AWSSDK.SecurityToken ? HOT 5
- Duplicate SSM parameter with different Case cause the whole SSM parameter fail to load HOT 10
- 5.1.1 breaks existing application using StringList HOT 6
- amazon.extensions.configuration.systemsmanager is missing NuGet package README file
- AddAppConfig default encapsulation HOT 1
- Add manual reload ability HOT 3
- Is there a dev mode that works with local config? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aws-dotnet-extensions-configuration.