Ejemplo n.º 1
0
        private static int CompareKind(ApiKind x, ApiKind y)
        {
            var xKindOrder = GetKindOrder(x);
            var yKindOrder = GetKindOrder(y);

            return(xKindOrder.CompareTo(yKindOrder));
        }
Ejemplo n.º 2
0
        public async Task <Api> GetApi(ApiKind kind, bool ignoreCache = false)
        {
            var cacheKey = $"{kind}-api";

            if (ignoreCache == false && LocalCache != null)
            {
                try
                {
                    return(await LocalCache.Get <Api>(cacheKey));
                }
                catch (KeyNotFoundException) { }
            }

            var query = new StringBuilder();

            query.Append($"{{\"kind\": \"{kind}\"}}");
            var apis = await PerformRequest(query.ToString());

            if (apis.Count == 0)
            {
                throw new ApiNotAvailableDiscoveryException();
            }

            // By design only one API of a given kind can exist.
            var api = apis[0];

            if (LocalCache != null)
            {
                await LocalCache.Insert(cacheKey, api);
            }

            return(api);
        }
Ejemplo n.º 3
0
    private static string GetReferenceClass(ApiKind kind)
    {
        switch (kind)
        {
        case ApiKind.Interface:
        case ApiKind.Delegate:
        case ApiKind.Enum:
        case ApiKind.Struct:
        case ApiKind.Class:
            return(kind.ToString().ToLower());

        case ApiKind.Namespace:
        case ApiKind.Constant:
        case ApiKind.EnumItem:
        case ApiKind.Field:
        case ApiKind.Constructor:
        case ApiKind.Destructor:
        case ApiKind.Property:
        case ApiKind.PropertyGetter:
        case ApiKind.PropertySetter:
        case ApiKind.Method:
        case ApiKind.Operator:
        case ApiKind.Event:
        case ApiKind.EventAdder:
        case ApiKind.EventRemover:
        case ApiKind.EventRaiser:
        default:
            return("reference");
        }
    }
Ejemplo n.º 4
0
        public async Task<Api> GetApi(ApiKind kind, bool ignoreCache=false)
        {
            var cacheKey = $"{kind}-api";
            if (ignoreCache == false && LocalCache != null)
            {
                try
                {
                    return  await LocalCache.Get<Api>(cacheKey);
                }
                catch (KeyNotFoundException) { }
            }

            var query = new StringBuilder();
			query.Append($"{{\"kind\": \"{kind}\"}}");
            var apis = await PerformRequest(query.ToString());

            if (apis.Count == 0)
                throw new ApiNotAvailableDiscoveryException();

			// By design only one API of a given kind can exist.
            var api = apis[0];

			if (LocalCache != null)
				await LocalCache.Insert(cacheKey, api);

            return api;
        }
Ejemplo n.º 5
0
        public static bool IsAccessor(this ApiKind kind)
        {
            switch (kind)
            {
            case ApiKind.PropertyAccessor:
            case ApiKind.EventAccessor:
                return(true);

            default:
                return(false);
            }
        }
Ejemplo n.º 6
0
 public static bool IsAccessor(this ApiKind kind)
 {
     switch (kind)
     {
         case ApiKind.PropertyGetter:
         case ApiKind.PropertySetter:
         case ApiKind.EventAdder:
         case ApiKind.EventRemover:
         case ApiKind.EventRaiser:
             return true;
         default:
             return false;
     }
 }
Ejemplo n.º 7
0
 public static bool IsType(this ApiKind kind)
 {
     switch (kind)
     {
         case ApiKind.Interface:
         case ApiKind.Delegate:
         case ApiKind.Enum:
         case ApiKind.Struct:
         case ApiKind.Class:
             return true;
         default:
             return false;
     }
 }
Ejemplo n.º 8
0
        public static bool IsInfrastructure(this ApiKind kind)
        {
            switch (kind)
            {
            case ApiKind.EnumField:
            case ApiKind.DelegateMember:
            case ApiKind.PropertyAccessor:
            case ApiKind.EventAccessor:
                return(true);

            default:
                return(false);
            }
        }
Ejemplo n.º 9
0
    public string GetIcon(ApiKind kind)
    {
        var name = kind.ToString();

        if (kind is ApiKind.Constructor or
            ApiKind.Destructor or
            ApiKind.PropertyGetter or
            ApiKind.PropertySetter or
            ApiKind.EventAdder or
            ApiKind.EventRemover or
            ApiKind.EventRaiser)
        {
            name = "method";
        }

        return($"/img/{name}.svg");
    }
Ejemplo n.º 10
0
 private ApiEntry(Guid guid,
                  ApiKind kind,
                  ApiEntry parent,
                  string name,
                  string syntax,
                  ObsoletionEntry obsoletionEntry,
                  PlatformSupportEntry platformSupportEntry,
                  PreviewRequirementEntry previewRequirementEntry)
 {
     Fingerprint             = guid;
     Kind                    = kind;
     Parent                  = parent;
     Name                    = name;
     Syntax                  = syntax;
     ObsoletionEntry         = obsoletionEntry;
     PlatformSupportEntry    = platformSupportEntry;
     PreviewRequirementEntry = previewRequirementEntry;
 }
Ejemplo n.º 11
0
        public static bool IsMember(this ApiKind kind)
        {
            switch (kind)
            {
            case ApiKind.EnumField:
            case ApiKind.DelegateMember:
            case ApiKind.Field:
            case ApiKind.Property:
            case ApiKind.Event:
            case ApiKind.Constructor:
            case ApiKind.PropertyAccessor:
            case ApiKind.EventAccessor:
            case ApiKind.Method:
                return(true);

            default:
                return(false);
            }
        }
Ejemplo n.º 12
0
        public async Task <ApiService> GetService(ApiKind kind, Version version = null, bool ignoreCache = false)
        {
            var cacheKey = (version == null) ? $"{kind}-service" : $"{kind}-v{version}-service";

            if (ignoreCache == false && LocalCache != null)
            {
                try
                {
                    return(await LocalCache.Get <ApiService>(cacheKey).ConfigureAwait(false));
                }
                catch (KeyNotFoundException) { }
            }

            var query = new StringBuilder();

            query.Append("{");
            query.Append($"\"kind\": \"{kind}\"");
            if (version != null)
            {
                query.Append($", \"services.version.major\": {version.Major}");
                query.Append($", \"services.version.minor\": {{\"$gte\": {version.Minor}}}");
                //query.Append($", \"services.version.build\": {version.Build}");
            }
            query.Append("}");

            var apis = await PerformRequest(query.ToString()).ConfigureAwait(false);

            if (apis.Count == 0)
            {
                throw new ApiNotAvailableDiscoveryException();
            }

            // by default documents are sorted by version, descending.
            var service = apis[0].Services[0];

            if (LocalCache != null)
            {
                await LocalCache.Insert(cacheKey, service).ConfigureAwait(false);
            }

            return(service);
        }
Ejemplo n.º 13
0
        private static int GetKindOrder(ApiKind kind)
        {
            switch (kind)
            {
            // Namespace -- no order
            case ApiKind.Namespace:
                return(0);

            // Types -- no order between types
            case ApiKind.Interface:
            case ApiKind.Delegate:
            case ApiKind.Enum:
            case ApiKind.Struct:
            case ApiKind.Class:
                return(1);

            // Members
            case ApiKind.EnumField:
            case ApiKind.Field:
                return(2);

            case ApiKind.Constructor:
                return(3);

            case ApiKind.Property:
                return(4);

            case ApiKind.Method:
            case ApiKind.PropertyAccessor:
            case ApiKind.EventAccessor:
            case ApiKind.DelegateMember:
                return(5);

            case ApiKind.Event:
                return(6);

            default:
                throw new ArgumentOutOfRangeException("kind");
            }
        }
Ejemplo n.º 14
0
 public static bool IsMember(this ApiKind kind)
 {
     switch (kind)
     {
         case ApiKind.Field:
         case ApiKind.EnumItem:
         case ApiKind.Constant:
         case ApiKind.Constructor:
         case ApiKind.Destructor:
         case ApiKind.Operator:
         case ApiKind.Property:
         case ApiKind.PropertyGetter:
         case ApiKind.PropertySetter:
         case ApiKind.Method:
         case ApiKind.Event:
         case ApiKind.EventAdder:
         case ApiKind.EventRemover:
         case ApiKind.EventRaiser:
             return true;
         default:
             return false;
     }
 }
Ejemplo n.º 15
0
        public async Task<ApiService> GetService(ApiKind kind, Version version = null, bool ignoreCache=false)
        {

			var cacheKey = (version == null) ? $"{kind}-service" : $"{kind}-v{version}-service";
            if (ignoreCache == false && LocalCache != null)
            {
                try
                {
                    return await LocalCache.Get<ApiService>(cacheKey).ConfigureAwait(false);
                }
                catch (KeyNotFoundException) { }
            }

            var query = new StringBuilder();
            query.Append("{");
			query.Append($"\"kind\": \"{kind}\"");
            if (version != null)
            {
				query.Append($", \"services.version.major\": {version.Major}");
				query.Append($", \"services.version.minor\": {{\"$gte\": {version.Minor}}}");
				//query.Append($", \"services.version.build\": {version.Build}");
            }
            query.Append("}");

            var apis = await PerformRequest(query.ToString()).ConfigureAwait(false);
            if (apis.Count == 0)
                throw new ApiNotAvailableDiscoveryException();

			// by default documents are sorted by version, descending.
            var service = apis[0].Services[0];

			if (LocalCache != null)
				await LocalCache.Insert(cacheKey, service).ConfigureAwait(false);

            return service;
        }
Ejemplo n.º 16
0
        public override void ExecuteCmdlet()
        {
            ConsistencyPolicy     consistencyPolicy  = base.PopoulateConsistencyPolicy(DefaultConsistencyLevel, MaxStalenessIntervalInSeconds, MaxStalenessPrefix);
            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.ToSDKModel(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)
            {
                tags = base.PopulateTags(Tag);
            }

            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.ToSDKModel(psVirtualNetworkRule));
                }
            }

            DatabaseAccountCreateUpdateParameters databaseAccountCreateUpdateParameters = new DatabaseAccountCreateUpdateParameters(locations: LocationCollection, location: writeLocation, name: Name, consistencyPolicy: consistencyPolicy, tags: tags);

            databaseAccountCreateUpdateParameters.EnableMultipleWriteLocations       = EnableMultipleWriteLocations;
            databaseAccountCreateUpdateParameters.IsVirtualNetworkFilterEnabled      = EnableVirtualNetwork;
            databaseAccountCreateUpdateParameters.EnableAutomaticFailover            = EnableAutomaticFailover;
            databaseAccountCreateUpdateParameters.VirtualNetworkRules                = virtualNetworkRule;
            databaseAccountCreateUpdateParameters.DisableKeyBasedMetadataWriteAccess = DisableKeyBasedMetadataWriteAccess;
            databaseAccountCreateUpdateParameters.PublicNetworkAccess                = PublicNetworkAccess;
            databaseAccountCreateUpdateParameters.EnableFreeTier          = EnableFreeTier;
            databaseAccountCreateUpdateParameters.EnableAnalyticalStorage = EnableAnalyticalStorage;

            if (IpRule != null && IpRule.Length > 0)
            {
                databaseAccountCreateUpdateParameters.IpRules = base.PopulateIpRules(IpRule);
            }

            if (KeyVaultKeyUri != null)
            {
                databaseAccountCreateUpdateParameters.KeyVaultKeyUri = KeyVaultKeyUri;
            }

            if (!string.IsNullOrEmpty(ApiKind))
            {
                if (ApiKind.Equals("MongoDB", StringComparison.OrdinalIgnoreCase))
                {
                    if (ServerVersion != null)
                    {
                        databaseAccountCreateUpdateParameters.ApiProperties = new ApiProperties
                        {
                            ServerVersion = ServerVersion
                        };
                    }
                }
                else
                {
                    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 PSDatabaseAccountGetResults(cosmosDBAccount));
            }

            return;
        }
Ejemplo n.º 17
0
        public override void ExecuteCmdlet()
        {
            DatabaseAccountGetResults databaseAccountGetResults = null;

            try
            {
                databaseAccountGetResults = CosmosDBManagementClient.DatabaseAccounts.Get(ResourceGroupName, Name);
            }
            catch (CloudException e)
            {
                if (e.Response.StatusCode != System.Net.HttpStatusCode.NotFound)
                {
                    throw;
                }
            }

            if (databaseAccountGetResults != null)
            {
                throw new ConflictingResourceException(message: string.Format(ExceptionMessage.Conflict, Name));
            }

            ConsistencyPolicy     consistencyPolicy  = base.PopoulateConsistencyPolicy(DefaultConsistencyLevel, MaxStalenessIntervalInSeconds, MaxStalenessPrefix);
            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.ToSDKModel(psLocation));
                    if (psLocation.FailoverPriority == 0)
                    {
                        writeLocation = psLocation.LocationName;
                    }
                }
            }

            Dictionary <string, string> tags = new Dictionary <string, string>();

            if (Tag != null)
            {
                tags = base.PopulateTags(Tag);
            }

            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.ToSDKModel(psVirtualNetworkRule));
                }
            }

            DatabaseAccountCreateUpdateParameters databaseAccountCreateUpdateParameters = new DatabaseAccountCreateUpdateParameters(locations: LocationCollection, location: writeLocation, name: Name, tags: tags);

            if (FromPointInTimeBackup)
            {
                PSRestoreParameters restoreParameters = restoreContext.GetRestoreParameters(CosmosDBManagementClient);
                if (restoreParameters == null)
                {
                    WriteWarning("Please provide valid parameters to restore");
                    return;
                }

                databaseAccountCreateUpdateParameters.CreateMode        = CreateMode.Restore;
                databaseAccountCreateUpdateParameters.RestoreParameters = restoreParameters.ToSDKModel();
            }

            databaseAccountCreateUpdateParameters.ConsistencyPolicy                  = consistencyPolicy;
            databaseAccountCreateUpdateParameters.EnableMultipleWriteLocations       = EnableMultipleWriteLocations;
            databaseAccountCreateUpdateParameters.IsVirtualNetworkFilterEnabled      = EnableVirtualNetwork;
            databaseAccountCreateUpdateParameters.EnableAutomaticFailover            = EnableAutomaticFailover;
            databaseAccountCreateUpdateParameters.VirtualNetworkRules                = virtualNetworkRule;
            databaseAccountCreateUpdateParameters.DisableKeyBasedMetadataWriteAccess = DisableKeyBasedMetadataWriteAccess;
            databaseAccountCreateUpdateParameters.PublicNetworkAccess                = PublicNetworkAccess;
            databaseAccountCreateUpdateParameters.EnableFreeTier          = EnableFreeTier;
            databaseAccountCreateUpdateParameters.EnableAnalyticalStorage = EnableAnalyticalStorage;
            Collection <string> networkAclBypassResourceId = NetworkAclBypassResourceId != null ? new Collection <string>(NetworkAclBypassResourceId) : new Collection <string>();

            databaseAccountCreateUpdateParameters.NetworkAclBypassResourceIds = networkAclBypassResourceId;

            if (IpRule != null && IpRule.Length > 0)
            {
                databaseAccountCreateUpdateParameters.IpRules = base.PopulateIpRules(IpRule);
            }

            if (KeyVaultKeyUri != null)
            {
                databaseAccountCreateUpdateParameters.KeyVaultKeyUri = KeyVaultKeyUri;
            }

            if (NetworkAclBypass != null)
            {
                databaseAccountCreateUpdateParameters.NetworkAclBypass =
                    NetworkAclBypass == "AzureServices" ? SDKModel.NetworkAclBypass.AzureServices : SDKModel.NetworkAclBypass.None;
            }

            if (!string.IsNullOrEmpty(ApiKind))
            {
                if (ApiKind.Equals("MongoDB", StringComparison.OrdinalIgnoreCase))
                {
                    if (ServerVersion != null)
                    {
                        databaseAccountCreateUpdateParameters.ApiProperties = new ApiProperties
                        {
                            ServerVersion = ServerVersion
                        };
                    }
                }
                else
                {
                    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 (!string.IsNullOrEmpty(BackupPolicyType))
            {
                PSBackupPolicy backupPolicy = new PSBackupPolicy()
                {
                    BackupType = BackupPolicyType,
                    BackupIntervalInMinutes        = BackupIntervalInMinutes,
                    BackupRetentionIntervalInHours = BackupRetentionIntervalInHours,
                    BackupStorageRedundancy        = BackupStorageRedundancy
                };

                if (BackupPolicyType.Equals(PSBackupPolicy.ContinuousModeBackupType, StringComparison.OrdinalIgnoreCase) &&
                    (BackupIntervalInMinutes.HasValue || BackupRetentionIntervalInHours.HasValue))
                {
                    WriteWarning("Cannot accept BackupInterval or BackupRetention parameters for ContinuousModeBackupType");
                    return;
                }

                databaseAccountCreateUpdateParameters.BackupPolicy = backupPolicy.ToSDKModel();
            }
            else if (BackupIntervalInMinutes.HasValue || BackupRetentionIntervalInHours.HasValue || !string.IsNullOrEmpty(BackupStorageRedundancy))
            {
                databaseAccountCreateUpdateParameters.BackupPolicy = new PeriodicModeBackupPolicy()
                {
                    PeriodicModeProperties = new PeriodicModeProperties()
                    {
                        BackupIntervalInMinutes        = BackupIntervalInMinutes,
                        BackupRetentionIntervalInHours = BackupRetentionIntervalInHours,
                        BackupStorageRedundancy        = BackupStorageRedundancy
                    }
                };
            }

            // Update analytical storage schema type.
            databaseAccountCreateUpdateParameters.AnalyticalStorageConfiguration = CreateAnalyticalStorageConfiguration(AnalyticalStorageSchemaType);

            if (ShouldProcess(Name, "Creating Database Account"))
            {
                DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.CreateOrUpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountCreateUpdateParameters).GetAwaiter().GetResult().Body;
                WriteObject(new PSDatabaseAccountGetResults(cosmosDBAccount));
            }

            return;
        }
Ejemplo n.º 18
0
        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;
                }
            }

            if (!string.IsNullOrEmpty(ApiKind))
            {
                if (!ApiKind.Equals("GlobalDocumentDB", StringComparison.OrdinalIgnoreCase) && !ApiKind.Equals("MongoDB", StringComparison.OrdinalIgnoreCase))
                {
                    WriteError(new ErrorRecord(new PSArgumentException("Gremlin, Cassandra and Table account creation not supported" +
                                                                       "in Azure Powershell"), string.Empty, ErrorCategory.CloseError, null));
                    return;
                }
            }
            else
            {
                ApiKind = "GlobalDocumentDB";
            }

            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)
                {
                    WriteError(new ErrorRecord(new PSArgumentException("Cannot accept Location and LocationObject simultaneously as parameters"), string.Empty, ErrorCategory.CloseError, null));
                    return;
                }

                foreach (PSLocation psLocation in LocationObject)
                {
                    LocationCollection.Add(PSLocation.ConvertPSLocationToLocation(psLocation));
                    if (psLocation.FailoverPriority == 0)
                    {
                        writeLocation = psLocation.LocationName;
                    }
                }
            }

            if (string.IsNullOrEmpty(writeLocation))
            {
                WriteError(new ErrorRecord(new PSArgumentException("Cannot create Account without a Write Location."), string.Empty, ErrorCategory.CloseError, null));
                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) ||
                (VirtualNetworkRuleObject != null && VirtualNetworkRuleObject.Length > 0))
            {
                foreach (string id in VirtualNetworkRule)
                {
                    virtualNetworkRule.Add(new VirtualNetworkRule(id: id));
                }

                foreach (PSVirtualNetworkRule psVirtualNetworkRule in VirtualNetworkRuleObject)
                {
                    virtualNetworkRule.Add(PSVirtualNetworkRule.ConvertPSVirtualNetworkRuleToVirtualNetworkRule(psVirtualNetworkRule));
                }
            }

            string IpRangeFilterAsString = null;

            if (IpRangeFilter != null && IpRangeFilter.Length > 0)
            {
                for (int i = 0; i < IpRangeFilter.Length; i++)
                {
                    if (i == 0)
                    {
                        IpRangeFilterAsString = IpRangeFilter[0];
                    }
                    else
                    {
                        IpRangeFilterAsString = string.Concat(IpRangeFilterAsString, ",", IpRangeFilter[i]);
                    }
                }
            }

            DatabaseAccountCreateUpdateParameters databaseAccountCreateUpdateParameters = new DatabaseAccountCreateUpdateParameters(locations: LocationCollection, location: writeLocation, name: Name, kind: ApiKind, consistencyPolicy: consistencyPolicy, tags: tags, ipRangeFilter: IpRangeFilterAsString);

            databaseAccountCreateUpdateParameters.EnableMultipleWriteLocations  = EnableMultipleWriteLocations;
            databaseAccountCreateUpdateParameters.IsVirtualNetworkFilterEnabled = EnableVirtualNetwork;
            databaseAccountCreateUpdateParameters.EnableAutomaticFailover       = EnableAutomaticFailover;
            databaseAccountCreateUpdateParameters.VirtualNetworkRules           = virtualNetworkRule;

            if (ShouldProcess(Name, "Creating Database Account"))
            {
                DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.CreateOrUpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountCreateUpdateParameters).GetAwaiter().GetResult().Body;
                WriteObject(new PSDatabaseAccount(cosmosDBAccount));
            }

            return;
        }
Ejemplo n.º 19
0
 public static bool IsNamespace(this ApiKind kind)
 {
     return(kind == ApiKind.Namespace);
 }
Ejemplo n.º 20
0
 public static string GetApiUrl(string apiName, ApiKind kind)
 {
     return($"{rootUrl}/{apiName}-{kind}.php");
 }
Ejemplo n.º 21
0
        public async Task <Uri> GetServiceAddress(ApiKind kind, Version version = null, bool ignoreCache = false)
        {
            var service = await GetService(kind, version, ignoreCache).ConfigureAwait(false);

            return(service?.BaseAddress);
        }
Ejemplo n.º 22
0
        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;
        }
Ejemplo n.º 23
0
 public async Task<Uri> GetServiceAddress(ApiKind kind, Version version = null, bool ignoreCache=false)
 {
     var service = await GetService(kind, version, ignoreCache).ConfigureAwait(false);
     return service?.BaseAddress;
 }