public override void ExecuteCmdlet()
        {
            if (ShouldProcess(target: this.Name, action: string.Format("Restart node(s) {0}, from node type {1} on cluster {2}", string.Join(", ", this.NodeName), this.Name, this.ClusterName)))
            {
                try
                {
                    var actionParams         = new NodeTypeActionParameters(nodes: this.NodeName, force: this.ForceRestart.IsPresent);
                    var beginRequestResponse = this.SFRPClient.NodeTypes.BeginRestartWithHttpMessagesAsync(
                        this.ResourceGroupName,
                        this.ClusterName,
                        this.Name,
                        actionParams).GetAwaiter().GetResult();

                    this.PollLongRunningOperation(beginRequestResponse);

                    if (this.PassThru)
                    {
                        WriteObject(true);
                    }
                }
                catch (Exception ex)
                {
                    PrintSdkExceptionDetail(ex);
                    throw;
                }
            }
        }
        public override void ExecuteCmdlet()
        {
            try
            {
                this.SetParams();
                NodeType updatedNodeTypeParams = null;
                switch (ParameterSetName)
                {
                case ReimageByName:
                case ReimageById:
                case ReimageByObj:
                    if (ShouldProcess(target: this.Name, action: string.Format("Reimage node(s) {0}, from node type {1} on cluster {2}", string.Join(", ", this.NodeName), this.Name, this.ClusterName)))
                    {
                        var actionParams         = new NodeTypeActionParameters(nodes: this.NodeName, force: this.ForceReimage.IsPresent);
                        var beginRequestResponse = this.SFRPClient.NodeTypes.BeginReimageWithHttpMessagesAsync(
                            this.ResourceGroupName,
                            this.ClusterName,
                            this.Name,
                            actionParams).GetAwaiter().GetResult();

                        this.PollLongRunningOperation(beginRequestResponse);
                    }

                    if (this.PassThru)
                    {
                        WriteObject(true);
                    }

                    return;

                case WithParamsByName:
                case WithParamsById:
                    updatedNodeTypeParams = this.GetUpdatedNodeTypeParams();
                    break;

                case ByObj:
                    updatedNodeTypeParams = this.InputObject;
                    break;

                default:
                    throw new ArgumentException("Invalid parameter set", ParameterSetName);
                }

                if (ShouldProcess(target: this.Name, action: string.Format("Update node type name {0}, cluster: {1}", this.Name, this.ClusterName)))
                {
                    var beginRequestResponse = this.SFRPClient.NodeTypes.BeginCreateOrUpdateWithHttpMessagesAsync(this.ResourceGroupName, this.ClusterName, this.Name, updatedNodeTypeParams)
                                               .GetAwaiter().GetResult();

                    var nodeType = this.PollLongRunningOperation(beginRequestResponse);

                    WriteObject(new PSManagedNodeType(nodeType), false);
                }
            }
            catch (Exception ex)
            {
                PrintSdkExceptionDetail(ex);
                throw;
            }
        }
Example #3
0
        public void NodeTypeNodeOperationsTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                var serviceFabricClient = GetServiceFabricClient(context);
                var resourceClient      = GetResourceManagementClient(context);
                var resourceGroupName   = TestUtilities.GenerateName(ResourceGroupPrefix);
                var clusterName         = TestUtilities.GenerateName(ClusterNamePrefix);
                var nodeTypeName        = TestUtilities.GenerateName("nt");

                try
                {
                    serviceFabricClient.ManagedClusters.Get(resourceGroupName, clusterName);
                    serviceFabricClient.ManagedClusters.Delete(resourceGroupName, clusterName);
                    TestUtilities.Wait(TimeSpan.FromSeconds(10));
                }
                catch (ErrorModelException e)
                {
                    Assert.True(e.Response.StatusCode == System.Net.HttpStatusCode.NotFound);
                }

                var cluster = this.CreateManagedCluster(resourceClient, serviceFabricClient, resourceGroupName, Location, clusterName, sku: "Basic");
                cluster = serviceFabricClient.ManagedClusters.Get(resourceGroupName, clusterName);
                Assert.NotNull(cluster);
                Assert.Equal("Succeeded", cluster.ProvisioningState);
                Assert.Equal("WaitingForNodes", cluster.ClusterState);

                // add primary node type
                var primaryNodeType = this.CreateNodeType(serviceFabricClient, resourceGroupName, clusterName, nodeTypeName, isPrimary: true, vmInstanceCount: 7);

                var postParams = new NodeTypeActionParameters()
                {
                    Nodes = new List <string>()
                    {
                        $"{nodeTypeName}_3",
                        $"{nodeTypeName}_4"
                    }
                };

                // Restart nodes
                serviceFabricClient.NodeTypes.Restart(resourceGroupName, clusterName, nodeTypeName, postParams);
                primaryNodeType = serviceFabricClient.NodeTypes.Get(resourceGroupName, clusterName, nodeTypeName);
                Assert.Equal(7, primaryNodeType.VmInstanceCount);

                // Delete nodes
                serviceFabricClient.NodeTypes.DeleteNode(resourceGroupName, clusterName, nodeTypeName, postParams);
                primaryNodeType = serviceFabricClient.NodeTypes.Get(resourceGroupName, clusterName, nodeTypeName);
                Assert.True(primaryNodeType.IsPrimary);

                serviceFabricClient.ManagedClusters.Delete(resourceGroupName, clusterName);
                Assert.Throws <ErrorModelException>(() => serviceFabricClient.ManagedClusters.Get(resourceGroupName, clusterName));
            }
        }
        public override void ExecuteCmdlet()
        {
            try
            {
                this.SetParams();
                switch (ParameterSetName)
                {
                case DeleteNodeByName:
                case DeleteNodeByObj:
                case DeleteNodeById:
                    if (ShouldProcess(target: this.Name, action: string.Format("Delete node(s) {0}, from node type {1} on cluster {2}", string.Join(", ", this.NodeName), this.Name, this.ClusterName)))
                    {
                        var actionParams         = new NodeTypeActionParameters(nodes: this.NodeName, force: this.ForceRemoveNode.IsPresent);
                        var beginRequestResponse = this.SFRPClient.NodeTypes.BeginDeleteNodeWithHttpMessagesAsync(
                            this.ResourceGroupName,
                            this.ClusterName,
                            this.Name,
                            actionParams).GetAwaiter().GetResult();

                        this.PollLongRunningOperation(beginRequestResponse);
                    }

                    break;

                case DeleteNodeTypeByName:
                case DeleteNodeTypeByObj:
                case DeleteNodeTypeById:
                    if (ShouldProcess(target: this.Name, action: string.Format("Remove node type: {0} on cluster {1}, resource group {2}", this.Name, this.ClusterName, this.ResourceGroupName)))
                    {
                        var beginRequestResponse = this.SFRPClient.NodeTypes.BeginDeleteWithHttpMessagesAsync(
                            this.ResourceGroupName,
                            this.ClusterName,
                            this.Name).GetAwaiter().GetResult();

                        this.PollLongRunningOperation(beginRequestResponse);
                    }

                    break;
                }

                if (this.PassThru)
                {
                    WriteObject(true);
                }
            }
            catch (Exception ex)
            {
                PrintSdkExceptionDetail(ex);
                throw;
            }
        }
Example #5
0
        public void NodeTypeNodeOperationsTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                var serviceFabricMcClient = GetServiceFabricMcClient(context);
                var resourceClient        = GetResourceManagementClient(context);
                var resourceGroupName     = TestUtilities.GenerateName(ResourceGroupPrefix);
                var clusterName           = TestUtilities.GenerateName(ClusterNamePrefix);
                var nodeTypeName          = TestUtilities.GenerateName("nt");

                var ex = Assert.ThrowsAsync <ErrorModelException>(
                    () => serviceFabricMcClient.ManagedClusters.GetAsync(resourceGroupName, clusterName)).Result;
                Assert.True(ex.Response.StatusCode == System.Net.HttpStatusCode.NotFound);
                ex = Assert.ThrowsAsync <ErrorModelException>(
                    () => serviceFabricMcClient.ManagedClusters.DeleteAsync(resourceGroupName, clusterName)).Result;
                Assert.True(ex.Response.StatusCode == System.Net.HttpStatusCode.NotFound);

                var cluster = this.CreateManagedCluster(resourceClient, serviceFabricMcClient, resourceGroupName, Location, clusterName, sku: "Basic");
                cluster = serviceFabricMcClient.ManagedClusters.Get(resourceGroupName, clusterName);
                Assert.NotNull(cluster);
                Assert.Equal("Succeeded", cluster.ProvisioningState);
                Assert.Equal("WaitingForNodes", cluster.ClusterState);

                // add primary node type
                var primaryNodeType = this.CreateNodeType(serviceFabricMcClient, resourceGroupName, clusterName, nodeTypeName, isPrimary: true, vmInstanceCount: 6);

                var restartParams = new NodeTypeActionParameters()
                {
                    Nodes = new List <string>()
                    {
                        $"{nodeTypeName}_3"
                    }
                };

                // wait for baseline upgrade to finish
                this.WaitForClusterReadyState(serviceFabricMcClient, resourceGroupName, clusterName);

                // Restart nodes
                serviceFabricMcClient.NodeTypes.Restart(resourceGroupName, clusterName, nodeTypeName, restartParams);
                primaryNodeType = serviceFabricMcClient.NodeTypes.Get(resourceGroupName, clusterName, nodeTypeName);
                Assert.Equal(6, primaryNodeType.VmInstanceCount);

                var deleteParams = new NodeTypeActionParameters()
                {
                    Nodes = new List <string>()
                    {
                        $"{nodeTypeName}_0"
                    }
                };

                // Delete nodes
                serviceFabricMcClient.NodeTypes.DeleteNode(resourceGroupName, clusterName, nodeTypeName, deleteParams);
                primaryNodeType = serviceFabricMcClient.NodeTypes.Get(resourceGroupName, clusterName, nodeTypeName);
                Assert.True(primaryNodeType.IsPrimary);

                var reimageParams = new NodeTypeActionParameters()
                {
                    Nodes = new List <string>()
                    {
                        $"{nodeTypeName}_3"
                    }
                };

                // Reimage nodes
                serviceFabricMcClient.NodeTypes.Reimage(resourceGroupName, clusterName, nodeTypeName, reimageParams);
                primaryNodeType = serviceFabricMcClient.NodeTypes.Get(resourceGroupName, clusterName, nodeTypeName);
                Assert.True(primaryNodeType.IsPrimary);

                serviceFabricMcClient.ManagedClusters.Delete(resourceGroupName, clusterName);
                Assert.ThrowsAsync <ErrorModelException>(() => serviceFabricMcClient.ManagedClusters.GetAsync(resourceGroupName, clusterName));
            }
        }
 /// <summary>
 /// Restarts one or more nodes on the node type.
 /// </summary>
 /// <remarks>
 /// Restarts one or more nodes on the node type. It will disable the fabric
 /// nodes, trigger a restart on the VMs and activate the nodes back again.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group.
 /// </param>
 /// <param name='clusterName'>
 /// The name of the cluster resource.
 /// </param>
 /// <param name='nodeTypeName'>
 /// The name of the node type.
 /// </param>
 /// <param name='parameters'>
 /// parameters for restart action.
 /// </param>
 public static void Restart(this INodeTypesOperations operations, string resourceGroupName, string clusterName, string nodeTypeName, NodeTypeActionParameters parameters)
 {
     operations.RestartAsync(resourceGroupName, clusterName, nodeTypeName, parameters).GetAwaiter().GetResult();
 }
 /// <summary>
 /// Deletes one or more nodes on the node type.
 /// </summary>
 /// <remarks>
 /// Deletes one or more nodes on the node type. It will disable the fabric
 /// nodes, trigger a delete on the VMs and removes the state from the cluster.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group.
 /// </param>
 /// <param name='clusterName'>
 /// The name of the cluster resource.
 /// </param>
 /// <param name='nodeTypeName'>
 /// The name of the node type.
 /// </param>
 /// <param name='parameters'>
 /// parameters for delete action.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task BeginDeleteNodeAsync(this INodeTypesOperations operations, string resourceGroupName, string clusterName, string nodeTypeName, NodeTypeActionParameters parameters, CancellationToken cancellationToken = default(CancellationToken))
 {
     (await operations.BeginDeleteNodeWithHttpMessagesAsync(resourceGroupName, clusterName, nodeTypeName, parameters, null, cancellationToken).ConfigureAwait(false)).Dispose();
 }