public override void ExecuteCmdlet() { if (!ParameterSetName.Equals(NameParameterSet, StringComparison.Ordinal)) { ResourceIdentifier resourceIdentifier = null; if (ParameterSetName.Equals(ResourceIdParameterSet, StringComparison.Ordinal)) { resourceIdentifier = new ResourceIdentifier(ResourceId); } else if (ParameterSetName.Equals(ObjectParameterSet, StringComparison.Ordinal)) { resourceIdentifier = new ResourceIdentifier(InputObject.Id); } ResourceGroupName = resourceIdentifier.ResourceGroupName; Name = resourceIdentifier.ResourceName; } DatabaseAccountGetResults readDatabase = CosmosDBManagementClient.DatabaseAccounts.GetWithHttpMessagesAsync(ResourceGroupName, Name).GetAwaiter().GetResult().Body; DatabaseAccountUpdateParameters databaseAccountUpdateParameters = new DatabaseAccountUpdateParameters(locations: readDatabase.Locations, location: readDatabase.WriteLocations.ElementAt(0).LocationName); if (EnableMultipleWriteLocations != null) { databaseAccountUpdateParameters.EnableMultipleWriteLocations = EnableMultipleWriteLocations; } if (EnableVirtualNetwork != null) { databaseAccountUpdateParameters.IsVirtualNetworkFilterEnabled = EnableVirtualNetwork; } if (EnableAutomaticFailover != null) { databaseAccountUpdateParameters.EnableAutomaticFailover = EnableAutomaticFailover; } if (DisableKeyBasedMetadataWriteAccess != null) { databaseAccountUpdateParameters.DisableKeyBasedMetadataWriteAccess = DisableKeyBasedMetadataWriteAccess; } if (PublicNetworkAccess != null) { databaseAccountUpdateParameters.PublicNetworkAccess = PublicNetworkAccess; } if (!string.IsNullOrEmpty(DefaultConsistencyLevel)) { ConsistencyPolicy consistencyPolicy = new ConsistencyPolicy(); { switch (DefaultConsistencyLevel) { case "Strong": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Strong; break; case "Session": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Session; break; case "Eventual": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Eventual; break; case "ConsistentPrefix": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.ConsistentPrefix; break; case "BoundedStaleness": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.BoundedStaleness; consistencyPolicy.MaxIntervalInSeconds = MaxStalenessIntervalInSeconds; consistencyPolicy.MaxStalenessPrefix = MaxStalenessPrefix; break; default: consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Session; break; } databaseAccountUpdateParameters.ConsistencyPolicy = consistencyPolicy; } } if (Tag != null) { Dictionary <string, string> tags = new Dictionary <string, string>(); foreach (string key in Tag.Keys) { tags.Add(key, Tag[key].ToString()); } databaseAccountUpdateParameters.Tags = tags; } if (VirtualNetworkRule != null || VirtualNetworkRuleObject != null) { Collection <VirtualNetworkRule> virtualNetworkRule = new Collection <VirtualNetworkRule>(); if (VirtualNetworkRule != null && VirtualNetworkRule.Length > 0) { foreach (string id in VirtualNetworkRule) { virtualNetworkRule.Add(new VirtualNetworkRule(id: id)); } } if (VirtualNetworkRuleObject != null && VirtualNetworkRuleObject.Length > 0) { foreach (PSVirtualNetworkRule psVirtualNetworkRule in VirtualNetworkRuleObject) { virtualNetworkRule.Add(PSVirtualNetworkRule.ConvertPSVirtualNetworkRuleToVirtualNetworkRule(psVirtualNetworkRule)); } } databaseAccountUpdateParameters.VirtualNetworkRules = virtualNetworkRule; } if (IpRangeFilter != null) { string IpRangeFilterAsString = IpRangeFilter?.Aggregate(string.Empty, (output, next) => string.Concat(output, (!string.IsNullOrWhiteSpace(output) && !string.IsNullOrWhiteSpace(next) ? "," : string.Empty), next)) ?? string.Empty; databaseAccountUpdateParameters.IpRangeFilter = IpRangeFilterAsString; } if (ShouldProcess(Name, "Updating Database Account")) { DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.UpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountUpdateParameters).GetAwaiter().GetResult().Body; WriteObject(new PSDatabaseAccount(cosmosDBAccount)); } return; }
public override void ExecuteCmdlet() { ConsistencyPolicy consistencyPolicy = new ConsistencyPolicy(); { switch (DefaultConsistencyLevel) { case "Strong": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Strong; break; case "Session": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Session; break; case "Eventual": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Eventual; break; case "ConsistentPrefix": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.ConsistentPrefix; break; case "BoundedStaleness": consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.BoundedStaleness; consistencyPolicy.MaxIntervalInSeconds = MaxStalenessIntervalInSeconds; consistencyPolicy.MaxStalenessPrefix = MaxStalenessPrefix; break; default: consistencyPolicy.DefaultConsistencyLevel = Management.CosmosDB.Models.DefaultConsistencyLevel.Session; break; } } string writeLocation = null; Collection <Location> LocationCollection = new Collection <Location>(); if (Location != null && Location.Length > 0) { int failoverPriority = 0; foreach (string l in Location) { Location loc = new Location(locationName: l, failoverPriority: failoverPriority); LocationCollection.Add(loc); if (failoverPriority == 0) { writeLocation = l; } failoverPriority++; } } else if (LocationObject != null && LocationObject.Length > 0) { if (writeLocation != null) { WriteWarning("Cannot accept Location and LocationObject simultaneously as parameters"); return; } foreach (PSLocation psLocation in LocationObject) { LocationCollection.Add(PSLocation.ConvertPSLocationToLocation(psLocation)); if (psLocation.FailoverPriority == 0) { writeLocation = psLocation.LocationName; } } } if (string.IsNullOrEmpty(writeLocation)) { WriteWarning("Cannot create Account without a Write Location."); return; } Dictionary <string, string> tags = new Dictionary <string, string>(); if (Tag != null) { foreach (string key in Tag.Keys) { tags.Add(key, Tag[key].ToString()); } } Collection <VirtualNetworkRule> virtualNetworkRule = new Collection <VirtualNetworkRule>(); if (VirtualNetworkRule != null && VirtualNetworkRule.Length > 0) { foreach (string id in VirtualNetworkRule) { virtualNetworkRule.Add(new VirtualNetworkRule(id: id)); } } if (VirtualNetworkRuleObject != null && VirtualNetworkRuleObject.Length > 0) { foreach (PSVirtualNetworkRule psVirtualNetworkRule in VirtualNetworkRuleObject) { virtualNetworkRule.Add(PSVirtualNetworkRule.ConvertPSVirtualNetworkRuleToVirtualNetworkRule(psVirtualNetworkRule)); } } string IpRangeFilterAsString = null; if (IpRangeFilter != null && IpRangeFilter.Length > 0) { IpRangeFilterAsString = IpRangeFilter?.Aggregate(string.Empty, (output, next) => string.Concat(output, (!string.IsNullOrWhiteSpace(output) && !string.IsNullOrWhiteSpace(next) ? "," : string.Empty), next)) ?? string.Empty; } DatabaseAccountCreateUpdateParameters databaseAccountCreateUpdateParameters = new DatabaseAccountCreateUpdateParameters(locations: LocationCollection, location: writeLocation, name: Name, consistencyPolicy: consistencyPolicy, tags: tags, ipRangeFilter: IpRangeFilterAsString); databaseAccountCreateUpdateParameters.EnableMultipleWriteLocations = EnableMultipleWriteLocations; databaseAccountCreateUpdateParameters.IsVirtualNetworkFilterEnabled = EnableVirtualNetwork; databaseAccountCreateUpdateParameters.EnableAutomaticFailover = EnableAutomaticFailover; databaseAccountCreateUpdateParameters.VirtualNetworkRules = virtualNetworkRule; databaseAccountCreateUpdateParameters.DisableKeyBasedMetadataWriteAccess = DisableKeyBasedMetadataWriteAccess; databaseAccountCreateUpdateParameters.IpRangeFilter = IpRangeFilterAsString; databaseAccountCreateUpdateParameters.PublicNetworkAccess = PublicNetworkAccess; if (!string.IsNullOrEmpty(ApiKind)) { if (!ApiKind.Equals("MongoDB", StringComparison.OrdinalIgnoreCase)) { switch (ApiKind) { case "Cassandra": databaseAccountCreateUpdateParameters.Capabilities = new List <Capability> { new Capability { Name = "EnableCassandra" } }; break; case "Gremlin": databaseAccountCreateUpdateParameters.Capabilities = new List <Capability> { new Capability { Name = "EnableGremlin" } }; break; case "Table": databaseAccountCreateUpdateParameters.Capabilities = new List <Capability> { new Capability { Name = "EnableTable" } }; break; case "Sql": break; } ApiKind = null; } } else { ApiKind = "GlobalDocumentDB"; } databaseAccountCreateUpdateParameters.Kind = ApiKind; if (ShouldProcess(Name, "Creating Database Account")) { DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.CreateOrUpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountCreateUpdateParameters).GetAwaiter().GetResult().Body; WriteObject(new PSDatabaseAccount(cosmosDBAccount)); } return; }