public override void Execute() { base.Execute(); if (this.IsP2SVpnGatewayPresent(this.ResourceGroupName, this.Name)) { throw new PSArgumentException(string.Format(Properties.Resources.ResourceAlreadyPresentInResourceGroup, this.Name, this.ResourceGroupName)); } var p2sVpnGateway = new PSP2SVpnGateway(); p2sVpnGateway.Name = this.Name; p2sVpnGateway.ResourceGroupName = this.ResourceGroupName; p2sVpnGateway.VirtualHub = null; p2sVpnGateway.VpnServerConfiguration = null; string virtualHubResourceGroupName = this.ResourceGroupName; // default to common RG for ByVirtualHubName parameter set //// Resolve and Set the virtual hub if (ParameterSetName.Contains(CortexParameterSetNames.ByVirtualHubObject)) { this.VirtualHubName = this.VirtualHub.Name; virtualHubResourceGroupName = this.VirtualHub.ResourceGroupName; } else if (ParameterSetName.Contains(CortexParameterSetNames.ByVirtualHubResourceId)) { var parsedResourceId = new ResourceIdentifier(this.VirtualHubId); this.VirtualHubName = parsedResourceId.ResourceName; virtualHubResourceGroupName = parsedResourceId.ResourceGroupName; } //// At this point, we should have the virtual hub name resolved. Fail this operation if it is not. if (string.IsNullOrWhiteSpace(this.VirtualHubName)) { throw new PSArgumentException(Properties.Resources.VirtualHubRequiredForVpnGateway); } var resolvedVirtualHub = new VirtualHubBaseCmdlet().GetVirtualHub(virtualHubResourceGroupName, this.VirtualHubName); if (resolvedVirtualHub == null) { throw new PSArgumentException(Properties.Resources.VirtualHubRequiredForExpressRouteGateway); } p2sVpnGateway.Location = resolvedVirtualHub.Location; p2sVpnGateway.VirtualHub = new PSResourceId() { Id = resolvedVirtualHub.Id }; //// Set P2SConnectionConfigurations. Currently, only one P2SConnectionConfiguration is allowed. PSP2SConnectionConfiguration p2sConnectionConfig = new PSP2SConnectionConfiguration() { Name = P2SConnectionConfigurationName, VpnClientAddressPool = new PSAddressSpace() { AddressPrefixes = new List <string>(this.VpnClientAddressPool) }, }; // By default EnableInternetSecurity will be true if not specified explicitly by customer. p2sConnectionConfig.EnableInternetSecurity = true; if (this.EnableInternetSecurityFlag.IsPresent) { p2sConnectionConfig.EnableInternetSecurity = true; } if (this.DisableInternetSecurityFlag.IsPresent) { p2sConnectionConfig.EnableInternetSecurity = false; } if (this.RoutingConfiguration != null) { if (this.RoutingConfiguration.VnetRoutes != null && this.RoutingConfiguration.VnetRoutes.StaticRoutes != null && this.RoutingConfiguration.VnetRoutes.StaticRoutes.Any()) { throw new PSArgumentException(Properties.Resources.StaticRoutesNotSupportedForThisRoutingConfiguration); } p2sConnectionConfig.RoutingConfiguration = RoutingConfiguration; } p2sVpnGateway.P2SConnectionConfigurations = new List <PSP2SConnectionConfiguration>() { p2sConnectionConfig }; //// Scale unit, if specified p2sVpnGateway.VpnGatewayScaleUnit = 0; if (this.VpnGatewayScaleUnit > 0) { p2sVpnGateway.VpnGatewayScaleUnit = Convert.ToInt32(this.VpnGatewayScaleUnit); } //// Resolve the VpnServerConfiguration reference //// And set it in the P2SVpnGateway object. string vpnServerConfigurationResolvedId = null; if (ParameterSetName.Contains(CortexParameterSetNames.ByVpnServerConfigurationObject)) { vpnServerConfigurationResolvedId = this.VpnServerConfiguration.Id; } else if (ParameterSetName.Contains(CortexParameterSetNames.ByVpnServerConfigurationResourceId)) { vpnServerConfigurationResolvedId = this.VpnServerConfigurationId; } if (string.IsNullOrWhiteSpace(vpnServerConfigurationResolvedId)) { throw new PSArgumentException(Properties.Resources.VpnServerConfigurationRequiredForP2SVpnGateway); } //// Let's not resolve the vpnServerConfiguration here. If this does not exist, NRP/GWM will fail the call. p2sVpnGateway.VpnServerConfiguration = new PSResourceId() { Id = vpnServerConfigurationResolvedId }; p2sVpnGateway.VpnServerConfigurationLocation = string.IsNullOrWhiteSpace(this.VpnServerConfiguration.Location) ? string.Empty : this.VpnServerConfiguration.Location; // Set the custom dns servers, if it is specified by customer. if (CustomDnsServer != null && this.CustomDnsServer.Any()) { p2sVpnGateway.CustomDnsServers = CustomDnsServer?.ToList(); } // Set the Routing Preference Internet, if it is specified by customer. p2sVpnGateway.IsRoutingPreferenceInternet = EnableRoutingPreferenceInternetFlag.IsPresent; ConfirmAction( Properties.Resources.CreatingResourceMessage, this.Name, () => { WriteVerbose(String.Format(Properties.Resources.CreatingLongRunningOperationMessage, this.ResourceGroupName, this.Name)); WriteObject(this.CreateOrUpdateP2SVpnGateway(this.ResourceGroupName, this.Name, p2sVpnGateway, this.Tag)); }); }
public override void Execute() { PSP2SVpnGateway existingP2SVpnGateway = null; if (ParameterSetName.Contains(CortexParameterSetNames.ByP2SVpnGatewayObject)) { existingP2SVpnGateway = this.InputObject; this.ResourceGroupName = this.InputObject.ResourceGroupName; this.Name = this.InputObject.Name; } else { if (ParameterSetName.Contains(CortexParameterSetNames.ByP2SVpnGatewayResourceId)) { var parsedResourceId = new ResourceIdentifier(ResourceId); Name = parsedResourceId.ResourceName; ResourceGroupName = parsedResourceId.ResourceGroupName; } existingP2SVpnGateway = this.GetP2SVpnGateway(this.ResourceGroupName, this.Name); } if (existingP2SVpnGateway == null) { throw new PSArgumentException(Properties.Resources.P2SVpnGatewayNotFound); } //// Modify scale unit if specified if (this.VpnGatewayScaleUnit > 0) { existingP2SVpnGateway.VpnGatewayScaleUnit = Convert.ToInt32(this.VpnGatewayScaleUnit); } //// Modify the P2SConnectionConfigurations if (this.VpnClientAddressPool != null) { if (existingP2SVpnGateway.P2SConnectionConfigurations != null && existingP2SVpnGateway.P2SConnectionConfigurations.Any()) { existingP2SVpnGateway.P2SConnectionConfigurations[0].VpnClientAddressPool.AddressPrefixes.Clear(); existingP2SVpnGateway.P2SConnectionConfigurations[0].VpnClientAddressPool.AddressPrefixes = new List <string>(this.VpnClientAddressPool); } else { PSP2SConnectionConfiguration p2sConnectionConfig = new PSP2SConnectionConfiguration() { Name = P2SConnectionConfigurationName, VpnClientAddressPool = new PSAddressSpace() { AddressPrefixes = new List <string>(this.VpnClientAddressPool) } }; existingP2SVpnGateway.P2SConnectionConfigurations = new List <PSP2SConnectionConfiguration>() { p2sConnectionConfig }; } } if (this.RoutingConfiguration != null) { if (this.RoutingConfiguration.VnetRoutes != null && this.RoutingConfiguration.VnetRoutes.StaticRoutes != null && this.RoutingConfiguration.VnetRoutes.StaticRoutes.Any()) { throw new PSArgumentException(Properties.Resources.StaticRoutesNotSupportedForThisRoutingConfiguration); } if (existingP2SVpnGateway.P2SConnectionConfigurations != null && existingP2SVpnGateway.P2SConnectionConfigurations.Any()) { existingP2SVpnGateway.P2SConnectionConfigurations[0].RoutingConfiguration = RoutingConfiguration; } else { PSP2SConnectionConfiguration p2sConnectionConfig = new PSP2SConnectionConfiguration() { Name = P2SConnectionConfigurationName, RoutingConfiguration = RoutingConfiguration }; existingP2SVpnGateway.P2SConnectionConfigurations = new List <PSP2SConnectionConfiguration>() { p2sConnectionConfig }; } } // Set the custom dns servers, if it is specified by customer. if (CustomDnsServer != null && this.CustomDnsServer.Any()) { existingP2SVpnGateway.CustomDnsServers = CustomDnsServer?.ToList(); } else { existingP2SVpnGateway.CustomDnsServers = null; } //// Resolve the VpnServerConfiguration, if specified string vpnServerConfigurationResourceGroupName = string.Empty; string vpnServerConfigurationName = string.Empty; if (!ParameterSetName.Contains(CortexParameterSetNames.NoVpnServerConfigurationUpdate)) { if (ParameterSetName.Contains(CortexParameterSetNames.ByVpnServerConfigurationObject)) { vpnServerConfigurationResourceGroupName = this.VpnServerConfiguration.ResourceGroupName; vpnServerConfigurationName = this.VpnServerConfiguration.Name; } else if (ParameterSetName.Contains(CortexParameterSetNames.ByVpnServerConfigurationResourceId)) { var parsedVpnServerConfigurationResourceId = new ResourceIdentifier(this.VpnServerConfigurationId); vpnServerConfigurationResourceGroupName = parsedVpnServerConfigurationResourceId.ResourceGroupName; vpnServerConfigurationName = parsedVpnServerConfigurationResourceId.ResourceName; } if (!string.IsNullOrWhiteSpace(vpnServerConfigurationResourceGroupName) && !string.IsNullOrWhiteSpace(vpnServerConfigurationName)) { PSVpnServerConfiguration resolvedVpnServerConfiguration = new VpnServerConfigurationBaseCmdlet().GetVpnServerConfiguration(vpnServerConfigurationResourceGroupName, vpnServerConfigurationName); if (resolvedVpnServerConfiguration == null) { throw new PSArgumentException(Properties.Resources.VpnServerConfigurationNotFound); } existingP2SVpnGateway.VpnServerConfiguration = new PSResourceId() { Id = resolvedVpnServerConfiguration.Id }; } } ConfirmAction( Properties.Resources.SettingResourceMessage, this.Name, () => { WriteVerbose(String.Format(Properties.Resources.UpdatingLongRunningOperationMessage, this.ResourceGroupName, this.Name)); WriteObject(this.CreateOrUpdateP2SVpnGateway(this.ResourceGroupName, this.Name, existingP2SVpnGateway, this.Tag)); }); }