Пример #1
0
        public override ILoadBalancer UpdateResource(ILoadBalancer resource)
        {
            ILoadBalancerBackend        backend        = resource.Backends.Values.First();
            ILoadBalancerInboundNatRule natRule        = resource.InboundNatRules.Values.First();
            ILoadBalancerPublicFrontend publicFrontend = (ILoadBalancerPublicFrontend)natRule.Frontend;

            IPublicIPAddress pip = resource.Manager.PublicIPAddresses.Define(loadBalancerHelper.PipNames[1])
                                   .WithRegion(loadBalancerHelper.Region)
                                   .WithExistingResourceGroup(loadBalancerHelper.GroupName)
                                   .WithLeafDomainLabel(loadBalancerHelper.PipNames[1])
                                   .Create();

            resource = resource.Update()
                       .UpdatePublicFrontend(publicFrontend.Name)
                       .WithExistingPublicIPAddress(pip)
                       .Parent()
                       .DefineBackend("backend2")
                       .Attach()
                       .WithoutBackend(backend.Name)
                       .WithoutInboundNatRule("natrule1")
                       .WithTag("tag1", "value1")
                       .WithTag("tag2", "value2")
                       .Apply();

            Assert.True(resource.Tags.ContainsKey("tag1"));

            // Verify frontends
            Assert.Equal(1, resource.Frontends.Count);
            Assert.Equal(1, resource.PublicFrontends.Count);
            Assert.Equal(0, resource.PrivateFrontends.Count);
            Assert.True(resource.Frontends.ContainsKey(publicFrontend.Name));
            var frontend = resource.Frontends[publicFrontend.Name];

            Assert.True(frontend.IsPublic);
            publicFrontend = (ILoadBalancerPublicFrontend)frontend;
            Assert.Equal(pip.Id, publicFrontend.PublicIPAddressId, ignoreCase: true);
            Assert.Equal(0, publicFrontend.LoadBalancingRules.Count);

            // Verify probes
            Assert.Equal(0, resource.TcpProbes.Count);
            Assert.Equal(0, resource.HttpProbes.Count);

            // Verify backends
            Assert.True(resource.Backends.ContainsKey("backend2"));
            Assert.True(!resource.Backends.ContainsKey(backend.Name));

            // Verify NAT rules
            Assert.Equal(0, resource.InboundNatRules.Count);

            // Verify load balancing rules
            Assert.Equal(0, resource.LoadBalancingRules.Count);

            return(resource);
        }
        public static ILoadBalancer CreateInternalLoadBalancer(
            IAzure azure,
            IResourceGroup resourceGroup,
            INetwork network,
            string id,
            Region location)
        {
            string loadBalancerName    = TestUtilities.GenerateName("InternalLb" + id);
            string privateFrontEndName = loadBalancerName + "-FE1";
            string backendPoolName1    = loadBalancerName + "-BAP1";
            string backendPoolName2    = loadBalancerName + "-BAP2";
            string natPoolName1        = loadBalancerName + "-INP1";
            string natPoolName2        = loadBalancerName + "-INP2";
            string subnetName          = "subnet1";

            ILoadBalancer loadBalancer = azure.LoadBalancers.Define(loadBalancerName)
                                         .WithRegion(location)
                                         .WithExistingResourceGroup(resourceGroup)
                                         // Add two rules that uses above backend and probe
                                         .DefineLoadBalancingRule("httpRule")
                                         .WithProtocol(TransportProtocol.Tcp)
                                         .FromFrontend(privateFrontEndName)
                                         .FromFrontendPort(1000)
                                         .ToBackend(backendPoolName1)
                                         .WithProbe("httpProbe")
                                         .Attach()
                                         .DefineLoadBalancingRule("httpsRule")
                                         .WithProtocol(TransportProtocol.Tcp)
                                         .FromFrontend(privateFrontEndName)
                                         .FromFrontendPort(1001)
                                         .ToBackend(backendPoolName2)
                                         .WithProbe("httpsProbe")
                                         .Attach()
                                         // Add two nat pools to enable direct VM connectivity to port 44 and 45
                                         .DefineInboundNatPool(natPoolName1)
                                         .WithProtocol(TransportProtocol.Tcp)
                                         .FromFrontend(privateFrontEndName)
                                         .FromFrontendPortRange(8000, 8099)
                                         .ToBackendPort(44)
                                         .Attach()
                                         .DefineInboundNatPool(natPoolName2)
                                         .WithProtocol(TransportProtocol.Tcp)
                                         .FromFrontend(privateFrontEndName)
                                         .FromFrontendPortRange(9000, 9099)
                                         .ToBackendPort(45)
                                         .Attach()

                                         // Explicitly define the frontend
                                         .DefinePrivateFrontend(privateFrontEndName)
                                         .WithExistingSubnet(network, subnetName)
                                         .Attach()

                                         // Add two probes one per rule
                                         .DefineHttpProbe("httpProbe")
                                         .WithRequestPath("/")
                                         .Attach()
                                         .DefineHttpProbe("httpsProbe")
                                         .WithRequestPath("/")
                                         .Attach()
                                         .Create();

            loadBalancer = azure.LoadBalancers.GetByResourceGroup(resourceGroup.Name, loadBalancerName);

            Assert.Empty(loadBalancer.PublicIPAddressIds);
            Assert.Equal(2, loadBalancer.Backends.Count());
            ILoadBalancerBackend backend1 = null;

            Assert.True(loadBalancer.Backends.TryGetValue(backendPoolName1, out backend1));
            ILoadBalancerBackend backend2 = null;

            Assert.True(loadBalancer.Backends.TryGetValue(backendPoolName2, out backend2));
            ILoadBalancerHttpProbe httpProbe = null;

            Assert.True(loadBalancer.HttpProbes.TryGetValue("httpProbe", out httpProbe));
            Assert.Single(httpProbe.LoadBalancingRules);
            ILoadBalancerHttpProbe httpsProbe = null;

            Assert.True(loadBalancer.HttpProbes.TryGetValue("httpsProbe", out httpsProbe));
            Assert.Single(httpProbe.LoadBalancingRules);
            Assert.Equal(2, loadBalancer.InboundNatPools.Count());
            return(loadBalancer);
        }