2 using System.Collections.Generic;
5 using System.Threading.Tasks;
7 namespace FUSE.AzureConfig.Tasks
13 var roles =
new Dictionary<string, AzureRoleDetails>();
14 var envs =
new Dictionary<string, AzureEnvironment>();
15 foreach (var e
in spec.Environments)
17 ProcessEnv(e.Key, spec, roles, envs);
19 foreach (var r
in envs.Values.SelectMany(e => e.Roles.Values).GroupBy(r => r.RoleName))
21 var currentSettings = r.SelectMany(x => x.ConfigSettings.Settings.Keys);
22 r.ToList().ForEach(x => x.Details.ConfigurationSettingKeys.UnionWith(currentSettings));
24 foreach (var r
in envs.Values.SelectMany(e => e.Roles.Values))
26 r.ConfigSettings.AddMissing(r.Details.ConfigurationSettingKeys);
29 envs = envs.Where(e => e.Value.Roles.Any(x => x.Value.Instances > 0) && !
string.IsNullOrEmpty(e.Value.EnvName))
30 .ToDictionary(x => x.Value.EnvName, x => x.Value);
36 Dictionary<string, AzureRoleDetails> roles,
37 Dictionary<string, AzureEnvironment> envs)
40 if (envs.TryGetValue(envName, out env))
43 var curSpec = spec.Environments.Single(s => s.Key == envName).Value;
44 if (
string.IsNullOrEmpty(curSpec.Parent))
50 env = Ensure(envs, envName, n =>
51 AzureEnvironment.FromParent(curSpec.ProfileName, ProcessEnv(curSpec.Parent, spec, roles, envs)));
53 if (curSpec.Roles != null)
55 foreach (var r
in curSpec.Roles)
57 var role = Ensure(roles, r.Key, n =>
new AzureRoleDetails(n));
58 var roleEnv = Ensure(env.Roles, r.Key, n =>
new AzureRoleEnvironmentDetails(role));
59 roleEnv.Instances = r.Value.Instances;
62 foreach (var s
in curSpec.ConfigSettings)
64 var inRoles = s.Key.Split(
new char[] {
',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim());
65 foreach (var r
in inRoles)
67 var role = Ensure(roles, r, n =>
new AzureRoleDetails(n));
68 var roleEnv = Ensure(env.Roles, r, n =>
new AzureRoleEnvironmentDetails(role));
69 roleEnv.ConfigSettings.AddSettings(s.Value);
76 private static T Ensure<T>(IDictionary<string, T> dict,
string key, Func<string, T> genNew)
79 if (!dict.TryGetValue(key, out val))
AzureConfig Process(AzureConfigSpec spec)
Processed Azure configuration
JSON-based azure configuration specification.