private async Task <ClusterDetails> CreateIaasClusterAsync(ClusterCreateParametersV2 clusterCreateParameters) { if (clusterCreateParameters == null) { throw new ArgumentNullException("clusterCreateParameters"); } // Validate cluster creation parameters clusterCreateParameters.ValidateClusterCreateParameters(); this.LogMessage("Validating Cluster Versions", Severity.Informational, Verbosity.Detailed); await this.ValidateClusterVersion(clusterCreateParameters); IHDInsightManagementPocoClient client = this.CreateIaasClustersPocoClient(this.capabilities.Value); // listen to cluster provisioning events on the POCO client. client.ClusterProvisioning += this.RaiseClusterProvisioningEvent; Exception requestException = null; // Creates a cluster and waits for it to complete try { this.LogMessage("Sending Cluster Create Request", Severity.Informational, Verbosity.Detailed); await client.CreateContainer(clusterCreateParameters); } catch (Exception ex) { ex = ex.GetFirstException(); var hlex = ex as HttpLayerException; var httpEx = ex as HttpRequestException; var webex = ex as WebException; if (hlex.IsNotNull() || httpEx.IsNotNull() || webex.IsNotNull()) { requestException = ex; if (hlex.IsNotNull()) { HandleCreateHttpLayerException(clusterCreateParameters, hlex); } } else { throw; } } await client.WaitForClusterInConditionOrError(this.HandleClusterWaitNotifyEvent, clusterCreateParameters.Name, clusterCreateParameters.Location, clusterCreateParameters.CreateTimeout, this.PollingInterval, this.Context, ClusterState.Operational, ClusterState.Running); // Validates that cluster didn't get on error state var result = this.currentDetails; if (result == null) { if (requestException != null) { throw requestException; } throw new HDInsightClusterCreateException("Attempting to return the newly created cluster returned no cluster. The cluster could not be found."); } if (result.Error != null) { throw new HDInsightClusterCreateException(result); } return(result); }
public Task CreateContainer(ClusterCreateParameters details) { this.LastCreateRequest = details; return(underlying.CreateContainer(details)); }