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; } }
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; } }
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(); }