private static void ConfigVirtualNetwork(ClusterCreateParameters cluster, HDInsight.ClusterCreateParametersV2 inputs)
        {
            // Check if the virtual network configuration is partially set
            if (string.IsNullOrEmpty(inputs.VirtualNetworkId) ^ string.IsNullOrEmpty(inputs.SubnetName))
            {
                if (inputs.VirtualNetworkId == null)
                {
                    throw new ArgumentException("Subnet name is set however virtual network GUID is not set.");
                }
                else
                {
                    throw new ArgumentException("Virtual newtork GUID is set however subnet name is not set.");
                }
            }

            // Set virtual network configuration if is provided in the input
            if (!string.IsNullOrEmpty(inputs.VirtualNetworkId) && !string.IsNullOrEmpty(inputs.SubnetName))
            {
                VirtualNetworkConfiguration virtualNetworkConf = new VirtualNetworkConfiguration();
                virtualNetworkConf.VirtualNetworkSite = inputs.VirtualNetworkId;
                foreach (var role in cluster.ClusterRoleCollection)
                {
                    AddressAssignment aa     = new AddressAssignment();
                    Subnet            subnet = new Subnet();
                    subnet.Name = inputs.SubnetName;
                    aa.Subnets.Add(subnet);
                    aa.Role = role;
                    virtualNetworkConf.AddressAssignments.Add(aa);
                }
                cluster.VirtualNetworkConfiguration = virtualNetworkConf;
            }
        }
        internal PsApiManagementVirtualNetwork(VirtualNetworkConfiguration vnetConfigurationResource)
            : this()
        {
            if (vnetConfigurationResource == null)
            {
                throw new ArgumentNullException("vnetConfigurationResource");
            }

            Location         = vnetConfigurationResource.Location;
            SubnetResourceId = vnetConfigurationResource.SubnetResourceId;
        }
Example #3
0
        internal PsApiManagementVirtualNetwork(VirtualNetworkConfiguration vnetConfigurationResource)
            : this()
        {
            if (vnetConfigurationResource == null)
            {
                throw new ArgumentNullException("vnetConfigurationResource");
            }

            SubnetResourceId = vnetConfigurationResource.SubnetResourceId;
            SubnetName       = vnetConfigurationResource.Subnetname;
            Guid vnetId;

            if (Guid.TryParse(vnetConfigurationResource.Vnetid, out vnetId))
            {
                this.VnetId = vnetId;
            }
        }
        public static ClusterDetails CreateClusterDetailsFromGetClustersResult(Cluster clusterDetailsFromServer)
        {
            if (clusterDetailsFromServer == null)
            {
                throw new ArgumentNullException("clusterDetailsFromServer");
            }

            ClusterDetails clusterDetails = new ClusterDetails();

            clusterDetails.CreatedDate  = clusterDetailsFromServer.CreatedTime;
            clusterDetails.Location     = clusterDetailsFromServer.Location;
            clusterDetails.Name         = clusterDetailsFromServer.DnsName;
            clusterDetails.Version      = clusterDetailsFromServer.Version;
            clusterDetails.StateString  = clusterDetailsFromServer.State.ToString();
            clusterDetails.DeploymentId = clusterDetailsFromServer.DeploymentId ?? 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);
            }

            string componentListCommaSeperated = clusterDetailsFromServer.Components != null
                                                     ? string.Join(",", clusterDetailsFromServer.Components.Select(c => c.GetType().Name))
                                                     : string.Empty;

            clusterDetails.ClusterType = !string.IsNullOrEmpty(componentListCommaSeperated)
                                        ? GetClusterTypeFromComponentList(componentListCommaSeperated)
                                        : ClusterType.Unknown;

            // This code will only execute for PaaS clusters which only support Windows
            clusterDetails.OSType = OSType.Windows;

            if (clusterDetailsFromServer.Error != null)
            {
                //Populate error details with the most recent one. These occur if the deployment workflow errors out
                clusterDetails.Error = new ClusterErrorStatus(
                    (int)clusterDetailsFromServer.Error.StatusCode, clusterDetailsFromServer.Error.ErrorMessage ?? string.Empty, string.Empty);
            }

            //Populate Uri and HttpCreds from the gateway. This should not throw
            //even if the gateway component is null
            PopulateClusterUriAndHttpCredsFromGateway(clusterDetails, clusterDetailsFromServer.Components.OfType <GatewayComponent>().SingleOrDefault());

            //Look for Yarn for 3X clusters
            var yarn = clusterDetailsFromServer.Components.OfType <YarnComponent>().SingleOrDefault();
            //Look for MR for 2X clusters
            var mr = clusterDetailsFromServer.Components.OfType <MapReduceComponent>().SingleOrDefault();

            if (yarn != null)
            {
                clusterDetails.ClusterSizeInNodes = yarn.NodeManagerRole.InstanceCount;
                var mapReduceApplication = yarn.Applications.OfType <MapReduceApplication>().SingleOrDefault();
                if (mapReduceApplication != null)
                {
                    //ToWasbConfiguration returns null if DefaultStorageAccountAndContainer is null
                    clusterDetails.DefaultStorageAccount = mapReduceApplication.DefaultStorageAccountAndContainer.ToWabStorageAccountConfiguration();
                    if (mapReduceApplication.AdditionalStorageContainers != null)
                    {
                        clusterDetails.AdditionalStorageAccounts =
                            mapReduceApplication.AdditionalStorageContainers.Select(s => s.ToWabStorageAccountConfiguration()).ToList();
                    }
                }
            }
            else if (mr != null)
            {
                clusterDetails.ClusterSizeInNodes    = mr.WorkerNodeRole.InstanceCount;
                clusterDetails.DefaultStorageAccount = mr.DefaultStorageAccountAndContainer.ToWabStorageAccountConfiguration();
                if (mr.AdditionalStorageAccounts != null)
                {
                    clusterDetails.AdditionalStorageAccounts = mr.AdditionalStorageAccounts.Select(s => s.ToWabStorageAccountConfiguration()).ToList();
                }
            }

            //populate RDP user name. All roles will have the same RDP properties so we pick the first one
            if (clusterDetailsFromServer.ClusterRoleCollection != null &&
                clusterDetailsFromServer.ClusterRoleCollection.Any() &&
                clusterDetailsFromServer.ClusterRoleCollection.First().RemoteDesktopSettings.IsEnabled)
            {
                clusterDetails.RdpUserName =
                    clusterDetailsFromServer.ClusterRoleCollection.First().RemoteDesktopSettings.AuthenticationCredential.Username;
            }

            //populate virtual network info
            VirtualNetworkConfiguration vnetConfigFromServer = clusterDetailsFromServer.VirtualNetworkConfiguration;

            if (vnetConfigFromServer != null && !string.IsNullOrEmpty(vnetConfigFromServer.VirtualNetworkSite))
            {
                clusterDetails.VirtualNetworkId = vnetConfigFromServer.VirtualNetworkSite;
                //Populate the subnet name
                if (vnetConfigFromServer.AddressAssignments != null &&
                    vnetConfigFromServer.AddressAssignments.Any() &&
                    vnetConfigFromServer.AddressAssignments.First().Subnets != null &&
                    vnetConfigFromServer.AddressAssignments.First().Subnets.First() != null)
                {
                    if (vnetConfigFromServer.AddressAssignments.Any())
                    {
                        clusterDetails.SubnetName = vnetConfigFromServer.AddressAssignments.First().Subnets.First().Name;
                    }
                }
            }

            return(clusterDetails);
        }