Exemple #1
0
        public static NestedResourceConfig <FrontendIPConfiguration, LoadBalancer> CreateFrontendIPConfiguration(
            this ResourceConfig <LoadBalancer> loadBalancer,
            string name,
            IList <string> zones,
            ResourceConfig <PublicIPAddress> publicIPAddress,
            NestedResourceConfig <Subnet, VirtualNetwork> subnet)
        => Strategy.CreateConfig(
            parent: loadBalancer,
            name: name,
            createModel: subscriptionId => {
            var frontEndConfig = CreateFrontendIpConfig(
                froontendPoolName: name,
                subscriptionId: subscriptionId,
                subnetId: subnet.GetId(subscriptionId).IdToString(),
                publicIpAddressId: publicIPAddress.GetId(subscriptionId).IdToString(),
                privateIpAddress: null,
                zones: zones);

            return(frontEndConfig);
        });
 public static ResourceConfig <NetworkInterface> CreateNetworkInterfaceConfig(
     this ResourceConfig <ResourceGroup> resourceGroup,
     string name,
     NestedResourceConfig <Subnet, VirtualNetwork> subnet,
     ResourceConfig <PublicIPAddress> publicIPAddress,
     ResourceConfig <NetworkSecurityGroup> networkSecurityGroup = null)
 => Strategy.CreateResourceConfig(
     resourceGroup: resourceGroup,
     name: name,
     createModel: subscription => new NetworkInterface
 {
     IpConfigurations = new []
     {
         new NetworkInterfaceIPConfiguration
         {
             Name   = name,
             Subnet = new Subnet {
                 Id = subnet.GetId(subscription).IdToString()
             },
             PublicIPAddress = new PublicIPAddress
             {
                 Id = publicIPAddress.GetId(subscription).IdToString()
             }
         }
     },
     NetworkSecurityGroup = networkSecurityGroup == null
                 ? null
                 : new NetworkSecurityGroup
     {
         Id = networkSecurityGroup.GetId(subscription).IdToString()
     }
 },
     dependencies: new IEntityConfig[]
 {
     subnet,
     publicIPAddress,
     networkSecurityGroup
 });
        internal static ResourceConfig <VirtualMachineScaleSet> CreateVirtualMachineScaleSetConfig(
            this ResourceConfig <ResourceGroup> resourceGroup,
            string name,
            NestedResourceConfig <Subnet, VirtualNetwork> subnet,
            IEnumerable <NestedResourceConfig <FrontendIPConfiguration, LoadBalancer> > frontendIpConfigurations,
            NestedResourceConfig <BackendAddressPool, LoadBalancer> backendAdressPool,
            bool isWindows,
            string adminUsername,
            string adminPassword,
            Image image,
            string vmSize,
            int instanceCount,
            UpgradeMode?upgradeMode)
        => Strategy.CreateResourceConfig(
            resourceGroup: resourceGroup,
            name: name,
            createModel: subscriptionId =>
        {
            var vmss = new VirtualMachineScaleSet()
            {
                Zones = frontendIpConfigurations
                        ?.Select(f => f.CreateModel(subscriptionId))
                        ?.Where(z => z?.Zones != null)
                        .SelectMany(z => z.Zones)
                        .Where(z => z != null)
                        .ToList(),

                UpgradePolicy = upgradeMode.HasValue ?
                                new UpgradePolicy
                {
                    Mode = upgradeMode
                }
                            : new UpgradePolicy
                {
                    Mode = UpgradeMode.Manual
                },

                Sku = new Microsoft.Azure.Management.Compute.Models.Sku()
                {
                    Capacity = instanceCount,
                    Name     = vmSize,
                },
                VirtualMachineProfile = new VirtualMachineScaleSetVMProfile()
            };

            vmss.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetOSProfile
            {
                ComputerNamePrefix   = name.Substring(0, Math.Min(name.Length, 9)),
                WindowsConfiguration = isWindows ? new WindowsConfiguration {
                } : null,
                LinuxConfiguration   = isWindows ? null : new LinuxConfiguration(),
                AdminUsername        = adminUsername,
                AdminPassword        = adminPassword,
            };

            vmss.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile
            {
                ImageReference = new ImageReference
                {
                    Publisher = image.publisher,
                    Offer     = image.offer,
                    Sku       = image.sku,
                    Version   = image.version
                }
            };

            var ipConfig = new VirtualMachineScaleSetIPConfiguration
            {
                Name = name,
                LoadBalancerBackendAddressPools = new List <Microsoft.Azure.Management.Compute.Models.SubResource>(
                    new[] {
                    new Microsoft.Azure.Management.Compute.Models.SubResource(
                        id: backendAdressPool.GetId(subscriptionId).IdToString())
                }),
                Subnet = new ApiEntityReference {
                    Id = subnet.GetId(subscriptionId).IdToString()
                }
            };


            vmss.VirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile
            {
                NetworkInterfaceConfigurations = new[]
                {
                    new VirtualMachineScaleSetNetworkConfiguration
                    {
                        Name             = name,
                        IpConfigurations = new List <VirtualMachineScaleSetIPConfiguration>(
                            new [] { ipConfig }),
                        Primary = true
                    }
                }
            };


            return(vmss);
        },
            dependencies: new IEntityConfig[] { subnet, backendAdressPool }
            .Concat(frontendIpConfigurations));