Inheritance: PSTopLevelResource
        public override void Execute()
        {
            base.Execute();
            if (!this.IsVirtualNetworkGatewayPresent(this.VirtualNetworkGateway.ResourceGroupName, this.VirtualNetworkGateway.Name))
            {
                throw new ArgumentException(Microsoft.Azure.Commands.Network.Properties.Resources.ResourceNotFound);
            }

            this.VirtualNetworkGateway.GatewayDefaultSite = new PSResourceId();
            this.VirtualNetworkGateway.GatewayDefaultSite.Id = this.GatewayDefaultSite.Id;

            // Map to the sdk object
            var virtualnetGatewayModel = Mapper.Map<MNM.VirtualNetworkGateway>(this.VirtualNetworkGateway);
            virtualnetGatewayModel.Tags = TagsConversionHelper.CreateTagDictionary(this.VirtualNetworkGateway.Tag, validate: true);

            this.VirtualNetworkGatewayClient.CreateOrUpdate(this.VirtualNetworkGateway.ResourceGroupName, this.VirtualNetworkGateway.Name, virtualnetGatewayModel);

            var getvirtualnetGateway = this.GetVirtualNetworkGateway(this.VirtualNetworkGateway.ResourceGroupName, this.VirtualNetworkGateway.Name);

            WriteObject(getvirtualnetGateway);
        }
        private PSLocalNetworkGateway CreateLocalNetworkGateway()
        {
            var localnetGateway = new PSLocalNetworkGateway();
            localnetGateway.Name = this.Name;
            localnetGateway.ResourceGroupName = this.ResourceGroupName;
            localnetGateway.Location = this.Location;
            localnetGateway.LocalNetworkSiteAddressSpace = new PSAddressSpace();
            localnetGateway.LocalNetworkSiteAddressSpace.AddressPrefixes = this.AddressPrefix;
            localnetGateway.GatewayIpAddress = this.GatewayIpAddress;

            // Map to the sdk object
            var localnetGatewayModel = Mapper.Map<MNM.LocalNetworkGateway>(localnetGateway);
            localnetGatewayModel.Type = Microsoft.Azure.Commands.Network.Properties.Resources.LocalNetworkGatewayType;
            localnetGatewayModel.Tags = TagsConversionHelper.CreateTagDictionary(this.Tag, validate: true);

            // Execute the Create Local Network Gateway call
            this.LocalNetworkGatewayClient.CreateOrUpdate(this.ResourceGroupName, this.Name, localnetGatewayModel);

            var getLocalNetworkGateway = this.GetLocalNetworkGateway(this.ResourceGroupName, this.Name);

            return getLocalNetworkGateway;
        }
        private PSLocalNetworkGateway CreateLocalNetworkGateway()
        {
            var localnetGateway = new PSLocalNetworkGateway();
            localnetGateway.Name = this.Name;
            localnetGateway.ResourceGroupName = this.ResourceGroupName;
            localnetGateway.Location = this.Location;
            localnetGateway.LocalNetworkAddressSpace = new PSAddressSpace();
            localnetGateway.LocalNetworkAddressSpace.AddressPrefixes = this.AddressPrefix;
            localnetGateway.GatewayIpAddress = this.GatewayIpAddress;

            if(this.PeerWeight < 0)
            {
                throw new PSArgumentException("PeerWeight cannot be negative");
            }

            if(this.Asn > 0 && !string.IsNullOrEmpty(this.BgpPeeringAddress))
            {
                localnetGateway.BgpSettings = new PSBgpSettings()
                {
                    Asn = this.Asn,
                    BgpPeeringAddress = this.BgpPeeringAddress,
                    PeerWeight = this.PeerWeight
                };
            }else if((!string.IsNullOrEmpty(this.BgpPeeringAddress) && this.Asn == 0) ||
                (string.IsNullOrEmpty(this.BgpPeeringAddress) && this.Asn > 0))
            {
                throw new PSArgumentException("For a BGP session to be established over IPsec, the local network gateway's ASN and BgpPeeringAddress must both be specified.");
            }

            // Map to the sdk object
            var localnetGatewayModel = Mapper.Map<MNM.LocalNetworkGateway>(localnetGateway);
            localnetGatewayModel.Tags = TagsConversionHelper.CreateTagDictionary(this.Tag, validate: true);

            // Execute the Create Local Network Gateway call
            this.LocalNetworkGatewayClient.CreateOrUpdate(this.ResourceGroupName, this.Name, localnetGatewayModel);

            var getLocalNetworkGateway = this.GetLocalNetworkGateway(this.ResourceGroupName, this.Name);

            return getLocalNetworkGateway;
        }