public override void Execute()
        {
            base.Execute();

            // Sku
            PSLoadBalancerSku vSku = null;

            if (this.Sku != null)
            {
                if (vSku == null)
                {
                    vSku = new PSLoadBalancerSku();
                }
                vSku.Name = this.Sku;
            }


            var vLoadBalancer = new PSLoadBalancer
            {
                Location = this.Location,
                FrontendIpConfigurations = this.FrontendIpConfiguration?.ToList(),
                BackendAddressPools      = this.BackendAddressPool?.ToList(),
                LoadBalancingRules       = this.LoadBalancingRule?.ToList(),
                Probes          = this.Probe?.ToList(),
                InboundNatRules = this.InboundNatRule?.ToList(),
                InboundNatPools = this.InboundNatPool?.ToList(),
                OutboundRules   = this.OutboundRule?.ToList(),
                Sku             = vSku,
            };

            NormalizeChildIds(vLoadBalancer);

            var vLoadBalancerModel = NetworkResourceManagerProfile.Mapper.Map <MNM.LoadBalancer>(vLoadBalancer);

            vLoadBalancerModel.Tags = TagsConversionHelper.CreateTagDictionary(this.Tag, validate: true);
            var present = true;

            try
            {
                this.NetworkClient.NetworkManagementClient.LoadBalancers.Get(this.ResourceGroupName, this.Name);
            }
            catch (Microsoft.Rest.Azure.CloudException exception)
            {
                if (exception.Response.StatusCode == HttpStatusCode.NotFound)
                {
                    // Resource is not present
                    present = false;
                }
                else
                {
                    throw;
                }
            }

            ConfirmAction(
                Force.IsPresent,
                string.Format(Properties.Resources.OverwritingResource, Name),
                Properties.Resources.CreatingResourceMessage,
                Name,
                () =>
            {
                this.NetworkClient.NetworkManagementClient.LoadBalancers.CreateOrUpdate(this.ResourceGroupName, this.Name, vLoadBalancerModel);
                var getLoadBalancer = this.NetworkClient.NetworkManagementClient.LoadBalancers.Get(this.ResourceGroupName, this.Name);
                var psLoadBalancer  = NetworkResourceManagerProfile.Mapper.Map <PSLoadBalancer>(getLoadBalancer);
                psLoadBalancer.ResourceGroupName = this.ResourceGroupName;
                psLoadBalancer.Tag = TagsConversionHelper.CreateTagHashtable(getLoadBalancer.Tags);
                WriteObject(psLoadBalancer, true);
            },
                () => present);
        }
Пример #2
0
        public override void Execute()
        {
            base.Execute();

            // Sku
            PSLoadBalancerSku vSku = null;

            if (this.Sku != null)
            {
                if (vSku == null)
                {
                    vSku = new PSLoadBalancerSku();
                }
                vSku.Name = this.Sku;
            }

            // Tier
            if (this.Tier != null)
            {
                if (vSku == null)
                {
                    vSku = new PSLoadBalancerSku();
                }
                vSku.Tier = this.Tier;
            }

            var vLoadBalancer = new PSLoadBalancer
            {
                Location = this.Location,
                FrontendIpConfigurations = this.FrontendIpConfiguration?.ToList(),
                BackendAddressPools      = this.BackendAddressPool?.ToList(),
                LoadBalancingRules       = this.LoadBalancingRule?.ToList(),
                Probes          = this.Probe?.ToList(),
                InboundNatRules = this.InboundNatRule?.ToList(),
                InboundNatPools = this.InboundNatPool?.ToList(),
                OutboundRules   = this.OutboundRule?.ToList(),
                Sku             = vSku,
            };

            NormalizeChildIds(vLoadBalancer);

            var vLoadBalancerModel = NetworkResourceManagerProfile.Mapper.Map <MNM.LoadBalancer>(vLoadBalancer);

            vLoadBalancerModel.Tags = TagsConversionHelper.CreateTagDictionary(this.Tag, validate: true);
            var present = true;

            try
            {
                this.NetworkClient.NetworkManagementClient.LoadBalancers.Get(this.ResourceGroupName, this.Name);
            }
            catch (Microsoft.Rest.Azure.CloudException exception)
            {
                if (exception.Response.StatusCode == HttpStatusCode.NotFound)
                {
                    // Resource is not present
                    present = false;
                }
                else
                {
                    throw;
                }
            }

            List <string> resourceIdsRequiringAuthToken       = new List <string>();
            Dictionary <string, List <string> > auxAuthHeader = null;

            // Get aux token for each gateway lb references
            foreach (FrontendIPConfiguration frontend in vLoadBalancerModel.FrontendIPConfigurations)
            {
                if (frontend.GatewayLoadBalancer != null)
                {
                    //Get the aux header for the remote vnet
                    resourceIdsRequiringAuthToken.Add(frontend.GatewayLoadBalancer.Id);
                }
            }

            if (resourceIdsRequiringAuthToken.Count > 0)
            {
                var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIdsRequiringAuthToken);
                if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
                {
                    auxAuthHeader = new Dictionary <string, List <string> >(auxHeaderDictionary);
                }
            }


            ConfirmAction(
                Force.IsPresent,
                string.Format(Properties.Resources.OverwritingResource, Name),
                Properties.Resources.CreatingResourceMessage,
                Name,
                () =>
            {
                this.NetworkClient.NetworkManagementClient.LoadBalancers.CreateOrUpdateWithHttpMessagesAsync(this.ResourceGroupName, this.Name, vLoadBalancerModel, auxAuthHeader).GetAwaiter().GetResult();
                var getLoadBalancer = this.NetworkClient.NetworkManagementClient.LoadBalancers.Get(this.ResourceGroupName, this.Name);
                var psLoadBalancer  = NetworkResourceManagerProfile.Mapper.Map <PSLoadBalancer>(getLoadBalancer);
                psLoadBalancer.ResourceGroupName = this.ResourceGroupName;
                psLoadBalancer.Tag = TagsConversionHelper.CreateTagHashtable(getLoadBalancer.Tags);
                WriteObject(psLoadBalancer, true);
            },
                () => present);
        }