Skip to content

Commit e69d16f

Browse files
committed
use GetKey and GetValue to be able to override how parameter key, value is being fetched
1 parent 47070ac commit e69d16f

File tree

5 files changed

+38
-38
lines changed

5 files changed

+38
-38
lines changed

src/Amazon.Extensions.Configuration.SystemsManager/DefaultParameterProcessor.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,16 @@ public virtual IDictionary<string, string> ProcessParameters(IEnumerable<Paramet
5555

5656
foreach (var parameter in parameters.Where(parameter => IncludeParameter(parameter, path)))
5757
{
58-
var prefix = GetKey(parameter, path);
58+
var keyPrefix = GetKey(parameter, path);
59+
var value = GetValue(parameter, path);
5960

6061
if (parameter.Type == ParameterType.StringList)
6162
{
62-
ParseStringListParameter(parameter, prefix, result);
63+
ParseStringListParameter(keyPrefix, value, result);
6364
continue;
6465
}
6566

66-
ParseStringParameter(parameter, prefix, result);
67+
ParseStringParameter(keyPrefix, value, result);
6768
}
6869

6970
return result;

src/Amazon.Extensions.Configuration.SystemsManager/JsonOrStringParameterProcessor.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,22 @@ public override IDictionary<string, string> ProcessParameters(IEnumerable<Parame
2121

2222
foreach (var parameter in parameters.Where(parameter => IncludeParameter(parameter, path)))
2323
{
24-
var prefix = GetKey(parameter, path);
24+
var keyPrefix = GetKey(parameter, path);
25+
var value = GetValue(parameter, path);
2526

2627
if (parameter.Type == ParameterType.StringList)
2728
{
28-
ParseStringListParameter(parameter, prefix, result);
29+
ParseStringListParameter(keyPrefix, value, result);
2930
continue;
3031
}
3132

3233
try
3334
{
34-
ParseJsonParameter(parameter, prefix, result);
35+
ParseJsonParameter(keyPrefix, value, result);
3536
}
3637
catch (JsonException)
3738
{
38-
ParseStringParameter(parameter, prefix, result);
39+
ParseStringParameter(keyPrefix, value, result);
3940
}
4041
}
4142

src/Amazon.Extensions.Configuration.SystemsManager/JsonParameterProcessor.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ public override IDictionary<string, string> ProcessParameters(IEnumerable<Parame
3434

3535
foreach (var parameter in parameters.Where(parameter => IncludeParameter(parameter, path)))
3636
{
37-
var prefix = GetKey(parameter, path);
37+
var keyPrefix = GetKey(parameter, path);
38+
var value = GetValue(parameter, path);
3839

39-
ParseJsonParameter(parameter, prefix, result);
40+
ParseJsonParameter(keyPrefix, value, result);
4041
}
4142

4243
return result;

src/Amazon.Extensions.Configuration.SystemsManager/Utils/ParameterProcessorUtil.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Collections.Generic;
22
using System.Linq;
33
using Amazon.Extensions.Configuration.SystemsManager.Internal;
4-
using Amazon.SimpleSystemsManagement.Model;
54
using Microsoft.Extensions.Configuration;
65
using System.Text.Json;
76

@@ -12,14 +11,14 @@ public static class ParameterProcessorUtil
1211
/// <summary>
1312
/// Parses the SSM parameter as JSON
1413
/// </summary>
15-
/// <param name="parameter">SSM parameter</param>
1614
/// <param name="keyPrefix">prefix to add in configution key</param>
15+
/// <param name="value">SSM parameter value</param>
1716
/// <param name="result">append the parsed JSON value into</param>
1817
/// <exception cref="DuplicateParameterException">SSM parameter key is already present in <paramref name="result"/></exception>
19-
/// <exception cref="JsonException"><paramref name="parameter" /> value does not represent a valid single JSON value.</exception>
20-
public static void ParseJsonParameter(Parameter parameter, string keyPrefix, IDictionary<string, string> result)
18+
/// <exception cref="JsonException"><paramref name="value" /> does not represent a valid single JSON value.</exception>
19+
public static void ParseJsonParameter(string keyPrefix, string value, IDictionary<string, string> result)
2120
{
22-
foreach (var kv in JsonConfigurationParser.Parse(parameter.Value))
21+
foreach (var kv in JsonConfigurationParser.Parse(value))
2322
{
2423
var key = !string.IsNullOrEmpty(keyPrefix) ? ConfigurationPath.Combine(keyPrefix, kv.Key) : kv.Key;
2524
if (result.ContainsKey(key))
@@ -39,15 +38,15 @@ public static void ParseJsonParameter(Parameter parameter, string keyPrefix, IDi
3938
/// If you have a parameter value that requires a comma, then use the String type.
4039
/// https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html#param-create-cli-stringlist
4140
/// </summary>
42-
/// <param name="parameter">SSM parameter</param>
4341
/// <param name="keyPrefix">prefix to add in configution key</param>
42+
/// <param name="value">SSM parameter</param>
4443
/// <param name="result">append the parsed string list value into</param>
4544
/// <exception cref="DuplicateParameterException">SSM parameter key is already present in <paramref name="result"/></exception>
46-
public static void ParseStringListParameter(Parameter parameter, string keyPrefix, IDictionary<string, string> result)
45+
public static void ParseStringListParameter(string keyPrefix, string value, IDictionary<string, string> result)
4746
{
48-
var configKeyValuePairs = parameter.Value
47+
var configKeyValuePairs = value
4948
.Split(',')
50-
.Select((value, idx) => new KeyValuePair<string, string>($"{keyPrefix}{ConfigurationPath.KeyDelimiter}{idx}", value));
49+
.Select((eachValue, idx) => new KeyValuePair<string, string>($"{keyPrefix}{ConfigurationPath.KeyDelimiter}{idx}", eachValue));
5150

5251
foreach (var kv in configKeyValuePairs)
5352
{
@@ -63,18 +62,18 @@ public static void ParseStringListParameter(Parameter parameter, string keyPrefi
6362
/// <summary>
6463
/// Parses the SSM parameter as String
6564
/// </summary>
66-
/// <param name="parameter">SSM parameter</param>
6765
/// <param name="key">key to be used for configution key</param>
66+
/// <param name="value">SSM parameter</param>
6867
/// <param name="result">append the parsed string value into</param>
6968
/// <exception cref="DuplicateParameterException">SSM parameter key is already present in <paramref name="result"/></exception>
70-
public static void ParseStringParameter(Parameter parameter, string key, IDictionary<string, string> result)
69+
public static void ParseStringParameter(string key, string value, IDictionary<string, string> result)
7170
{
7271
if (result.ContainsKey(key))
7372
{
7473
throw new DuplicateParameterException($"Duplicate parameter '{key}' found. Parameter keys are case-insensitive.");
7574
}
7675

77-
result.Add(key, parameter.Value);
76+
result.Add(key, value);
7877
}
7978
}
8079
}
Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Collections.Generic;
22
using System.Text.Json;
33
using Amazon.Extensions.Configuration.SystemsManager.Utils;
4-
using Amazon.SimpleSystemsManagement.Model;
54
using Xunit;
65

76
namespace Amazon.Extensions.Configuration.SystemsManager.Tests.Utils
@@ -12,10 +11,10 @@ public class ParameterProcessorUtilTests
1211
public void ParseJsonParameterSuccessfully()
1312
{
1413
var result = new Dictionary<string, string>();
15-
var parameter = new Parameter { Value = "{\"key\": \"value\"}" };
14+
var value = "{\"key\": \"value\"}";
1615
var keyPrefix = "prefix";
1716

18-
ParameterProcessorUtil.ParseJsonParameter(parameter, keyPrefix, result);
17+
ParameterProcessorUtil.ParseJsonParameter(keyPrefix, value, result);
1918

2019
Assert.Single(result);
2120
Assert.Contains("prefix:key", result.Keys);
@@ -26,30 +25,30 @@ public void ParseJsonParameterSuccessfully()
2625
public void ParseJsonParameterWithDuplicateKeyThrowsException()
2726
{
2827
var result = new Dictionary<string, string> { { "prefix:key", "value" } };
29-
var parameter = new Parameter { Value = "{\"key\": \"newvalue\"}" };
28+
var value = "{\"key\": \"newvalue\"}";
3029
var keyPrefix = "prefix";
3130

32-
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseJsonParameter(parameter, keyPrefix, result));
31+
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseJsonParameter(keyPrefix, value, result));
3332
}
3433

3534
[Fact]
3635
public void ParseJsonParameterForInvalidJsonThrowsException()
3736
{
3837
var result = new Dictionary<string, string>();
39-
var parameter = new Parameter { Value = "invalid json" };
38+
var value = "invalid json";
4039
var keyPrefix = "";
4140

42-
Assert.ThrowsAny<JsonException>(() => ParameterProcessorUtil.ParseJsonParameter(parameter, keyPrefix, result));
41+
Assert.ThrowsAny<JsonException>(() => ParameterProcessorUtil.ParseJsonParameter(keyPrefix, value, result));
4342
}
4443

4544
[Fact]
4645
public void ParseStringListParameterSuccessfully()
4746
{
4847
var result = new Dictionary<string, string>();
49-
var parameter = new Parameter { Value = "value1,value2,value3" };
48+
var value = "value1,value2,value3";
5049
var keyPrefix = "prefix";
5150

52-
ParameterProcessorUtil.ParseStringListParameter(parameter, keyPrefix, result);
51+
ParameterProcessorUtil.ParseStringListParameter(keyPrefix, value, result);
5352

5453
Assert.Equal(3, result.Count);
5554
Assert.Contains("prefix:0", result.Keys);
@@ -64,20 +63,20 @@ public void ParseStringListParameterSuccessfully()
6463
public void ParseStringListParameterWithDuplicateKeyThrowsException()
6564
{
6665
var result = new Dictionary<string, string> { { "prefix:0", "value" } };
67-
var parameter = new Parameter { Value = "value1,value2,value3" };
66+
var value = "value1,value2,value3";
6867
var keyPrefix = "prefix";
6968

70-
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseStringListParameter(parameter, keyPrefix, result));
69+
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseStringListParameter(keyPrefix, value, result));
7170
}
72-
71+
7372
[Fact]
7473
public void ParseStringParameterSuccessfully()
7574
{
7675
var result = new Dictionary<string, string>();
77-
var parameter = new Parameter { Value = "stringValue" };
76+
var value = "stringValue";
7877
var key = "myKey";
7978

80-
ParameterProcessorUtil.ParseStringParameter(parameter, key, result);
79+
ParameterProcessorUtil.ParseStringParameter(key, value, result);
8180

8281
Assert.Single(result);
8382
Assert.Contains("myKey", result.Keys);
@@ -88,11 +87,10 @@ public void ParseStringParameterSuccessfully()
8887
public void ParseStringParameterWithDuplicateKeyThrowsException()
8988
{
9089
var result = new Dictionary<string, string> { { "myKey", "existingValue" } };
91-
var parameter = new Parameter { Value = "newValue" };
90+
var value = "newValue";
9291
var key = "myKey";
9392

94-
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseStringParameter(parameter, key, result));
93+
Assert.Throws<DuplicateParameterException>(() => ParameterProcessorUtil.ParseStringParameter(key, value, result));
9594
}
96-
9795
}
9896
}

0 commit comments

Comments
 (0)