Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }