private static string ClusterToString(Cluster cluster)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("\r\n\tResourceGroup: {0}\r\n", HDInsightManagementCLIHelpers.GetResourceGroupNameFromClusterId(cluster.Id));
            sb.AppendFormat("\t{0}\r\n", cluster.ToDisplayString().Replace("\n", "\n\t"));
            sb.AppendFormat("\tUserClusterTablePrefix: {0}\r\n", HDInsightManagementCLIHelpers.GetUserClusterTablePrefix(cluster));
            return(sb.ToString());
        }
        static void Create(string subscriptionId, string resourceGroupName, string clusterDnsName, string clusterLocation,
                           AzureStorageConfig defaultStorageAccount, int clusterSize, string clusterUsername, string clusterPassword,
                           string hdInsightVersion,
                           string clusterType, string osType,
                           List <AzureStorageConfig> additionalStorageAccounts,
                           List <SqlAzureConfig> sqlAzureMetaStores,
                           string virtualNetworkId = null, string subnetName     = null,
                           string headNodeSize     = null, string workerNodeSize = null, string zookeeperSize = null)
        {
            Logger.InfoFormat("ResourceGroup: {0}, Cluster: {1} - Submitting a new cluster deployment request", resourceGroupName, clusterDnsName);

            var clusterCreateParameters = new ClusterCreateParameters()
            {
                ClusterSizeInNodes        = clusterSize,
                ClusterType               = clusterType,
                DefaultStorageAccountName = defaultStorageAccount.Name,
                DefaultStorageAccountKey  = defaultStorageAccount.Key,
                DefaultStorageContainer   = defaultStorageAccount.Container,
                Location          = clusterLocation,
                Password          = clusterPassword,
                UserName          = clusterUsername,
                Version           = hdInsightVersion,
                OSType            = (OSType)Enum.Parse(typeof(OSType), osType.ToString()),
                HeadNodeSize      = headNodeSize,
                WorkerNodeSize    = workerNodeSize,
                ZookeeperNodeSize = zookeeperSize
            };

            if (clusterCreateParameters.OSType == OSType.Linux)
            {
                clusterCreateParameters.SshUserName = config.SshUsername;
                if (!String.IsNullOrWhiteSpace(config.SshPassword))
                {
                    clusterCreateParameters.SshPassword = config.SshPassword;
                }
                else if (File.Exists(config.SshPublicKeyFilePath))
                {
                    var publicKey = File.ReadAllText(config.SshPublicKeyFilePath);
                    Logger.Debug("SSH RSA Public Key: " + Environment.NewLine + publicKey + Environment.NewLine);
                    clusterCreateParameters.SshPublicKey = publicKey;
                }
                else if (String.IsNullOrWhiteSpace(config.SshPassword))
                {
                    clusterCreateParameters.SshPassword = config.ClusterPassword;
                }
            }
            else
            {
                if (config.AutoEnableRdp)
                {
                    clusterCreateParameters.RdpUsername     = config.RdpUsername;
                    clusterCreateParameters.RdpPassword     = config.RdpPassword;
                    clusterCreateParameters.RdpAccessExpiry = DateTime.Now.AddDays(int.Parse(config.RdpExpirationInDays));
                }
            }

            foreach (var additionalStorageAccount in additionalStorageAccounts)
            {
                clusterCreateParameters.AdditionalStorageAccounts.Add(additionalStorageAccount.Name, additionalStorageAccount.Key);
            }


            if (!String.IsNullOrEmpty(virtualNetworkId) && !String.IsNullOrEmpty(subnetName))
            {
                clusterCreateParameters.VirtualNetworkId = virtualNetworkId;
                clusterCreateParameters.SubnetName       = subnetName;
            }

            if (sqlAzureMetaStores != null && sqlAzureMetaStores.Count > 0)
            {
                var hiveMetastore = sqlAzureMetaStores.FirstOrDefault(s => s.Type.Equals("HiveMetastore"));
                if (hiveMetastore != null)
                {
                    clusterCreateParameters.HiveMetastore =
                        new Metastore(hiveMetastore.Server, hiveMetastore.Database, hiveMetastore.User, hiveMetastore.Password);
                }

                var oozieMetastore = sqlAzureMetaStores.FirstOrDefault(s => s.Type.Equals("OozieMetastore"));
                if (oozieMetastore != null)
                {
                    clusterCreateParameters.OozieMetastore =
                        new Metastore(oozieMetastore.Server, oozieMetastore.Database, oozieMetastore.User, oozieMetastore.Password);
                }
            }

            var localStopWatch = Stopwatch.StartNew();

            var createTask = hdInsightManagementClient.Clusters.CreateAsync(resourceGroupName, clusterDnsName, clusterCreateParameters);

            Logger.InfoFormat("Cluster: {0} - Create cluster request submitted with task id: {1}, task status: {2}",
                              clusterDnsName, createTask.Id, createTask.Status);

            Thread.Sleep(pollInterval);

            var error = MonitorCreate(resourceGroupName, clusterDnsName, createTask);

            if (error)
            {
                if (config.CleanupOnError)
                {
                    Logger.InfoFormat("{0} - {1}. Submitting a delete request for the failed cluster creation.", Config.ConfigName.CleanupOnError.ToString(), config.CleanupOnError.ToString());
                    Delete(resourceGroupName, clusterDnsName);
                }
                else
                {
                    throw new ApplicationException(String.Format("Cluster: {0} - Creation unsuccessful", clusterDnsName));
                }
            }
            else
            {
                if (config.AutoEnableRdp && clusterCreateParameters.OSType == OSType.Windows)
                {
                    HDInsightManagementCLIHelpers.CreateRdpFile(clusterDnsName, config.RdpUsername, config.RdpPassword);
                }
            }
        }
 private static void EnableRdp(string resourceGroup, string ClusterDnsName, string rdpUserName, string rdpPassword, DateTime rdpExpiry)
 {
     Logger.InfoFormat("Enabling Rdp - ResourceGroup: {0}, Cluster: {1}", resourceGroup, ClusterDnsName);
     hdInsightManagementClient.Clusters.EnableRdp(resourceGroup, ClusterDnsName, rdpUserName, rdpPassword, rdpExpiry);
     HDInsightManagementCLIHelpers.CreateRdpFile(ClusterDnsName, rdpUserName, rdpPassword);
 }