public override void ExecuteCmdlet() { ListComputeNodeOptions options = new ListComputeNodeOptions(this.BatchContext, this.PoolId, this.Pool, this.AdditionalBehaviors) { ComputeNodeId = this.Id, Filter = this.Filter, MaxCount = this.MaxCount }; // The enumerator will internally query the service in chunks. Using WriteObject with the enumerate flag will enumerate // the entire collection first and then write the items out one by one in a single group. Using foreach, we can take // advantage of the enumerator's behavior and write output to the pipeline in bursts. foreach (PSComputeNode computeNode in BatchClient.ListComputeNodes(options)) { WriteObject(computeNode); } }
/// <summary> /// Lists the compute nodes matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for compute nodes.</param> /// <returns>The compute nodes matching the specified filter options.</returns> public IEnumerable <PSComputeNode> ListComputeNodes(ListComputeNodeOptions options) { if (options == null) { throw new ArgumentNullException("options"); } string poolId = options.Pool == null ? options.PoolId : options.Pool.Id; // Get the single compute node matching the specified id if (!string.IsNullOrEmpty(options.ComputeNodeId)) { WriteVerbose(string.Format(Resources.GetComputeNodeById, options.ComputeNodeId, poolId)); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select); ComputeNode computeNode = poolOperations.GetComputeNode(poolId, options.ComputeNodeId, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSComputeNode psComputeNode = new PSComputeNode(computeNode); return(new PSComputeNode[] { psComputeNode }); } // List compute nodes using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = string.Format(Resources.GetComputeNodeByOData, poolId); listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = string.Format(Resources.GetComputeNodeNoFilter, poolId); } WriteVerbose(verboseLogString); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; IPagedEnumerable <ComputeNode> computeNodes = poolOperations.ListComputeNodes(poolId, listDetailLevel, options.AdditionalBehaviors); return(PSPagedEnumerable <PSComputeNode, ComputeNode> .CreateWithMaxCount ( computeNodes, c => { return new PSComputeNode(c); }, options.MaxCount, () => WriteMaxCount(options.MaxCount) )); } }
/// <summary> /// Lists the compute nodes matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for compute nodes.</param> /// <returns>The compute nodes matching the specified filter options.</returns> public IEnumerable<PSComputeNode> ListComputeNodes(ListComputeNodeOptions options) { if (options == null) { throw new ArgumentNullException("options"); } string poolId = options.Pool == null ? options.PoolId : options.Pool.Id; // Get the single compute node matching the specified id if (!string.IsNullOrEmpty(options.ComputeNodeId)) { WriteVerbose(string.Format(Resources.GetComputeNodeById, options.ComputeNodeId, poolId)); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select); ComputeNode computeNode = poolOperations.GetComputeNode(poolId, options.ComputeNodeId, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSComputeNode psComputeNode = new PSComputeNode(computeNode); return new PSComputeNode[] { psComputeNode }; } // List compute nodes using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = string.Format(Resources.GetComputeNodeByOData, poolId); listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = string.Format(Resources.GetComputeNodeNoFilter, poolId); } WriteVerbose(verboseLogString); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; IPagedEnumerable<ComputeNode> computeNodes = poolOperations.ListComputeNodes(poolId, listDetailLevel, options.AdditionalBehaviors); Func<ComputeNode, PSComputeNode> mappingFunction = c => { return new PSComputeNode(c); }; return PSPagedEnumerable<PSComputeNode, ComputeNode>.CreateWithMaxCount( computeNodes, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } }
/// <summary> /// Lists the compute nodes matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for compute nodes.</param> /// <returns>The compute nodes matching the specified filter options.</returns> public IEnumerable <PSComputeNode> ListComputeNodes(ListComputeNodeOptions options) { if (options == null) { throw new ArgumentNullException("options"); } string poolId = options.Pool == null ? options.PoolId : options.Pool.Id; // Get the single compute node matching the specified id if (!string.IsNullOrEmpty(options.ComputeNodeId)) { WriteVerbose(string.Format(Resources.GBCN_GetById, options.ComputeNodeId, poolId)); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; ComputeNode computeNode = poolOperations.GetComputeNode(poolId, options.ComputeNodeId, additionalBehaviors: options.AdditionalBehaviors); PSComputeNode psComputeNode = new PSComputeNode(computeNode); return(new PSComputeNode[] { psComputeNode }); } // List compute nodes using the specified filter else { ODATADetailLevel odata = null; string verboseLogString = null; if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = string.Format(Resources.GBCN_GetByOData, poolId); odata = new ODATADetailLevel(filterClause: options.Filter); } else { verboseLogString = string.Format(Resources.GBCN_NoFilter, poolId); } WriteVerbose(verboseLogString); PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations; IPagedEnumerable <ComputeNode> computeNodes = poolOperations.ListComputeNodes(poolId, odata, options.AdditionalBehaviors); Func <ComputeNode, PSComputeNode> mappingFunction = c => { return(new PSComputeNode(c)); }; return(PSPagedEnumerable <PSComputeNode, ComputeNode> .CreateWithMaxCount( computeNodes, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount)))); } }
/// <summary> /// Waits for a compute node to get to the idle state /// </summary> public static void WaitForIdleComputeNode(BatchController controller, BatchAccountContext context, string poolId, string computeNodeId) { RequestInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListComputeNodeOptions options = new ListComputeNodeOptions(context, poolId, null, behaviors) { ComputeNodeId = computeNodeId }; DateTime timeout = DateTime.Now.AddMinutes(2); PSComputeNode computeNode = client.ListComputeNodes(options).First(); if (computeNode.State != ComputeNodeState.Idle) { if (DateTime.Now > timeout) { throw new TimeoutException("Timed out waiting for idle compute node"); } Sleep(5000); computeNode = client.ListComputeNodes(options).First(); } }
/// <summary> /// Gets the id of a compute node in the specified pool /// </summary> public static string GetComputeNodeId(BatchController controller, BatchAccountContext context, string poolId) { RequestInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListComputeNodeOptions options = new ListComputeNodeOptions(context, poolId, null, behaviors); return client.ListComputeNodes(options).First().Id; }
/// <summary> /// Gets the id of a compute node in the specified pool /// </summary> public static string GetComputeNodeId(BatchController controller, BatchAccountContext context, string poolId) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListComputeNodeOptions options = new ListComputeNodeOptions(context, poolId, null); return client.ListComputeNodes(options).First().Id; }
/// <summary> /// Gets the id of a compute node in the specified pool /// </summary> public static string GetComputeNodeId(BatchController controller, BatchAccountContext context, string poolId, int index = 0) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListComputeNodeOptions options = new ListComputeNodeOptions(context, poolId, null); List<PSComputeNode> computeNodes = client.ListComputeNodes(options).ToList(); return computeNodes[index].Id; }
/// <summary> /// Waits for a compute node to get to the idle state /// </summary> public static void WaitForIdleComputeNode(BatchController controller, BatchAccountContext context, string poolId, string computeNodeId) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListComputeNodeOptions options = new ListComputeNodeOptions(context, poolId, null) { ComputeNodeId = computeNodeId, Select = "id,state" }; DateTime timeout = DateTime.Now.AddMinutes(5); PSComputeNode computeNode = client.ListComputeNodes(options).First(); while (computeNode.State != ComputeNodeState.Idle) { if (DateTime.Now > timeout) { throw new TimeoutException("Timed out waiting for idle compute node"); } Sleep(5000); computeNode = client.ListComputeNodes(options).First(); } }