Skip to content

Commit

Permalink
Merge branch 'master' into mysql-replica
Browse files Browse the repository at this point in the history
  • Loading branch information
jananivMS authored Apr 21, 2020
2 parents 33bade1 + 76113ef commit dd652f6
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 20 deletions.
27 changes: 19 additions & 8 deletions api/v1alpha1/cosmosdb_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@ type CosmosDBSpec struct {

// +kubebuilder:validation:MinLength=0

Location string `json:"location,omitempty"`
ResourceGroup string `json:"resourceGroup"`
Kind CosmosDBKind `json:"kind,omitempty"`
Properties CosmosDBProperties `json:"properties,omitempty"`
KeyVaultToStoreSecrets string `json:"keyVaultToStoreSecrets,omitempty"`
Location string `json:"location,omitempty"`
ResourceGroup string `json:"resourceGroup"`
Kind CosmosDBKind `json:"kind,omitempty"`
Properties CosmosDBProperties `json:"properties,omitempty"`
VirtualNetworkRules *[]CosmosDBVirtualNetworkRule `json:"virtualNetworkRules,omitempty"`
KeyVaultToStoreSecrets string `json:"keyVaultToStoreSecrets,omitempty"`
}

// CosmosDBKind enumerates the values for kind.
Expand All @@ -40,10 +41,12 @@ const (

// CosmosDBProperties the CosmosDBProperties of CosmosDB.
type CosmosDBProperties struct {
// CosmosDBDatabaseAccountOfferType - The offer type for the Cosmos DB database account.
// DatabaseAccountOfferType - The offer type for the Cosmos DB database account.
DatabaseAccountOfferType CosmosDBDatabaseAccountOfferType `json:"databaseAccountOfferType,omitempty"`
//Locations []CosmosDBLocation `json:"locations,omitempty"`
MongoDBVersion string `json:"mongoDBVersion,omitempty"`
// IsVirtualNetworkFilterEnabled - Flag to indicate whether to enable/disable Virtual Network ACL rules.
IsVirtualNetworkFilterEnabled bool `json:"isVirtualNetworkFilterEnabled,omitempty"`
EnableMultipleWriteLocations bool `json:"enableMultipleWriteLocations,omitempty"`
MongoDBVersion string `json:"mongoDBVersion,omitempty"`
}

// +kubebuilder:validation:Enum=Standard
Expand Down Expand Up @@ -84,6 +87,14 @@ type CosmosDBList struct {
Items []CosmosDB `json:"items"`
}

//CosmosDBVirtualNetworkRule virtual Network ACL Rule object
type CosmosDBVirtualNetworkRule struct {
// ID - Resource ID of a subnet, for example: /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}.
SubnetID *string `json:"subnetID,omitempty"`
// IgnoreMissingVNetServiceEndpoint - Create firewall rule before the virtual network has vnet service endpoint enabled.
IgnoreMissingVNetServiceEndpoint *bool `json:"ignoreMissingVNetServiceEndpoint,omitempty"`
}

func init() {
SchemeBuilder.Register(&CosmosDB{}, &CosmosDBList{})
}
Expand Down
11 changes: 9 additions & 2 deletions config/samples/azure_v1alpha1_cosmosdb.yaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
apiVersion: azure.microsoft.com/v1alpha1
kind: CosmosDB
metadata:
name: cosmosdb-sample1908xyzkj
name: cosmosdb-sample-1
spec:
kind: GlobalDocumentDB
location: westus
resourceGroup: resourcegroup-azure-operators
properties:
databaseAccountOfferType: Standard
enableMultipleWriteLocations: false
# optionally set the mongoDBVersion to "3.2" or "3.6", if omitted the default is "3.2"
# NOTE: kind must be set to MongoDB for this to take effect
#mongoDBVersion: "3.6"

# Use the field below to optionally specify a different keyvault
#optional for network rule set
# isVirtualNetworkFilterEnabled: true
# virtualNetworkRules:
# - subnetId: /subscriptions/{subscription_id}/resourceGroups/{resourcegroup}/providers/Microsoft.Network/virtualNetworks/{vnet_name}/subnets/{subnet_name}
# ignoreMissingServiceEndpoint: false

# Use the field below to optionally specify a different keyvault
# to store the connectiong string secrets in
#keyVaultToStoreSecrets: asoSecretKeyVault
27 changes: 21 additions & 6 deletions pkg/resourcemanager/cosmosdbs/cosmosdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,21 @@ func (*AzureCosmosDBManager) CreateOrUpdateCosmosDB(
cosmosDBName string,
location string,
kind v1alpha1.CosmosDBKind,
dbType v1alpha1.CosmosDBDatabaseAccountOfferType,
dbVersion string,
networkRule *[]v1alpha1.CosmosDBVirtualNetworkRule,
properties v1alpha1.CosmosDBProperties,
tags map[string]*string) (*documentdb.DatabaseAccount, error) {
cosmosDBClient, err := getCosmosDBClient()
if err != nil {
return nil, err
}

dbKind := documentdb.DatabaseAccountKind(kind)
sDBType := string(dbType)
sDBType := string(properties.DatabaseAccountOfferType)
bWriteLocal := bool(properties.EnableMultipleWriteLocations)
vnetEnabled := bool(properties.IsVirtualNetworkFilterEnabled)

var capabilities []documentdb.Capability
if dbKind == documentdb.MongoDB && dbVersion == "3.6" {
if dbKind == documentdb.MongoDB && properties.MongoDBVersion == "3.6" {
capabilities = []documentdb.Capability{
{Name: to.StringPtr("EnableMongo")},
}
Expand Down Expand Up @@ -84,6 +86,18 @@ func (*AzureCosmosDBManager) CreateOrUpdateCosmosDB(
locationsArray := []documentdb.Location{
locationObj,
}

vNetRulesSet := []documentdb.VirtualNetworkRule{}
if networkRule != nil {
for _, i := range *networkRule {
subnetID := i.SubnetID
ignoreEndpoint := i.IgnoreMissingVNetServiceEndpoint
vNetRulesSet = append(vNetRulesSet, documentdb.VirtualNetworkRule{
ID: subnetID,
IgnoreMissingVNetServiceEndpoint: ignoreEndpoint,
})
}
}
createUpdateParams := documentdb.DatabaseAccountCreateUpdateParameters{
Location: to.StringPtr(location),
Tags: tags,
Expand All @@ -93,8 +107,9 @@ func (*AzureCosmosDBManager) CreateOrUpdateCosmosDB(
ID: &cosmosDBName,
DatabaseAccountCreateUpdateProperties: &documentdb.DatabaseAccountCreateUpdateProperties{
DatabaseAccountOfferType: &sDBType,
EnableMultipleWriteLocations: to.BoolPtr(false),
IsVirtualNetworkFilterEnabled: to.BoolPtr(false),
IsVirtualNetworkFilterEnabled: &vnetEnabled,
VirtualNetworkRules: &vNetRulesSet,
EnableMultipleWriteLocations: &bWriteLocal,
Locations: &locationsArray,
Capabilities: &capabilities,
},
Expand Down
2 changes: 1 addition & 1 deletion pkg/resourcemanager/cosmosdbs/cosmosdb_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func NewAzureCosmosDBManager(secretClient secrets.SecretClient) *AzureCosmosDBMa
// CosmosDBManager client functions
type CosmosDBManager interface {
// CreateOrUpdateCosmosDB creates a new cosmos database account
CreateOrUpdateCosmosDB(ctx context.Context, groupName string, cosmosDBName string, location string, kind v1alpha1.CosmosDBKind, dbType v1alpha1.CosmosDBDatabaseAccountOfferType, dbVersion string, tags map[string]*string) (*documentdb.DatabaseAccount, error)
CreateOrUpdateCosmosDB(ctx context.Context, groupName string, cosmosDBName string, location string, kind v1alpha1.CosmosDBKind, networkRule *[]v1alpha1.CosmosDBVirtualNetworkRule, properties v1alpha1.CosmosDBProperties, tags map[string]*string) (*documentdb.DatabaseAccount, error)

// GetCosmosDB gets a cosmos database account
GetCosmosDB(ctx context.Context, groupName string, cosmosDBName string) (*documentdb.DatabaseAccount, error)
Expand Down
12 changes: 9 additions & 3 deletions pkg/resourcemanager/cosmosdbs/cosmosdb_reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,16 @@ func (m *AzureCosmosDBManager) Ensure(ctx context.Context, obj runtime.Object, o
groupName := instance.Spec.ResourceGroup
location := instance.Spec.Location
kind := instance.Spec.Kind
dbType := instance.Spec.Properties.DatabaseAccountOfferType
dbVersion := instance.Spec.Properties.MongoDBVersion
networkRule := instance.Spec.VirtualNetworkRules

db, err = m.CreateOrUpdateCosmosDB(ctx, groupName, accountName, location, kind, dbType, dbVersion, tags)
cosmosDBProperties := v1alpha1.CosmosDBProperties{
DatabaseAccountOfferType: instance.Spec.Properties.DatabaseAccountOfferType,
EnableMultipleWriteLocations: instance.Spec.Properties.EnableMultipleWriteLocations,
MongoDBVersion: instance.Spec.Properties.MongoDBVersion,
IsVirtualNetworkFilterEnabled: instance.Spec.Properties.IsVirtualNetworkFilterEnabled,
}

db, err = m.CreateOrUpdateCosmosDB(ctx, groupName, accountName, location, kind, networkRule, cosmosDBProperties, tags)
if err != nil {
azerr := errhelp.NewAzureErrorAzureError(err)
instance.Status.Message = err.Error()
Expand Down

0 comments on commit dd652f6

Please sign in to comment.