/// <summary>
        /// Provisions the entry point Couchbase server node.
        /// </summary>
        /// <param name="hostname">The hostname.</param>
        /// <param name="defaultSettings">The default settings.</param>
        /// <param name="dataRamQuota">The data ram quota.</param>
        /// <param name="indexRamQuota">The index ram quota.</param>
        /// <returns></returns>
        public async Task <CompositeResult> ProvisionEntryPointAsync(string hostname = null, BucketSettings defaultSettings = null, uint dataRamQuota = 544, uint indexRamQuota = 256)
        {
            hostname        = hostname ?? _cluster.Configuration.Servers.First().Host;
            defaultSettings = defaultSettings ?? new BucketSettings();

            var compositeResults = new CompositeResult();

            try
            {
                var result = await _clusterManager.InitializeClusterAsync(hostname);

                compositeResults.Add(result);

                if (compositeResults.Success)
                {
                    result = await _clusterManager.RenameNodeAsync(hostname);

                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.ConfigureMemoryAsync(hostname, dataRamQuota, indexRamQuota);

                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.SetupServicesAsync(hostname, defaultSettings.Services);

                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.ConfigureAdminAsync(hostname);

                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.CreateBucketAsync(defaultSettings);

                    compositeResults.Add(result);
                }
            }
            catch (Exception e)
            {
                compositeResults.Add(new DefaultResult(false, e.Message, e));
            }
            return(compositeResults);
        }
        /// <summary>
        /// Provisions the entry point Couchbase server node.
        /// </summary>
        /// <param name="hostname">The hostname.</param>
        /// <param name="defaultSettings">The default settings.</param>
        /// <param name="dataRamQuota">The data ram quota.</param>
        /// <param name="indexRamQuota">The index ram quota.</param>
        /// <returns></returns>
        public async Task<CompositeResult> ProvisionEntryPointAsync(string hostname = null, BucketSettings defaultSettings = null, uint dataRamQuota = 544, uint indexRamQuota = 256)
        {
            hostname = hostname ?? _cluster.Configuration.Servers.First().Host;
            defaultSettings = defaultSettings ?? new BucketSettings();

            var compositeResults = new CompositeResult();
            try
            {
                var result = await _clusterManager.InitializeClusterAsync(hostname);
                compositeResults.Add(result);

                if (compositeResults.Success)
                {
                    result = await _clusterManager.RenameNodeAsync(hostname);
                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.ConfigureMemoryAsync(hostname, dataRamQuota, indexRamQuota);
                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.SetupServicesAsync(hostname, defaultSettings.Services);
                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.ConfigureAdminAsync(hostname);
                    compositeResults.Add(result);
                }
                if (compositeResults.Success)
                {
                    result = await _clusterManager.CreateBucketAsync(defaultSettings);
                    compositeResults.Add(result);
                }
            }
            catch (Exception e)
            {
                compositeResults.Add(new DefaultResult(false, e.Message, e));
            }
            return compositeResults;
        }
 /// <summary>
 /// Provisions the nodes defined in the ClientConfiguration.Servers list, skipping
 /// the first node which is the entry point (EP).
 /// </summary>
 /// <returns></returns>
 public async Task<CompositeResult> ProvisionNodesAsync(params CouchbaseService[] services)
 {
     var compositeResult = new CompositeResult();
     var nodes = _cluster.Configuration.Servers;
     if (nodes.Count < 2)
     {
         var ioe = new InvalidOperationException(
                 "Not enough nodes defined in ClientConfiguration.Servers to provision the cluster");
         compositeResult.Add(new DefaultResult(false, ioe.Message, ioe));
     }
     if (compositeResult.Success)
     {
         //skip the first node which is the EP
         var tasks = nodes.Skip(1).Select(node => _clusterManager.AddNodeAsync(node.Host, services)).ToList();
         var results = await Task.WhenAll(tasks);
         foreach (var r in results)
         {
             compositeResult.Add(r);
         }
     }
     return compositeResult;
 }
        /// <summary>
        /// Provisions the nodes defined in the ClientConfiguration.Servers list, skipping
        /// the first node which is the entry point (EP).
        /// </summary>
        /// <returns></returns>
        public async Task <CompositeResult> ProvisionNodesAsync(params CouchbaseService[] services)
        {
            var compositeResult = new CompositeResult();
            var nodes           = _cluster.Configuration.Servers;

            if (nodes.Count < 2)
            {
                var ioe = new InvalidOperationException(
                    "Not enough nodes defined in ClientConfiguration.Servers to provision the cluster");
                compositeResult.Add(new DefaultResult(false, ioe.Message, ioe));
            }
            if (compositeResult.Success)
            {
                //skip the first node which is the EP
                var tasks   = nodes.Skip(1).Select(node => _clusterManager.AddNodeAsync(node.Host, services)).ToList();
                var results = await Task.WhenAll(tasks);

                foreach (var r in results)
                {
                    compositeResult.Add(r);
                }
            }
            return(compositeResult);
        }