/// <summary> /// Generate the JSON string. /// </summary> /// <param name="_template"></param> /// <returns></returns> public static string GenerateJson(ARM_Template.Template _template) { string json = (JsonConvert.SerializeObject (_template, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }).ToString()); return(json); }
/// <summary> /// Create the template instance, to be used after validate. /// </summary> /// <param name="_Location"></param> /// <param name="_ResourceGroup"></param> /// <param name="_AdminUsername"></param> /// <param name="_AdminPassword"></param> /// <param name="_VNET_ResourceGroup"></param> /// <param name="_VNETName"></param> /// <param name="_VNETAddressSpace"></param> /// <param name="_SubnetName"></param> /// <param name="_SubnetAddressSpace"></param> /// <param name="_NSGName"></param> /// <param name="_NSGtoNIC"></param> /// <param name="_VMNamePrefix"></param> /// <param name="_VMSize"></param> /// <param name="_VMInstanceCount"></param> /// <param name="_VMDiskStorageType"></param> /// <param name="_VMDataDiskSize"></param> /// <param name="_VMDataDiskCount"></param> /// <param name="_ImagePublisher"></param> /// <param name="_ImageOffer"></param> /// <param name="_ImageSku"></param> /// <param name="_VMLANIP"></param> /// <param name="_UsePIP"></param> /// <param name="_AvSetName"></param> /// <param name="_DiagStrAccName"></param> /// <param name="_nsgRules"></param> /// <returns></returns> public static ARM_Template.Template GenerateTemplateClass(string _Location, string _ResourceGroup, string _AdminUsername, string _AdminPassword, string _VNET_ResourceGroup, string _VNETName, string _VNETAddressSpace, string _SubnetName, string _SubnetAddressSpace, string _NSGName, bool _NSGtoNIC, string _VMNamePrefix, string _VMSize, int _VMInstanceCount, string _VMDiskStorageType, int _VMDataDiskSize, int _VMDataDiskCount, string _ImagePublisher, string _ImageOffer, string _ImageSku, string _VMLANIP, bool _UsePIP, string _AvSetName, string _DiagStrAccName, List <ARM_Template.Resource_Classes.SecurityRule> _nsgRules, bool _DiagStrAccNew) { // Create a return instance var localTemplate = new ARM_Template.Template(); // Determine some bool // More than 1 VM? bool multiVM = (_VMInstanceCount > 1); // Has Data Disk? bool hasDataDisk = ((_VMDataDiskCount > 0) && (_VMDataDiskSize > 0)); // Use AvSet? //bool useAvSet = (_AvSetName != "" && _AvSetName != null); // Use DiagAccount? bool useDiagAcc = (_DiagStrAccName != "" && _DiagStrAccName != null); // The DiagAccount should be created? bool createNewDiagAcc = (useDiagAcc && _DiagStrAccNew); // VNet in a different Resource Group? bool differentRGforVNET = ((_VNET_ResourceGroup != "" && _VNET_ResourceGroup != null) && _VNET_ResourceGroup != _ResourceGroup); // Create a new VNet? bool createNewVNet = (_VNETAddressSpace != "" && _VNETAddressSpace != null); // Create a new NSG? bool createNSG = (_NSGName != "" && _NSGName != null); // NSG attach to NIC? This will be true only when new NSG to be created, AND NSGtoNIC is ticked. bool attachNsgToNic = _NSGtoNIC && createNSG; // Utilize AvSet? bool createAvSet = (_AvSetName != "" && _AvSetName != null); //////////////////////////////////////////////////////////// // Initialize the Resource List localTemplate.resources = new List <ARM_Template.Resource>(); // Initialize the Variables_IAAS List localTemplate.variables = new ARM_Template.Variables_IAAS(_UsePIP, createAvSet, useDiagAcc, createNewDiagAcc); // Add VM to Resource segment localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_VirtualMachine(multiVM, hasDataDisk, createAvSet, useDiagAcc, createNewDiagAcc)); // Add NIC to Resource segment localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_NetworkInterface(multiVM, attachNsgToNic, _UsePIP, createNewVNet)); // Location and RG localTemplate.variables.Location = _Location; localTemplate.variables.ResourceGroup_Name = _ResourceGroup; // OS Credential localTemplate.variables.AdminUsername = _AdminUsername; localTemplate.variables.AdminPassword = _AdminPassword; // VNET & Subnet localTemplate.variables.VNET_ResourceGroup = differentRGforVNET ? _VNET_ResourceGroup : _ResourceGroup; localTemplate.variables.VNET_Name = _VNETName; if (createNewVNet && !differentRGforVNET) { localTemplate.variables.VNET_AddressSpace = _VNETAddressSpace; localTemplate.variables.Subnet_AddressSpace = _SubnetAddressSpace; // Add VNET to Resource segment localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_VirtualNetwork()); } localTemplate.variables.Subnet_Name = _SubnetName; // NSG if (createNSG) { localTemplate.variables.NSG_Name = _NSGName; localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_NetworkSecurityGroup()); } // VM localTemplate.variables.VM_NamePrefix = _VMNamePrefix; localTemplate.variables.VM_Size = _VMSize; // VM Instance Count if (_VMInstanceCount > 1) { localTemplate.variables.VM_InstanceCount = _VMInstanceCount; } localTemplate.variables.VM_DiskStorageType = _VMDiskStorageType; // Data Disk if (hasDataDisk) { localTemplate.variables.VM_DataDiskSize = _VMDataDiskSize; localTemplate.variables.VM_DataDiskCount = _VMDataDiskCount; } // Image localTemplate.variables.Image_Publisher = _ImagePublisher; localTemplate.variables.Image_Offer = _ImageOffer; localTemplate.variables.Image_Sku = _ImageSku; // LAN IP // Split VM LAN IP string[] tempLANIPArray = _VMLANIP.Split('.'); localTemplate.variables.IP_Internal_1_3 = tempLANIPArray[0] + "." + tempLANIPArray[1] + "." + tempLANIPArray[2] + "."; int.TryParse(tempLANIPArray[3], out int temp_Internal_4); localTemplate.variables.IP_Internal_4 = temp_Internal_4; // AvSet if (createAvSet) { localTemplate.variables.AvSet_Name = _AvSetName; localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_AvailabilitySet()); } // Diag Account if (useDiagAcc) { localTemplate.variables.DiagnosticsStorageAccount_Name = _DiagStrAccName; if (createNewDiagAcc) { localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_DiagnosticsStorageAccount()); } } // PIP if (_UsePIP) { localTemplate.resources.Add(new ARM_Template.Resource_Classes.Resource_PublicIPAddress(multiVM)); } // Read the NSG Rules if exists if (_nsgRules != null && createNSG) { localTemplate.variables.NSG_Rules = _nsgRules; } else if (_nsgRules == null && createNSG) { localTemplate.variables.NSG_Rules = new List <ARM_Template.Resource_Classes.SecurityRule>(); } return(localTemplate); }