Skip to content

Commit e136749

Browse files
committed
Merge branch 'dev' of https://github.com/psap/azure-powershell into dev
2 parents 0557de3 + 08f6577 commit e136749

File tree

3 files changed

+91
-1
lines changed

3 files changed

+91
-1
lines changed

src/ResourceManager/Automation/Commands.Automation/Cmdlet/GetAzureAutomationDscNode.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ public class GetAzureAutomationDscNode : AzureAutomationBaseCmdlet
5959
[ValidateNotNullOrEmpty]
6060
public string NodeConfigurationName { get; set; }
6161

62+
/// <summary>
63+
/// Gets or sets the configuration name.
64+
/// </summary>
65+
[Parameter(ParameterSetName = AutomationCmdletParameterSets.ByConfigurationName, Mandatory = true, HelpMessage = "The configuration name.")]
66+
[ValidateNotNullOrEmpty]
67+
public string ConfigurationName { get; set; }
68+
6269
/// <summary>
6370
/// Execute this cmdlet.
6471
/// </summary>
@@ -90,6 +97,14 @@ public override void ExecuteCmdlet()
9097
this.NodeConfigurationName,
9198
this.Status);
9299
}
100+
else if (this.ParameterSetName == AutomationCmdletParameterSets.ByConfigurationName)
101+
{
102+
ret = this.AutomationClient.ListDscNodesByConfiguration(
103+
this.ResourceGroupName,
104+
this.AutomationAccountName,
105+
this.ConfigurationName,
106+
this.Status);
107+
}
93108
else
94109
{
95110
// ByAll

src/ResourceManager/Automation/Commands.Automation/Common/AutomationClientDSC.cs

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,46 @@ public Model.DscNode GetDscNodeById(
459459

460460
return dscNodes.Select(dscNode => new Model.DscNode(resourceGroupName, automationAccountName, dscNode));
461461
}
462-
462+
463+
public IEnumerable<Model.DscNode> ListDscNodesByConfiguration(
464+
string resourceGroupName,
465+
string automationAccountName,
466+
string configurationName,
467+
string status)
468+
{
469+
Requires.Argument("ResourceGroupName", resourceGroupName).NotNull();
470+
Requires.Argument("AutomationAccountName", automationAccountName).NotNull();
471+
Requires.Argument("ConfigurationName", configurationName).NotNull();
472+
473+
IEnumerable<Model.DscNode> listOfNodes = Enumerable.Empty<Model.DscNode>();
474+
475+
// first get the list of node configurations for the given configuration
476+
IEnumerable<Model.NodeConfiguration> listOfNodeConfigurations = this.EnumerateNodeConfigurationsByConfigurationName(
477+
resourceGroupName,
478+
automationAccountName,
479+
configurationName);
480+
481+
IEnumerable<Model.DscNode> listOfNodesForGivenNodeConfiguration;
482+
483+
// for each nodeconfiguration, get the list of nodes and concatenate
484+
foreach (var nodeConfiguration in listOfNodeConfigurations)
485+
{
486+
listOfNodesForGivenNodeConfiguration =
487+
this.ListDscNodesByNodeConfiguration(
488+
resourceGroupName,
489+
automationAccountName,
490+
nodeConfiguration.Name,
491+
status);
492+
493+
if (listOfNodesForGivenNodeConfiguration != null)
494+
{
495+
listOfNodes = listOfNodes.Concat(listOfNodesForGivenNodeConfiguration);
496+
}
497+
}
498+
499+
return listOfNodes;
500+
}
501+
463502
public IEnumerable<Model.DscNode> ListDscNodes(
464503
string resourceGroupName,
465504
string automationAccountName,
@@ -890,6 +929,37 @@ public Model.NodeConfiguration GetNodeConfiguration(string resourceGroupName, st
890929
}
891930
}
892931

932+
/// <summary>
933+
/// Enumerate the list of NodeConfigurations for given configuration - without any rollup status
934+
/// </summary>
935+
/// <param name="resourceGroupName">Resource group name</param>
936+
/// <param name="automationAccountName">Automation account</param>
937+
/// <param name="configurationName">Name of configuration</param>
938+
/// <returns>List of NodeConfigurations</returns>
939+
private IEnumerable<Model.NodeConfiguration> EnumerateNodeConfigurationsByConfigurationName(string resourceGroupName, string automationAccountName, string configurationName)
940+
{
941+
using (var request = new RequestSettings(this.automationManagementClient))
942+
{
943+
IEnumerable<AutomationManagement.Models.DscNodeConfiguration> nodeConfigModels;
944+
945+
nodeConfigModels = AutomationManagementClient.ContinuationTokenHandler(
946+
skipToken =>
947+
{
948+
var response = this.automationManagementClient.NodeConfigurations.List(
949+
resourceGroupName,
950+
automationAccountName,
951+
new AutomationManagement.Models.DscNodeConfigurationListParameters
952+
{
953+
ConfigurationName = configurationName
954+
});
955+
return new ResponseWithSkipToken<AutomationManagement.Models.DscNodeConfiguration>(response, response.DscNodeConfigurations);
956+
});
957+
958+
959+
return nodeConfigModels.Select(nodeConfigModel => new Commands.Automation.Model.NodeConfiguration(automationAccountName, nodeConfigModel));
960+
}
961+
}
962+
893963
#endregion
894964

895965
#region privatemethods

src/ResourceManager/Automation/Commands.Automation/Common/IAutomationClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ public interface IAutomationClient
9090
IEnumerable<DscNode> ListDscNodesByName(string resourceGroupName, string automationAccountName, string nodeName, string status);
9191
IEnumerable<DscNode> ListDscNodesByNodeConfiguration(string resourceGroupName, string automationAccountName, string nodeConfigurationName, string status);
9292

93+
IEnumerable<DscNode> ListDscNodesByConfiguration(
94+
string resourceGroupName,
95+
string automationAccountName,
96+
string configurationName,
97+
string status);
9398
DscNode SetDscNodeById(string resourceGroupName, string automationAccountName, Guid nodeId, string nodeConfigurationName, bool force);
9499

95100
void DeleteDscNode(string resourceGroupName, string automationAccountName, Guid nodeId);

0 commit comments

Comments
 (0)