示例#1
0
 private async Task <string> SendBeat(CreateInstanceRequest request)
 {
     if (request == null)
     {
         return(string.Empty);
     }
     try
     {
         _logger.LogDebug($"发送心跳包:{request.serviceName},{request.ip}:{request.port}");
         var beat = new InstanceBeat
         {
             serviceName = request.serviceName,
             ip          = request.ip,
             port        = request.port,
             weight      = request.weight,
             cluster     = string.Empty,
             metadata    = request.Meta,
             scheduled   = true
         };
         return(await _client.InstanceBeat(new InstanceBeatRequest
         {
             namespaceId = request.namespaceId,
             serviceName = request.serviceName,
             groupName = request.groupName,
             ephemeral = request.ephemeral,
             beat = JsonConvert.SerializeObject(beat)
         }));
     }
     catch (Exception ex)
     {
         _logger.LogWarning($"心跳包发送异常:{ex.Message}");
         return(string.Empty);
     }
 }
示例#2
0
        public async Task <ActionResult> CreateInstance([FromBody] CreateInstanceRequest request)
        {
            var resp = await(await factory.GetInstanceServiceClient())
                       .CreateInstanceAsync(new AcademyCloud.ResourceManagement.Protos.Instance.CreateInstanceRequest
            {
                Name       = request.Name,
                ImageName  = request.ImageName,
                FlavorName = request.FlavorName,
                Volume     = request.Volume
            });

            // add the resources usage to expenses
            await(await factory.GetExpensesInteropClientAsync())
            .ChangeProjectUserResourcesAsync(new AcademyCloud.Expenses.Protos.Interop.ChangeProjectUserResourcesRequest
            {
                ResourcesDelta = new AcademyCloud.Expenses.Protos.Common.Resources
                {
                    Cpu     = resp.Flavor.Cpu,
                    Memory  = resp.Flavor.Memory,
                    Storage = request.Volume,
                }
            });

            return(Created(resp.InstanceId, resp.InstanceId));
        }
示例#3
0
        /// <summary>Snippet for CreateInstanceAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task CreateInstanceRequestObjectAsync()
        {
            // Create client
            BigtableInstanceAdminClient bigtableInstanceAdminClient = await BigtableInstanceAdminClient.CreateAsync();

            // Initialize request argument(s)
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsProjectName = ProjectName.FromProject("[PROJECT]"),
                InstanceId          = "",
                Instance            = new Instance(),
                Clusters            = { { "", new Cluster() }, },
            };
            // Make the request
            Operation <Instance, CreateInstanceMetadata> response = await bigtableInstanceAdminClient.CreateInstanceAsync(request);

            // Poll until the returned long-running operation is complete
            Operation <Instance, CreateInstanceMetadata> completedResponse = await response.PollUntilCompletedAsync();

            // Retrieve the operation result
            Instance result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <Instance, CreateInstanceMetadata> retrievedResponse = await bigtableInstanceAdminClient.PollOnceCreateInstanceAsync(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                Instance retrievedResult = retrievedResponse.Result;
            }
        }
        /// <summary>Snippet for CreateInstance</summary>
        public void CreateInstanceRequestObject()
        {
            // Snippet: CreateInstance(CreateInstanceRequest, CallSettings)
            // Create client
            DataFusionClient dataFusionClient = DataFusionClient.Create();
            // Initialize request argument(s)
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                Parent     = "",
                InstanceId = "",
                Instance   = new Instance(),
            };
            // Make the request
            Operation <Instance, OperationMetadata> response = dataFusionClient.CreateInstance(request);

            // Poll until the returned long-running operation is complete
            Operation <Instance, OperationMetadata> completedResponse = response.PollUntilCompleted();
            // Retrieve the operation result
            Instance result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <Instance, OperationMetadata> retrievedResponse = dataFusionClient.PollOnceCreateInstance(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                Instance retrievedResult = retrievedResponse.Result;
            }
            // End snippet
        }
示例#5
0
        public void CreateNewInstanceFromRemote(ReceivedEvent received, CreateInstanceRequest request)
        {
            var response = _stitches.CreateInstances(request, null, false);

            if (request.ReceiptRequested)
            {
                _clusterSender.SendReceipt(response.IsSuccess, received.FromNetworkId, request.JobId, request.TaskId);
            }
        }
示例#6
0
        public override async Task Regist(IEnumerable <Assembly> assemblyList, ServiceAddress serverAddress)
        {
            foreach (var assembly in assemblyList)
            {
                var serviceName = assembly.ServiceName();
                var meta        = new Dictionary <string, string>
                {
                    { KeyService, serverAddress.ToJson() },
                    { KeyMode, $"{Constants.Mode}" },
                    { KeyVersion, assembly.GetName().Version.ToString() }
                };
                var request = new CreateInstanceRequest
                {
                    serviceName = serviceName,
                    namespaceId = _config.Tenant,
                    groupName   = _config.Group,
                    clusterName = string.Empty,
                    ip          = serverAddress.IpAddress,
                    port        = serverAddress.Port,
                    weight      = serverAddress.Weight,
                    Meta        = meta,
                    enabled     = true,
                    healthy     = true,
                    ephemeral   = false
                };
                try
                {
                    var result = await _client.CreateInstance(request);

                    if (result == "ok")
                    {
                        _services.Add(new RemoveInstanceRequest
                        {
                            namespaceId = request.namespaceId,
                            serviceName = request.serviceName,
                            groupName   = request.groupName,
                            clusterName = request.clusterName,
                            ip          = request.ip,
                            port        = request.port,
                            ephemeral   = request.ephemeral
                        });
                        _logger.LogInformation($"服务注册成功 [{serviceName},{serverAddress}]");
                        //发送心跳包
                        _listenerHelper.AddServiceBeat(request, t => { }, 15);
                    }
                    else
                    {
                        throw new SpearException($"注册实例失败,{result}");
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogWarning(
                        $"服务注册失败 [{serviceName},{serverAddress}]:{ex.Message}");
                }
            }
        }
        /// <summary>
        /// 创建缓存实例
        /// </summary>
        public async Task <CreateInstanceResponse> CreateInstanceAsync(CreateInstanceRequest createInstanceRequest)
        {
            Dictionary <string, string> urlParam = new Dictionary <string, string>();
            string              urlPath          = HttpUtils.AddUrlPath("/v2/{project_id}/instances", urlParam);
            SdkRequest          request          = HttpUtils.InitSdkRequest(urlPath, "application/json;charset=UTF-8", createInstanceRequest);
            HttpResponseMessage response         = await DoHttpRequestAsync("POST", request);

            return(JsonUtils.DeSerialize <CreateInstanceResponse>(response));
        }
示例#8
0
        /// <summary>
        /// 创建文档数据库实例,包括集群实例、副本集实例、以及单节点实例。
        /// </summary>
        public CreateInstanceResponse CreateInstance(CreateInstanceRequest createInstanceRequest)
        {
            Dictionary <string, string> urlParam = new Dictionary <string, string>();
            string      urlPath  = HttpUtils.AddUrlPath("/v3/{project_id}/instances", urlParam);
            SdkRequest  request  = HttpUtils.InitSdkRequest(urlPath, "application/json", createInstanceRequest);
            SdkResponse response = DoHttpRequest("POST", request);

            return(JsonUtils.DeSerialize <CreateInstanceResponse>(response));
        }
        public async Task <ActionResult> CreateInstance([FromBody] CreateInstanceRequest request)
        {
            if (request.BpmnProcessId == null && request.ProcessDefinitionKey == null)
            {
                return(BadRequest(new { error = "Either a bpmnProcessId or a processDefinitionKey must be given" }));
            }

            var result = await _daprClient.InvokeBindingAsync <CreateInstanceRequest, CreateInstanceResponse>(
                "command", Commands.CreateInstance, request);

            return(Ok(result));
        }
示例#10
0
        public CreateInstanceResponse CreateNewInstances(CreateInstanceRequest arg)
        {
            // If we are creating the instances locally, redirect to the Stitches module
            if (arg.LocalOnly)
            {
                var localResponse = _stitches.CreateInstances(arg, null, false);
                return(new CreateInstanceResponse(localResponse));
            }

            // Otherwise we're distributing. First, get the recipient nodes.
            // TODO: A better algorithm for selecting nodes. Add instances to nodes with the lowest number of instances first.
            var nodes = _data.GetAll <NodeStatus>()
                        .Where(ns => ns.RunningModules.Contains(ModuleNames.Stitches))
                        .ToList();
            var selectedNodes = new List <NodeStatus>();

            for (int i = 0; i < arg.NumberOfInstances; i++)
            {
                // Do some scoring, to select the nodes with the most capacity
                var node = nodes[i % nodes.Count];
                selectedNodes.Add(node);
            }

            // Create a job, and start dispatching commands
            var job = _jobManager.CreateJob("Command=CreateStitchInstance");

            foreach (var node in selectedNodes)
            {
                var task    = job.CreateSubtask(CommandType.CreateStitchInstance, node.Id, node.Id);
                var payload = new CreateInstanceRequest
                {
                    GroupName         = arg.GroupName,
                    Name              = arg.Name,
                    NumberOfInstances = 1,
                    JobId             = job.Id,
                    TaskId            = task.Id
                };
                bool isRemote = node.Id != _core.NodeId;
                var  response = _stitches.CreateInstances(payload, node.NetworkNodeId, isRemote);
                if (!isRemote && response != null)
                {
                    job.MarkTaskComplete(task.Id, response.IsSuccess);
                }
            }
            _jobManager.Save(job);
            return(new CreateInstanceResponse
            {
                JobId = job.Id,
                IsSuccess = true
            });
        }
示例#11
0
 public LocalCreateInstanceResponse CreateInstances(CreateInstanceRequest request, string networkNodeId, bool remote)
 {
     if (remote)
     {
         var message = new ClusterMessageBuilder()
                       .FromNode()
                       .ToNode(networkNodeId)
                       .WithObjectPayload(request)
                       .Build();
         _messageBus.Publish(ClusterMessage.SendEventName, message);
         return(null);
     }
     return(_messageBus.Request <LocalCreateInstanceRequest, LocalCreateInstanceResponse>(request));
 }
示例#12
0
        /// <summary>
        /// 创建指定规格的ES集群实例
        /// </summary>
        /// <param name="req"><see cref="CreateInstanceRequest"/></param>
        /// <returns><see cref="CreateInstanceResponse"/></returns>
        public CreateInstanceResponse CreateInstanceSync(CreateInstanceRequest req)
        {
            JsonResponseModel <CreateInstanceResponse> rsp = null;

            try
            {
                var strResp = this.InternalRequestSync(req, "CreateInstance");
                rsp = JsonConvert.DeserializeObject <JsonResponseModel <CreateInstanceResponse> >(strResp);
            }
            catch (JsonSerializationException e)
            {
                throw new TencentCloudSDKException(e.Message);
            }
            return(rsp.Response);
        }
示例#13
0
        private Boolean ProcessedRequest(CreateInstanceRequest aCreateInstance, Dictionary <String, Object> aDictionary)
        {
            Boolean result = false;

            try
            {
                IRequest r = aCreateInstance(aDictionary);
                r.PrepareMessage();
                r.Request(Response);
                FGlobalResult = r.ExecuteAfter();
                result        = true;
            }
            catch (Exception ex)
            {
                ExceptionMessage.ShowError(ex);
                result = false;
            }
            return(result);
        }
        /// <summary>Snippet for CreateInstanceAsync</summary>
        public async Task CreateInstanceAsync_RequestObject()
        {
            // Snippet: CreateInstanceAsync(CreateInstanceRequest,CallSettings)
            // Create client
            CloudRedisClient cloudRedisClient = await CloudRedisClient.CreateAsync();

            // Initialize request argument(s)
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsLocationName = new LocationName("[PROJECT]", "[LOCATION]"),
                InstanceId           = "test_instance",
                Instance             = new Instance
                {
                    Tier         = Instance.Types.Tier.Basic,
                    MemorySizeGb = 1,
                },
            };
            // Make the request
            Operation <Instance, OperationMetadata> response =
                await cloudRedisClient.CreateInstanceAsync(request);

            // Poll until the returned long-running operation is complete
            Operation <Instance, OperationMetadata> completedResponse =
                await response.PollUntilCompletedAsync();

            // Retrieve the operation result
            Instance result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <Instance, OperationMetadata> retrievedResponse =
                await cloudRedisClient.PollOnceCreateInstanceAsync(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                Instance retrievedResult = retrievedResponse.Result;
            }
            // End snippet
        }
示例#15
0
        /// <summary> 添加心跳包发送器 </summary>
        /// <param name="request"></param>
        /// <param name="callback"></param>
        /// <param name="interval">间隔(秒,默认:5)</param>
        /// <returns></returns>
        public string AddServiceBeat(CreateInstanceRequest request, Action <string> callback, int interval = 5)
        {
            var key = JsonConvert.SerializeObject(request).Md5();

            if (_listeners.TryGetValue(key, out var listener))
            {
                listener.Callbacks.Add(callback);
                return(key);
            }

            var timer = new Timer(async sender => await ConfigBeat(sender), new object[] { key, request, interval },
                                  TimeSpan.FromSeconds(interval), Timeout.InfiniteTimeSpan);

            listener = new NacosListener(timer)
            {
                Callbacks = new List <Action <string> > {
                    callback
                }
            };
            _listeners.TryAdd(key, listener);
            return(key);
        }
示例#16
0
        /// <summary>Snippet for CreateInstanceAsync</summary>
        public async Task CreateInstanceAsync_RequestObject()
        {
            // Snippet: CreateInstanceAsync(CreateInstanceRequest,CallSettings)
            // Create client
            InstanceAdminClient instanceAdminClient = await InstanceAdminClient.CreateAsync();

            // Initialize request argument(s)
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsProjectName      = new ProjectName("[PROJECT]"),
                InstanceIdAsInstanceName = new InstanceName("[PROJECT]", "[INSTANCE]"),
                Instance = new Instance(),
            };
            // Make the request
            Operation <Instance, CreateInstanceMetadata> response =
                await instanceAdminClient.CreateInstanceAsync(request);

            // Poll until the returned long-running operation is complete
            Operation <Instance, CreateInstanceMetadata> completedResponse =
                await response.PollUntilCompletedAsync();

            // Retrieve the operation result
            Instance result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <Instance, CreateInstanceMetadata> retrievedResponse =
                await instanceAdminClient.PollOnceCreateInstanceAsync(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                Instance retrievedResult = retrievedResponse.Result;
            }
            // End snippet
        }
示例#17
0
        public void TestCreateInstance()
        {
            MongodbClient         mongodbClient = GetMongodbClient();
            CreateInstanceRequest request       = new CreateInstanceRequest();

            request.RegionId = "cn-north-1";
            DBInstanceSpec dbInstanceSpec = new DBInstanceSpec();

            dbInstanceSpec.InstanceClass     = "mongo.s1.small";
            dbInstanceSpec.InstanceStorageGB = 10;
            dbInstanceSpec.MultiAZ           = false;
            dbInstanceSpec.AzId = new List <string>()
            {
                "cn-north-1a", "cn-north-1a", "cn-north-1a"
            };
            dbInstanceSpec.VpcId        = "vpc-zo33sfjnbo";
            dbInstanceSpec.SubnetId     = "subnet-j0yka3pkcu";
            dbInstanceSpec.Password     = "******";
            dbInstanceSpec.InstanceName = "dotnetsdktest";
            request.InstanceSpec        = dbInstanceSpec;
            var response = mongodbClient.CreateInstance(request);

            _output.WriteLine(JsonConvert.SerializeObject(response));
        }
示例#18
0
        /// <summary>Snippet for CreateInstanceAsync</summary>
        public async Task CreateInstanceRequestObjectAsync()
        {
            // Snippet: CreateInstanceAsync(CreateInstanceRequest, CallSettings)
            // Additional: CreateInstanceAsync(CreateInstanceRequest, CancellationToken)
            // Create client
            DataFusionClient dataFusionClient = await DataFusionClient.CreateAsync();

            // Initialize request argument(s)
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
                InstanceId           = "",
                Instance             = new Instance(),
            };
            // Make the request
            Operation <Instance, OperationMetadata> response = await dataFusionClient.CreateInstanceAsync(request);

            // Poll until the returned long-running operation is complete
            Operation <Instance, OperationMetadata> completedResponse = await response.PollUntilCompletedAsync();

            // Retrieve the operation result
            Instance result = completedResponse.Result;

            // Or get the name of the operation
            string operationName = response.Name;
            // This name can be stored, then the long-running operation retrieved later by name
            Operation <Instance, OperationMetadata> retrievedResponse = await dataFusionClient.PollOnceCreateInstanceAsync(operationName);

            // Check if the retrieved long-running operation has completed
            if (retrievedResponse.IsCompleted)
            {
                // If it has completed, then access the result
                Instance retrievedResult = retrievedResponse.Result;
            }
            // End snippet
        }
        private static void CreateDcsInstance(DcsClient dcsClient)
        {
            List <String> azCodes = new List <string>();

            azCodes.Add("cn-north-7b");
            List <int?> backupAt = new List <int?>();

            backupAt.Add(1);
            backupAt.Add(2);
            backupAt.Add(3);
            backupAt.Add(4);
            backupAt.Add(5);
            backupAt.Add(6);
            backupAt.Add(7);
            var backupPlan = new BackupPlan()
            {
                BackupAt   = backupAt,
                BeginAt    = "16:00-17:00",
                PeriodType = "weekly"
            };
            var backupPolicy = new BackupPolicy()
            {
                BackupType           = "auto",
                PeriodicalBackupPlan = backupPlan,
                SaveDays             = 7
            };
            var createInstanceRequest = new CreateInstanceRequest()
            {
                Body = new CreateInstanceBody()
                {
                    Capacity             = 2,
                    Name                 = "dcs_create_instance_test",
                    Engine               = "Redis",
                    EngineVersion        = "4.0",
                    NoPasswordAccess     = true,
                    VpcId                = "5e37b3be-950a-48e1-b498-65b63d336481",
                    SubnetId             = "a4112635-3ec0-471c-95c3-5cf49b9533af",
                    SpecCode             = "redis.ha.au1.large.2",
                    AzCodes              = azCodes,
                    InstanceBackupPolicy = backupPolicy
                }
            };

            try
            {
                var response = dcsClient.CreateInstance(createInstanceRequest);
                Console.WriteLine(response.GetHttpBody());
            }
            catch (RequestTimeoutException requestTimeoutException)
            {
                Console.WriteLine(requestTimeoutException.ErrorMessage);
            }
            catch (ServiceResponseException clientRequestException)
            {
                Console.WriteLine(clientRequestException.HttpStatusCode);
                Console.WriteLine(clientRequestException.ErrorCode);
                Console.WriteLine(clientRequestException.ErrorMsg);
            }
            catch (ConnectionException connectionException)
            {
                Console.WriteLine(connectionException.ErrorMessage);
            }
        }
示例#20
0
        public static object CreateDevInstance(string displayName)
        {
            // [START bigtable_create_bigtableInstanceAdminClient]
            BigtableInstanceAdminClient bigtableInstanceAdminClient = BigtableInstanceAdminClient.Create();

            // [END bigtable_create_bigtableInstanceAdminClient]

            Console.WriteLine("Creating a DEVELOPMENT instance");
            // [START bigtable_create_dev_instance]
            // Creates a DEVELOPMENT Instance with "<intanceId>-dev" instance id
            // with cluster id "hdd-cluster" and location us-east1-b.
            // Cluster node count should not be set while creating DEVELOPMENT instance.
            displayName += " Dev"; // display name is for display purposes only, it doesn't have to equal to instanceId and can be amended after instance is created.
            string instanceId = Regex.Replace(displayName, @"[^A-Za-z0-9_\.~]+", "-").ToLower();

            // Please refer to the link below for the full list of availabel locations:
            // https://cloud.google.com/bigtable/docs/locations
            string zone = "us-east1-b";

            // The instance to create.
            Instance myInstance = new Instance
            {
                DisplayName = displayName,
                // You can choose DEVELOPMENT or PRODUCTION type here.
                // If not set, will default to PRODUCTION type.
                // Instance type can be upgraded from DEVELOPMENT to PRODUCTION but can not be dowgraded after instance is created.
                Type   = Instance.Types.Type.Development,
                Labels = { { "dev-label", "dev-label" } }
            };

            // The first cluster to be created within the instance.
            Cluster myCluster = new Cluster
            {
                // You can choose SSD or HDD storage type here: StorageType.Ssd or StorageType.Hdd.
                // Cluster storage type can not be changed after instance is created.
                // If not set will default to SSD type.
                DefaultStorageType     = StorageType.Hdd,
                LocationAsLocationName = new LocationName(projectId, zone),
            };

            // Initialize request argument(s).
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsProjectName = new ProjectName(projectId),
                Instance            = myInstance,
                InstanceId          = instanceId,
                // Must specify at lease one cluster.
                // Only PRODUCTION type instance can be created with more than one cluster.
                Clusters = { { "hdd-cluster", myCluster } }
            };

            try
            {
                // Make a request.
                Operation <Instance, CreateInstanceMetadata> createInstanceResponse =
                    bigtableInstanceAdminClient.CreateInstance(request);
                Console.WriteLine("Waiting for operation to complete...");

                // Poll until the returned long-running operation is complete
                Operation <Instance, CreateInstanceMetadata> completedResponse =
                    createInstanceResponse.PollUntilCompleted();
                // [END bigtable_create_dev_instance]
                Console.WriteLine(
                    $"Instance: {displayName} {(completedResponse.IsCompleted ? "was successfully created in " : "failed to create in ")}{projectId} project");
                PrintInstanceInfo(completedResponse.Result);
                // [START bigtable_create_dev_instance]
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception while creating {displayName} instance");
                Console.WriteLine(ex.Message);
            }
            // [END bigtable_create_dev_instance]
            return(0);
        }
 /// <summary>
 ///  创建实例
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public async Task <CreateInstanceResponse> CreateInstance(CreateInstanceRequest request)
 {
     return(await new CreateInstanceExecutor().Client(this).Execute <CreateInstanceResponse, CreateInstanceResult, CreateInstanceRequest>(request).ConfigureAwait(false));
 }
 /// <summary>
 ///  创建实例
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public CreateInstanceResponse CreateInstance(CreateInstanceRequest request)
 {
     return(new CreateInstanceExecutor().Client(this).Execute <CreateInstanceResponse, CreateInstanceResult, CreateInstanceRequest>(request));
 }
示例#23
0
        public static object CreateProdInstance(string displayName)
        {
            BigtableInstanceAdminClient bigtableInstanceAdminClient = BigtableInstanceAdminClient.Create();

            Console.WriteLine("Creating a PRODUCTION instance");
            // [START bigtable_create_prod_instance]
            // Creates a production instance with "<intanceId>-prod" instance ID,
            // with cluster ID "ssd-cluster1", 3 nodes and location us-east1-b.
            displayName += " Prod"; // Display name is for display purposes only. It doesn't have to equal instanceId and can be amended after instance is created.
            string instanceId = Regex.Replace(displayName, @"[^A-Za-z0-9_\.~]+", "-").ToLower();

            // Please refer to the link below for the full list of available locations:
            // https://cloud.google.com/bigtable/docs/locations
            string zone1 = "us-east1-b";

            // The instance to create.
            Instance myInstance = new Instance
            {
                DisplayName = displayName,
                // You can choose DEVELOPMENT or PRODUCTION type here.
                // If not set, will default to PRODUCTION type.
                // Instance type can be upgraded from DEVELOPMENT to PRODUCTION but cannot be dowgraded after the instance is created.
                Type   = Instance.Types.Type.Production,
                Labels = { { "prod-label", "prod-label" } }
            };

            // The first cluster to be created within the instance.
            Cluster myCluster1 = new Cluster
            {
                // You can choose SSD or HDD storage type here: StorageType.Ssd or StorageType.Hdd.
                // Cluster storage type can not be changed after the instance is created.
                // If not set will default to SSD type.
                DefaultStorageType     = StorageType.Ssd,
                LocationAsLocationName = new LocationName(projectId, zone1),
                // Serve Nodes count can only be set if PRODUCTION type instance is being created.
                // Minimum count of 3 serve nodes must be specified.
                // Serve Nodes count can be increased and decreased after an instance is created.
                ServeNodes = 3
            };

            // Initialize request argument(s).
            CreateInstanceRequest request = new CreateInstanceRequest
            {
                ParentAsProjectName = new ProjectName(projectId),
                Instance            = myInstance,
                InstanceId          = instanceId,
                // Must specify at lease one cluster.
                // Only PRODUCTION type instance can be created with more than one cluster.
                // Currently all clusters must have the same storage type.
                // Clusters must be set to different locations.
                Clusters = { { "ssd-cluster1", myCluster1 } }
            };

            try
            {
                // Make a request.
                Operation <Instance, CreateInstanceMetadata> createInstanceResponse =
                    bigtableInstanceAdminClient.CreateInstance(request);
                Console.WriteLine("Waiting for operation to complete...");

                // Poll until the returned long-running operation is complete
                Operation <Instance, CreateInstanceMetadata> completedResponse =
                    createInstanceResponse.PollUntilCompleted();
                // [END bigtable_create_prod_instance]
                Console.WriteLine(
                    $"Instance: {displayName} {(completedResponse.IsCompleted ? "was successfully created in " : "failed to create in ")}{projectId} project");
                PrintInstanceInfo(completedResponse.Result);
                // [START bigtable_create_prod_instance]
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception while creating {displayName} instance");
                Console.WriteLine(ex.Message);
            }
            // [END bigtable_create_prod_instance]
            return(0);
        }
        /*********************************************Flavors End********************************************************/


        /*******************************************Instances Start******************************************************/
        /// <summary>
        /// 创建实例
        /// </summary>
        public static void CreateInstance(DdsClient client)
        {
            CreateInstanceRequest req = new CreateInstanceRequest
            {
                /*Body = new CreateInstanceRequestBody
                 * {
                 *  Name = "dds-test",
                 *  Datastore = new CreateInstanceDatastoreOption()
                 *  {
                 *      Type = "DDS-Community",
                 *      Version = "3.4",
                 *      StorageEngine = "wiredTiger"
                 *  },
                 *  Region = "cn-guangzhou-1",
                 *  AvailabilityZone = "az2pod1gz",
                 *  VpcId = "50e61d1e-ac98-4f92-9505-bb1bfb01c84b",
                 *  SubnetId = "f5cfcd56-63ac-4dab-ae66-f7eb4cdd03b6",
                 *  SecurityGroupId = "f64c9fe9-2dbc-47ea-81cc-bea1c29e2c62",
                 *  Password = "******",
                 *  Mode = "Sharding",
                 *  Flavor = new List<CreateInstanceFlavorOption>
                 *  {
                 *      new CreateInstanceFlavorOption()
                 *      {
                 *          Type = "mongos",
                 *          Num = 2,
                 *          SpecCode = "dds.mongodb.s6.medium.4.mongos"
                 *      },
                 *      new CreateInstanceFlavorOption()
                 *      {
                 *          Type = "shard",
                 *          Num = 2,
                 *          Storage = "ULTRAHIGH",
                 *          Size = 10,
                 *          SpecCode = "dds.mongodb.s6.medium.4.shard"
                 *      },
                 *      new CreateInstanceFlavorOption()
                 *      {
                 *          Type = "config",
                 *          Num = 1,
                 *          Storage = "ULTRAHIGH",
                 *          Size = 20,
                 *          SpecCode = "dds.mongodb.s6.large.2.config"
                 *      }
                 *  },
                 *  BackupStrategy = new CreateInstanceBackupStrategyOption()
                 *  {
                 *      StartTime = "08:15-09:15",
                 *      KeepDays = "8"
                 *  },
                 *  Storage = new CreateInstanceStorageOption()
                 *  {
                 *      Size = 2
                 *  },
                 *  SslOption = "1"
                 * }*/
                Body = new CreateInstanceRequestBody
                {
                    Name      = "dds-test1",
                    Datastore = new CreateInstanceDatastoreOption()
                    {
                        Type          = CreateInstanceDatastoreOption.TypeEnum.DDS_COMMUNITY,
                        Version       = "3.4",
                        StorageEngine = CreateInstanceDatastoreOption.StorageEngineEnum.WIREDTIGER
                    },
                    Region           = "cn-guangzhou-1",
                    AvailabilityZone = "az2pod1gz",
                    VpcId            = "50e61d1e-ac98-4f92-9505-bb1bfb01c84b",
                    SubnetId         = "f5cfcd56-63ac-4dab-ae66-f7eb4cdd03b6",
                    SecurityGroupId  = "f64c9fe9-2dbc-47ea-81cc-bea1c29e2c62",
                    Password         = "******",
                    Mode             = "Single",
                    Flavor           = new List <CreateInstanceFlavorOption>
                    {
                        new CreateInstanceFlavorOption
                        {
                            Type     = CreateInstanceFlavorOption.TypeEnum.SINGLE,
                            Num      = 1,
                            Size     = 10,
                            SpecCode = "dds.mongodb.s6.medium.4.single"
                        },
                    },
                    BackupStrategy = new CreateInstanceBackupStrategyOption()
                    {
                        StartTime = "08:15-09:15",
                        KeepDays  = "8"
                    }
                }
            };

            try
            {
                CreateInstanceResponse resp = client.CreateInstance(req);
                Console.WriteLine(resp.Id);
                Console.WriteLine(resp.Name);
                // InstanceStatus means status in response body
                Console.WriteLine(resp.Status);
                Console.WriteLine("Create Instance Success!");
            }
            catch (RequestTimeoutException requestTimeoutException)
            {
                Console.WriteLine(requestTimeoutException.ErrorMessage);
            }
            catch (ServiceResponseException clientRequestException)
            {
                Console.WriteLine(clientRequestException.HttpStatusCode);
                Console.WriteLine(clientRequestException.ErrorCode);
                Console.WriteLine(clientRequestException.ErrorMsg);
            }
            catch (ConnectionException connectionException)
            {
                Console.WriteLine(connectionException.ErrorMessage);
            }
        }