ParamGeneratorCmdlet.cs
using APIManagementTemplate.Models;
using LogicAppTemplate.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Dynamic; using System.IO; using System.Linq; using System.Management.Automation; using System.Text; using System.Threading.Tasks; namespace APIManagementTemplate { [Cmdlet(VerbsCommon.Get, "ParameterTemplate", ConfirmImpact = ConfirmImpact.None)] public class ParamGenerator : PSCmdlet { [Parameter( Mandatory = true, HelpMessage = "The path to the template file" )] public string TemplateFile; [Parameter( Mandatory = false, HelpMessage = "How to handle KeyVault integration, default is None, available options None or Static, Static will generate parameters for static reference to KeyVault" )] public KeyVaultUsage KeyVault = KeyVaultUsage.None; public enum KeyVaultUsage { None, Static } private ParameterTemplate paramTemplate; public ParamGenerator() { var assembly = System.Reflection.Assembly.GetExecutingAssembly(); var resourceName = "LogicAppTemplate.Templates.paramTemplate.json"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) using (StreamReader reader = new StreamReader(stream)) { paramTemplate = JsonConvert.DeserializeObject<ParameterTemplate>(reader.ReadToEnd()); } } protected override void ProcessRecord() { var logicappTemplate = JObject.Parse(File.ReadAllText(TemplateFile)); var result = CreateParameterFileFromTemplate(logicappTemplate); WriteObject(result.ToString()); } public JObject CreateParameterFileFromTemplate(JObject logicAppTemplate) { foreach (var param in logicAppTemplate["parameters"].Children<JProperty>()) { // Don't create parameters that reference a ARM Template expression if (param.Value.Value<string>("type").Equals("string", StringComparison.CurrentCultureIgnoreCase) && param.Value.Value<string>("defaultValue") != null && param.Value.Value<string>("defaultValue").StartsWith("[")) { continue; } var obj = new JObject(); if (KeyVaultUsage.Static == KeyVault && (string)logicAppTemplate["parameters"][param.Name]["type"] == "securestring") { dynamic k = new ExpandoObject(); k.keyVault = new ExpandoObject(); k.keyVault.id = "/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.KeyVault/vaults/{vault-name}"; k.secretName = param.Name; obj["reference"] = JObject.FromObject(k); } else { obj["value"] = logicAppTemplate["parameters"][param.Name]["defaultValue"]; } paramTemplate.parameters.Add(param.Name, obj); } return JObject.FromObject(paramTemplate); } } } |