/// <summary> /// Converts user supplied cluster create parameters to IaasCluster type as understood by the Resource Provider. /// </summary> /// <param name="clusterCreateParameters">User supplied cluster create parameters.</param> /// <param name="userSubscriptionId">User's subscription Id.</param> /// <returns>An Instance of IaasCluster</returns> public static IaasCluster ConvertToIaasCluster(ClusterCreateParametersV2 clusterCreateParameters, string userSubscriptionId) { if (clusterCreateParameters == null) { throw new ArgumentNullException("clusterCreateParameters"); } if (String.IsNullOrEmpty(userSubscriptionId)) { throw new ArgumentNullException("userSubscriptionId"); } var correlationId = Guid.NewGuid().ToString(); var iaasCluster = new IaasCluster() { Id = clusterCreateParameters.Name, Location = clusterCreateParameters.Location, ApiVersion = "1.0", UserSubscriptionId = userSubscriptionId, UserTags = new Dictionary <string, string>(), HdiVersion = clusterCreateParameters.Version, DeploymentDocuments = new Dictionary <string, string>() { { IaasClusterDocumentTypes.EmbeddedAmbariConfigurationDocument, GenerateAmbariConfigurationDocument(clusterCreateParameters) }, { IaasClusterDocumentTypes.EmbeddedAzureConfigurationDocument, GenerateAzureDocument(clusterCreateParameters) } } }; iaasCluster.UserTags.Add("Client", string.Format("HDInsight .Net SDK {0}", Assembly.GetExecutingAssembly().GetName().Version.ToString())); return(iaasCluster); }
internal GetIaasClusterResult(ClusterDetails clusterDetails, IaasCluster resultOfGetClusterCall) { if (clusterDetails == null) { throw new ArgumentNullException("clusterDetails"); } this.clusterDetails = clusterDetails; this.resultOfGetClusterCall = resultOfGetClusterCall; }
private async Task <GetIaasClusterResult> GetIaasClusterFromCloudServiceResource(CloudService cloudService, Resource clusterResource) { var clusterDetails = PayloadConverterIaasClusters.CreateClusterDetailsFromRdfeResourceOutput(cloudService.GeoRegion, clusterResource); HDInsight.ClusterState clusterState = clusterDetails.State; IaasCluster clusterFromGetClusterCall = null; if (clusterState != HDInsight.ClusterState.Deleting && clusterState != HDInsight.ClusterState.DeletePending) { //we want to poll if we are either in error or unknown state. //this is so that we can get the extended error information. try { PassthroughResponse response = await this.rdfeRestClient.GetCluster( this.credentials.SubscriptionId.ToString(), this.GetCloudServiceName(cloudService.GeoRegion), this.credentials.DeploymentNamespace, clusterResource.Name, this.Context.CancellationToken); clusterFromGetClusterCall = this.SafeGetDataFromPassthroughResponse <IaasCluster>(response); clusterDetails = PayloadConverterIaasClusters.CreateClusterDetailsFromGetClustersResult(clusterFromGetClusterCall); } catch (Exception) { // Ignore all exceptions. We don't want ListContainers to fail on customers for whatever reason. // If there is an issue with obtaining details about the cluster, mark the cluster in Error state with a generic error message clusterDetails.State = ClusterState.Error; if (clusterDetails.Error != null && string.IsNullOrEmpty(clusterDetails.Error.Message)) { clusterDetails.Error.Message = "Unexpected error occurred. Could not retrieve details about the cluster."; } } } clusterDetails.SubscriptionId = this.credentials.SubscriptionId; return(new GetIaasClusterResult(clusterDetails, clusterFromGetClusterCall)); }
/// <summary> /// Creates the rdfe resource input from wire input. /// This method wraps what is needed by the RP within a RDFE resource input object. /// </summary> /// <param name="iaasCluster">The Iaas cluster as needed by the RP.</param> /// <param name="schemaVersion">The schema version for the RDFE resource.</param> /// <returns>An RDFE Resource input from wire create parameters.</returns> /// <exception cref="System.ArgumentNullException">Thrown if wireCreateParameters is null.</exception> public static RDFEResource CreateRdfeResource(IaasCluster iaasCluster, string schemaVersion) { if (iaasCluster == null) { throw new ArgumentNullException("createIaasClusterRequest"); } if (schemaVersion == null) { throw new ArgumentNullException("schemaVersion"); } var rdfeResource = new RDFEResource { SchemaVersion = schemaVersion, IntrinsicSettings = new XmlNode[] { SerializeToXmlNode(iaasCluster) } }; return(rdfeResource); }
public static ClusterDetails CreateClusterDetailsFromGetClustersResult(IaasCluster clusterDetailsFromServer) { if (clusterDetailsFromServer == null) { throw new ArgumentNullException("clusterDetailsFromServer"); } ClusterDetails clusterDetails = new ClusterDetails(); clusterDetails.CreatedDate = clusterDetailsFromServer.CreatedDate; clusterDetails.Location = clusterDetailsFromServer.Location; clusterDetails.Name = clusterDetailsFromServer.Id; clusterDetails.Version = clusterDetailsFromServer.HdiVersion; clusterDetails.StateString = clusterDetailsFromServer.State.ToString(); clusterDetails.DeploymentId = clusterDetailsFromServer.TenantId.ToString() ?? string.Empty; if (!string.IsNullOrEmpty(clusterDetails.Version)) { clusterDetails.VersionNumber = new PayloadConverter().ConvertStringToVersion(clusterDetails.Version); clusterDetails.VersionStatus = VersionFinderClient.GetVersionStatus(clusterDetails.Version); } else { clusterDetails.VersionNumber = new Version(0, 0); } clusterDetails.Version = clusterDetails.VersionNumber.ToString(); // TODO: Determine this from the documents? clusterDetails.ClusterType = ClusterType.Hadoop; // This code will only run for IaasCluster which only supports Linux today // We would need to put this information in one of the documents at some point clusterDetails.OSType = OSType.Linux; if (clusterDetailsFromServer.Errors != null && clusterDetailsFromServer.Errors.Any()) { // Populate error details with the most recent one. These occur if the deployment workflow errors out string errorDescription = string.Join(", ", clusterDetailsFromServer.Errors.Select(x => string.Format("{0} : {1}", x.ErrorCode, x.ErrorDescription))); clusterDetails.Error = new ClusterErrorStatus(0, errorDescription, string.Empty); } AzureCsmDocumentManager azureCsmDocumentManager = new AzureCsmDocumentManager(clusterDetailsFromServer.DeploymentDocuments[IaasClusterDocumentTypes.EmbeddedAzureConfigurationDocument]); AmbariConfigurationDocumentManager ambariConfigurationDocumentManager = new AmbariConfigurationDocumentManager(clusterDetailsFromServer.DeploymentDocuments[IaasClusterDocumentTypes.EmbeddedAmbariConfigurationDocument]); // Populate user name, passowrd, and server address information clusterDetails.HttpUserName = "******"; clusterDetails.HttpPassword = ambariConfigurationDocumentManager.GetPassword(); if (clusterDetailsFromServer.ConnectivityEndpoints != null) { foreach (var endpoint in clusterDetailsFromServer.ConnectivityEndpoints) { var webEndPoint = endpoint as WebConnectivityEndpoint; if (webEndPoint != null) { clusterDetails.ConnectionUrl = String.Format("https://{0}{1}", webEndPoint.Location, webEndPoint.Port > 0 ? String.Format(":{0}", webEndPoint.Port) : ""); break; } } } clusterDetails.DefaultStorageAccount = ambariConfigurationDocumentManager.GetDefaultStorageAccount(); // Populate additional Storage Accounts clusterDetails.AdditionalStorageAccounts = ambariConfigurationDocumentManager.GetAdditionalStorageAccounts(); // Populate Data Node Count clusterDetails.ClusterSizeInNodes = azureCsmDocumentManager.GetWorkerNodeCount(); return(clusterDetails); }