Skip to content

Commit

Permalink
Add optional VNET Subscription ID to VNET rules. (#1333)
Browse files Browse the repository at this point in the history
* Add optional VNET Subscription ID to VNET rules.

* Update pkg/resourcemanager/azuresql/azuresqlvnetrule/azuresqlvnetrule.go
  • Loading branch information
cdmurph32 authored Dec 16, 2020
1 parent 82f75ea commit a50a59e
Show file tree
Hide file tree
Showing 16 changed files with 45 additions and 14 deletions.
1 change: 1 addition & 0 deletions api/v1alpha1/azuresqlvnetrule_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type AzureSQLVNetRuleSpec struct {
VNetResourceGroup string `json:"vNetResourceGroup"`
VNetName string `json:"vNetName"`
SubnetName string `json:"subnetName"`
VNetSubscriptionID string `json:"vNetSubscriptionID,omitempty"`
IgnoreMissingServiceEndpoint bool `json:"ignoreMissingServiceEndpoint,omitempty"`
}

Expand Down
1 change: 1 addition & 0 deletions api/v1alpha1/mysqlvnetrule_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type MySQLVNetRuleSpec struct {
VNetResourceGroup string `json:"vNetResourceGroup"`
VNetName string `json:"vNetName"`
SubnetName string `json:"subnetName"`
VNetSubscriptionID string `json:"vNetSubscriptionID,omitempty"`
IgnoreMissingServiceEndpoint bool `json:"ignoreMissingServiceEndpoint,omitempty"`
}

Expand Down
1 change: 1 addition & 0 deletions api/v1alpha1/postgresqlvnetrule_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type PostgreSQLVNetRuleSpec struct {
VNetResourceGroup string `json:"vNetResourceGroup"`
VNetName string `json:"vNetName"`
SubnetName string `json:"subnetName"`
VNetSubscriptionID string `json:"vNetSubscriptionID,omitempty"`
IgnoreMissingServiceEndpoint bool `json:"ignoreMissingServiceEndpoint,omitempty"`
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ spec:
type: string
vNetResourceGroup:
type: string
vNetSubscriptionID:
type: string
required:
- resourceGroup
- server
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ spec:
type: string
vNetResourceGroup:
type: string
vNetSubscriptionID:
type: string
required:
- resourceGroup
- server
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ spec:
type: string
vNetResourceGroup:
type: string
vNetSubscriptionID:
type: string
required:
- resourceGroup
- server
Expand Down
2 changes: 2 additions & 0 deletions config/samples/azure_v1alpha1_azuresqlvnetrule.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ spec:
vNetResourceGroup: resourcegroup-vnet
vNetName: virtualnetwork-sample
subnetName: test1
## Optional
ignoreMissingServiceEndpoint: true
vNetSubscriptionID: {vnet_subscription_id} # Specify if the VNET is in another subscription.
2 changes: 2 additions & 0 deletions config/samples/azure_v1alpha1_mysqlvnetrule.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ spec:
vNetResourceGroup: resourcegroup-vnet
vNetName: virtualnetwork-sample
subnetName: test1
## Optional
ignoreMissingServiceEndpoint: true
vNetSubscriptionID: {vnet_subscription_id} # Specify if the VNET is in another subscription.
2 changes: 2 additions & 0 deletions config/samples/azure_v1alpha1_postgresqlvnetrule.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ spec:
vNetResourceGroup: resourcegroup-azure-operators
vNetName: virtualnetwork-sample
subnetName: test1
## Optional
ignoreMissingServiceEndpoint: true
vNetSubscriptionID: {vnet_subscription_id} # Specify if the VNET is in another subscription.
4 changes: 2 additions & 2 deletions pkg/resourcemanager/azuresql/azuresqlshared/getgoclients.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ func GetGoVNetRulesClient(creds config.Credentials) (sql.VirtualNetworkRulesClie
}

// GetNetworkSubnetClient retrieves a Subnetclient
func GetGoNetworkSubnetClient(creds config.Credentials) (network.SubnetsClient, error) {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), creds.SubscriptionID())
func GetGoNetworkSubnetClient(creds config.Credentials, subscription string) (network.SubnetsClient, error) {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), subscription)
a, err := iam.GetResourceManagementAuthorizer(creds)
if err != nil {
return network.SubnetsClient{}, err
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,18 @@ func (m *AzureSqlVNetRuleManager) DeleteSQLVNetRule(ctx context.Context, resourc

// CreateOrUpdateSQLVNetRule creates or updates a VNet rule
// based on code from: https://godoc.org/github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/v3.0/sql#VirtualNetworkRulesClient.CreateOrUpdate
func (m *AzureSqlVNetRuleManager) CreateOrUpdateSQLVNetRule(ctx context.Context, resourceGroupName string, serverName string, ruleName string, VNetRG string, VNetName string, SubnetName string, IgnoreServiceEndpoint bool) (vnr sql.VirtualNetworkRule, err error) {
func (m *AzureSqlVNetRuleManager) CreateOrUpdateSQLVNetRule(ctx context.Context, resourceGroupName string, serverName string, ruleName string, VNetRG string, VNetName string, SubnetName string, subscription string, IgnoreServiceEndpoint bool) (vnr sql.VirtualNetworkRule, err error) {

VNetRulesClient, err := azuresqlshared.GetGoVNetRulesClient(m.creds)
if err != nil {
return sql.VirtualNetworkRule{}, err
}

SubnetClient, err := azuresqlshared.GetGoNetworkSubnetClient(m.creds)
// Subnet may be in another subscription
if subscription == "" {
subscription = m.creds.SubscriptionID()
}
SubnetClient, err := azuresqlshared.GetGoNetworkSubnetClient(m.creds, subscription)
if err != nil {
return sql.VirtualNetworkRule{}, err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func (vr *AzureSqlVNetRuleManager) Ensure(ctx context.Context, obj runtime.Objec
virtualNetworkRG := instance.Spec.VNetResourceGroup
virtualnetworkname := instance.Spec.VNetName
subnetName := instance.Spec.SubnetName
virtualNetworkSubscription := instance.Spec.VNetSubscriptionID
ignoreendpoint := instance.Spec.IgnoreMissingServiceEndpoint

vnetrule, err := vr.GetSQLVNetRule(ctx, groupName, server, ruleName)
Expand All @@ -55,7 +56,7 @@ func (vr *AzureSqlVNetRuleManager) Ensure(ctx context.Context, obj runtime.Objec
}

instance.Status.Provisioning = true
_, err = vr.CreateOrUpdateSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, ignoreendpoint)
_, err = vr.CreateOrUpdateSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, virtualNetworkSubscription, ignoreendpoint)
if err != nil {
instance.Status.Message = err.Error()
azerr := errhelp.NewAzureError(err)
Expand Down
12 changes: 8 additions & 4 deletions pkg/resourcemanager/mysql/vnetrule/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ func getMySQLVNetRulesClient(creds config.Credentials) mysql.VirtualNetworkRules
}

// GetNetworkSubnetClient retrieves a Subnetclient
func GetGoNetworkSubnetClient(creds config.Credentials) network.SubnetsClient {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), creds.SubscriptionID())
func GetGoNetworkSubnetClient(creds config.Credentials, subscription string) network.SubnetsClient {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), subscription)
a, _ := iam.GetResourceManagementAuthorizer(creds)
SubnetsClient.Authorizer = a
SubnetsClient.AddToUserAgent(config.UserAgent())
Expand Down Expand Up @@ -71,10 +71,14 @@ func (c *MySQLVNetRuleClient) DeleteSQLVNetRule(ctx context.Context, resourceGro

// CreateOrUpdateSQLVNetRule creates or updates a VNet rule
// based on code from: https://godoc.org/github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/v3.0/sql#VirtualNetworkRulesClient.CreateOrUpdate
func (c *MySQLVNetRuleClient) CreateOrUpdateSQLVNetRule(ctx context.Context, resourceGroupName string, serverName string, ruleName string, VNetRG string, VNetName string, SubnetName string, IgnoreServiceEndpoint bool) (vnr mysql.VirtualNetworkRule, err error) {
func (c *MySQLVNetRuleClient) CreateOrUpdateSQLVNetRule(ctx context.Context, resourceGroupName string, serverName string, ruleName string, VNetRG string, VNetName string, SubnetName string, subscription string, IgnoreServiceEndpoint bool) (vnr mysql.VirtualNetworkRule, err error) {

VNetRulesClient := getMySQLVNetRulesClient(c.creds)
SubnetClient := GetGoNetworkSubnetClient(c.creds)
// Subnet may be in another subscription
if subscription == "" {
subscription = c.creds.SubscriptionID()
}
SubnetClient := GetGoNetworkSubnetClient(c.creds, subscription)

// Get ARM Resource ID of Subnet based on the VNET name, Subnet name and Subnet Address Prefix
subnet, err := SubnetClient.Get(ctx, VNetRG, VNetName, SubnetName, "")
Expand Down
3 changes: 2 additions & 1 deletion pkg/resourcemanager/mysql/vnetrule/reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func (vr *MySQLVNetRuleClient) Ensure(ctx context.Context, obj runtime.Object, o
virtualNetworkRG := instance.Spec.VNetResourceGroup
virtualnetworkname := instance.Spec.VNetName
subnetName := instance.Spec.SubnetName
virtualNetworkSubscription := instance.Spec.VNetSubscriptionID
ignoreendpoint := instance.Spec.IgnoreMissingServiceEndpoint

vnetrule, err := vr.GetSQLVNetRule(ctx, groupName, server, ruleName)
Expand All @@ -55,7 +56,7 @@ func (vr *MySQLVNetRuleClient) Ensure(ctx context.Context, obj runtime.Object, o
}

instance.Status.Provisioning = true
_, err = vr.CreateOrUpdateSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, ignoreendpoint)
_, err = vr.CreateOrUpdateSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, virtualNetworkSubscription, ignoreendpoint)
if err != nil {
instance.Status.Message = err.Error()
azerr := errhelp.NewAzureError(err)
Expand Down
11 changes: 8 additions & 3 deletions pkg/resourcemanager/psql/vnetrule/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ func GetPostgreSQLVNetRulesClient(creds config.Credentials) psql.VirtualNetworkR
}

// retrieves the Subnetclient
func GetGoNetworkSubnetClient(creds config.Credentials) network.SubnetsClient {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), creds.SubscriptionID())
func GetGoNetworkSubnetClient(creds config.Credentials, subscription string) network.SubnetsClient {
SubnetsClient := network.NewSubnetsClientWithBaseURI(config.BaseURI(), subscription)
a, _ := iam.GetResourceManagementAuthorizer(creds)
SubnetsClient.Authorizer = a
SubnetsClient.AddToUserAgent(config.UserAgent())
Expand Down Expand Up @@ -83,10 +83,15 @@ func (c *PostgreSQLVNetRuleClient) CreateOrUpdatePostgreSQLVNetRule(
VNetRG string,
VNetName string,
SubnetName string,
subscription string,
IgnoreServiceEndpoint bool) (vnr psql.VirtualNetworkRule, err error) {

VNetRulesClient := GetPostgreSQLVNetRulesClient(c.creds)
SubnetClient := GetGoNetworkSubnetClient(c.creds)
// Subnet may be in another subscription
if subscription == "" {
subscription = c.creds.SubscriptionID()
}
SubnetClient := GetGoNetworkSubnetClient(c.creds, subscription)

// Get ARM Resource ID of Subnet based on the VNET name, Subnet name and Subnet Address Prefix
subnet, err := SubnetClient.Get(ctx, VNetRG, VNetName, SubnetName, "")
Expand Down
3 changes: 2 additions & 1 deletion pkg/resourcemanager/psql/vnetrule/reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func (vr *PostgreSQLVNetRuleClient) Ensure(ctx context.Context, obj runtime.Obje
virtualNetworkRG := instance.Spec.VNetResourceGroup
virtualnetworkname := instance.Spec.VNetName
subnetName := instance.Spec.SubnetName
virtualNetworkSubscription := instance.Spec.VNetSubscriptionID
ignoreendpoint := instance.Spec.IgnoreMissingServiceEndpoint

vnetrule, err := vr.GetPostgreSQLVNetRule(ctx, groupName, server, ruleName)
Expand All @@ -56,7 +57,7 @@ func (vr *PostgreSQLVNetRuleClient) Ensure(ctx context.Context, obj runtime.Obje
}

instance.Status.Provisioning = true
_, err = vr.CreateOrUpdatePostgreSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, ignoreendpoint)
_, err = vr.CreateOrUpdatePostgreSQLVNetRule(ctx, groupName, server, ruleName, virtualNetworkRG, virtualnetworkname, subnetName, virtualNetworkSubscription, ignoreendpoint)
if err != nil {
instance.Status.Message = err.Error()
azerr := errhelp.NewAzureError(err)
Expand Down

0 comments on commit a50a59e

Please sign in to comment.