Skip to content

Commit 666c152

Browse files
authored
Merge pull request #11184 from mentat9/Az.Resources-preview
Add typed objects for piping scenarios [breaking]
2 parents 2aa7851 + c5144bb commit 666c152

38 files changed

+3319
-66
lines changed

src/Resources/ResourceManager/Entities/Policy/PolicyDefinitionProperties.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,11 @@ public class PolicyDefinitionProperties
5757
/// </summary>
5858
[JsonProperty(Required = Required.Default)]
5959
public string Mode { get; set; }
60+
61+
/// <summary>
62+
/// The policy type.
63+
/// </summary>
64+
[JsonProperty(Required = Required.Default)]
65+
public PolicyType PolicyType { get; set; }
6066
}
6167
}

src/Resources/ResourceManager/Entities/Policy/PolicySetDefinitionProperties.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,11 @@ public class PolicySetDefinitionProperties
5757
/// </summary>
5858
[JsonProperty(Required = Required.Default)]
5959
public JArray PolicyDefinitionGroups { get; set; }
60+
61+
/// <summary>
62+
/// The policy type.
63+
/// </summary>
64+
[JsonProperty(Required = Required.Default)]
65+
public PolicyType PolicyType { get; set; }
6066
}
6167
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Entities.Policy
16+
{
17+
/// <summary>
18+
/// The policy assignment enforcement mode.
19+
/// </summary>
20+
public enum PolicyType
21+
{
22+
/// <summary>
23+
/// The policy policy [set] definition is custom
24+
/// </summary>
25+
Custom,
26+
27+
/// <summary>
28+
/// The policy policy [set] definition is built in
29+
/// </summary>
30+
BuiltIn,
31+
32+
/// <summary>
33+
/// The policy policy definition is static
34+
/// </summary>
35+
Static
36+
}
37+
}

src/Resources/ResourceManager/Extensions/JsonExtensions.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Extensions
2323
using System.Collections.Generic;
2424
using System.Globalization;
2525
using System.IO;
26+
using System.Management.Automation;
2627

2728
/// <summary>
2829
/// <c>JSON</c> extensions
@@ -134,6 +135,50 @@ public static JToken ToJToken(this object obj)
134135
return null;
135136
}
136137

138+
if (obj is PSObject psObject)
139+
{
140+
var jObject = new JObject();
141+
if (psObject.BaseObject is object[] psArray)
142+
{
143+
var jArray = new JArray();
144+
foreach (var item in psArray)
145+
{
146+
jArray.Add(item.ToJToken());
147+
}
148+
149+
return jArray;
150+
}
151+
152+
foreach (var property in psObject.Properties)
153+
{
154+
jObject.Add(new JProperty(property.Name, property.Value.ToJToken()));
155+
}
156+
157+
return jObject;
158+
}
159+
160+
if (obj is PSMemberInfoCollection<PSPropertyInfo> psCollection)
161+
{
162+
var jObject = new JObject();
163+
foreach (var member in psCollection)
164+
{
165+
jObject.Add(new JProperty(member.Name, member.Value.ToJToken()));
166+
}
167+
168+
return jObject;
169+
}
170+
171+
if (obj is object[] objArray)
172+
{
173+
var jArray = new JArray();
174+
foreach (var item in objArray)
175+
{
176+
jArray.Add(item.ToJToken());
177+
}
178+
179+
return jArray;
180+
}
181+
137182
return JToken.FromObject(obj, JsonExtensions.JsonObjectTypeSerializer);
138183
}
139184

src/Resources/ResourceManager/Implementation/Policy/GetAzurePolicyAssignment.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2525
/// <summary>
2626
/// Gets the policy assignment.
2727
/// </summary>
28-
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyAssignment", DefaultParameterSetName = PolicyCmdletBase.DefaultParameterSet), OutputType(typeof(PSObject))]
28+
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyAssignment", DefaultParameterSetName = PolicyCmdletBase.DefaultParameterSet), OutputType(typeof(PsPolicyAssignment))]
2929
public class GetAzurePolicyAssignmentCmdlet : PolicyCmdletBase
3030
{
3131
/// <summary>
@@ -84,7 +84,7 @@ private void RunCmdlet()
8484
getFirstPage: () => this.GetResources(),
8585
getNextPage: nextLink => this.GetNextLink<JObject>(nextLink),
8686
cancellationToken: this.CancellationToken,
87-
action: resources => this.WriteObject(sendToPipeline: this.GetOutputObjects("PolicyAssignmentId", resources), enumerateCollection: true));
87+
action: resources => this.WriteObject(sendToPipeline: this.GetOutputPolicyAssignments(resources), enumerateCollection: true));
8888
}
8989

9090
/// <summary>

src/Resources/ResourceManager/Implementation/Policy/GetAzurePolicyDefinition.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2727
/// <summary>
2828
/// Gets the policy definition.
2929
/// </summary>
30-
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PSObject))]
30+
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PsPolicyDefinition))]
3131
public class GetAzurePolicyDefinitionCmdlet : PolicyCmdletBase
3232
{
3333
/// <summary>
@@ -97,7 +97,7 @@ private void RunCmdlet()
9797
getFirstPage: () => this.GetResources(listFilter),
9898
getNextPage: nextLink => this.GetNextLink<JObject>(nextLink),
9999
cancellationToken: this.CancellationToken,
100-
action: resources => this.WriteObject(sendToPipeline: this.GetFilteredOutputObjects("PolicyDefinitionId", listFilter, resources), enumerateCollection: true));
100+
action: resources => this.WriteObject(sendToPipeline: this.GetFilteredOutputPolicyDefinitions(listFilter, resources), enumerateCollection: true));
101101
}
102102

103103
/// <summary>

src/Resources/ResourceManager/Implementation/Policy/GetAzurePolicySetDefinition.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2727
/// <summary>
2828
/// Gets the policy set definition.
2929
/// </summary>
30-
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicySetDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PSObject))]
30+
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicySetDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PsPolicySetDefinition))]
3131
public class GetAzurePolicySetDefinitionCmdlet : PolicyCmdletBase
3232
{
3333
/// <summary>
@@ -97,7 +97,7 @@ private void RunCmdlet()
9797
getFirstPage: () => this.GetResources(listFilter),
9898
getNextPage: nextLink => this.GetNextLink<JObject>(nextLink),
9999
cancellationToken: this.CancellationToken,
100-
action: resources => this.WriteObject(sendToPipeline: this.GetFilteredOutputObjects("PolicySetDefinitionId", listFilter, resources), enumerateCollection: true));
100+
action: resources => this.WriteObject(sendToPipeline: this.GetFilteredOutputPolicySetDefinitions(listFilter, resources), enumerateCollection: true));
101101
}
102102

103103
/// <summary>

src/Resources/ResourceManager/Implementation/Policy/NewAzurePolicyAssignment.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2929
/// <summary>
3030
/// Creates a policy assignment.
3131
/// </summary>
32-
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyAssignment", DefaultParameterSetName = PolicyCmdletBase.DefaultParameterSet), OutputType(typeof(PSObject))]
32+
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyAssignment", DefaultParameterSetName = PolicyCmdletBase.DefaultParameterSet), OutputType(typeof(PsPolicyAssignment))]
3333
public class NewAzurePolicyAssignmentCmdlet : PolicyCmdletBase, IDynamicParameters
3434
{
3535
private readonly RuntimeDefinedParameterDictionary dynamicParameters = new RuntimeDefinedParameterDictionary();
@@ -76,7 +76,7 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyCmdletBase, IDynamicParamete
7676
[Parameter(ParameterSetName = PolicyCmdletBase.DefaultParameterSet, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicyDefinitionHelp)]
7777
[Parameter(ParameterSetName = PolicyCmdletBase.PolicyParameterObjectParameterSet, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicyDefinitionHelp)]
7878
[Parameter(ParameterSetName = PolicyCmdletBase.PolicyParameterStringParameterSet, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicyDefinitionHelp)]
79-
public PSObject PolicyDefinition { get; set; }
79+
public PsPolicyDefinition PolicyDefinition { get; set; }
8080

8181
/// <summary>
8282
/// Gets or sets the policy assignment policy set definition parameter.
@@ -85,7 +85,7 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyCmdletBase, IDynamicParamete
8585
[Parameter(ParameterSetName = PolicyCmdletBase.DefaultParameterSet, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicySetDefinitionHelp)]
8686
[Parameter(ParameterSetName = PolicyCmdletBase.PolicySetParameterObjectParameterSet, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicySetDefinitionHelp)]
8787
[Parameter(ParameterSetName = PolicyCmdletBase.PolicySetParameterStringParameterSet, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyAssignmentPolicySetDefinitionHelp)]
88-
public PSObject PolicySetDefinition { get; set; }
88+
public PsPolicySetDefinition PolicySetDefinition { get; set; }
8989

9090
/// <summary>
9191
/// Gets or sets the policy assignment policy parameter object.
@@ -140,12 +140,12 @@ protected override void OnProcessRecord()
140140
throw new PSInvalidOperationException("Only one of PolicyDefinition or PolicySetDefinition can be specified, not both.");
141141
}
142142

143-
if (this.PolicyDefinition != null && this.PolicyDefinition.Properties["policyDefinitionId"] == null)
143+
if (this.PolicyDefinition != null && this.PolicyDefinition.PolicyDefinitionId == null)
144144
{
145145
throw new PSInvalidOperationException("The supplied PolicyDefinition object is invalid.");
146146
}
147147

148-
if (this.PolicySetDefinition != null && this.PolicySetDefinition.Properties["policySetDefinitionId"] == null)
148+
if (this.PolicySetDefinition != null && this.PolicySetDefinition.PolicySetDefinitionId == null)
149149
{
150150
throw new PSInvalidOperationException("The supplied PolicySetDefinition object is invalid.");
151151
}
@@ -173,7 +173,7 @@ protected override void OnProcessRecord()
173173
var result = this.GetLongRunningOperationTracker(activityName: activity, isResourceCreateOrUpdate: true)
174174
.WaitOnOperation(operationResult: operationResult);
175175

176-
this.WriteObject(this.GetOutputObjects("PolicyAssignmentId", JObject.Parse(result)), enumerateCollection: true);
176+
this.WriteObject(this.GetOutputPolicyAssignments(JObject.Parse(result)), enumerateCollection: true);
177177
}
178178

179179
/// <summary>
@@ -208,11 +208,11 @@ private JToken GetResource()
208208

209209
if (this.PolicyDefinition != null)
210210
{
211-
policyassignmentObject.Properties.PolicyDefinitionId = this.PolicyDefinition.Properties["policyDefinitionId"].Value.ToString();
211+
policyassignmentObject.Properties.PolicyDefinitionId = this.PolicyDefinition.PolicyDefinitionId;
212212
}
213213
else if (this.PolicySetDefinition != null)
214214
{
215-
policyassignmentObject.Properties.PolicyDefinitionId = this.PolicySetDefinition.Properties["policySetDefinitionId"].Value.ToString();
215+
policyassignmentObject.Properties.PolicyDefinitionId = this.PolicySetDefinition.PolicySetDefinitionId;
216216
}
217217

218218
return policyassignmentObject.ToJToken();
@@ -223,11 +223,11 @@ object IDynamicParameters.GetDynamicParameters()
223223
PSObject parameters = null;
224224
if (this.PolicyDefinition != null)
225225
{
226-
parameters = this.PolicyDefinition.GetPSObjectProperty("Properties.parameters") as PSObject;
226+
parameters = this.PolicyDefinition.Properties.Parameters;
227227
}
228228
else if (this.PolicySetDefinition != null)
229229
{
230-
parameters = this.PolicySetDefinition.GetPSObjectProperty("Properties.parameters") as PSObject;
230+
parameters = this.PolicySetDefinition.Properties.Parameters;
231231
}
232232

233233
if (parameters != null)

src/Resources/ResourceManager/Implementation/Policy/NewAzurePolicyDefinition.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2626
/// <summary>
2727
/// Creates the new policy definition.
2828
/// </summary>
29-
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PSObject))]
29+
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicyDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet), OutputType(typeof(PsPolicyDefinition))]
3030
public class NewAzurePolicyDefinitionCmdlet : PolicyCmdletBase
3131
{
3232
/// <summary>
@@ -121,8 +121,7 @@ protected override void OnProcessRecord()
121121
var activity = string.Format("PUT {0}", managementUri.PathAndQuery);
122122
var result = this.GetLongRunningOperationTracker(activityName: activity, isResourceCreateOrUpdate: true)
123123
.WaitOnOperation(operationResult: operationResult);
124-
125-
this.WriteObject(this.GetOutputObjects("PolicyDefinitionId", JObject.Parse(result)), enumerateCollection: true);
124+
this.WriteObject(this.GetOutputPolicyDefinitions(JObject.Parse(result)), enumerateCollection: true);
126125
}
127126

128127
/// <summary>

src/Resources/ResourceManager/Implementation/Policy/NewAzurePolicySetDefinition.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation
2525
/// <summary>
2626
/// Creates the policy set definition.
2727
/// </summary>
28-
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicySetDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet, SupportsShouldProcess = true), OutputType(typeof(PSObject))]
28+
[Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "PolicySetDefinition", DefaultParameterSetName = PolicyCmdletBase.NameParameterSet, SupportsShouldProcess = true), OutputType(typeof(PsPolicySetDefinition))]
2929
public class NewAzurePolicySetDefinitionCmdlet : PolicyCmdletBase
3030
{
3131
/// <summary>
@@ -123,7 +123,7 @@ protected override void OnProcessRecord()
123123
var result = this.GetLongRunningOperationTracker(activityName: activity, isResourceCreateOrUpdate: true)
124124
.WaitOnOperation(operationResult: operationResult);
125125

126-
this.WriteObject(this.GetOutputObjects("PolicySetDefinitionId", JObject.Parse(result)), enumerateCollection: true);
126+
this.WriteObject(this.GetOutputPolicySetDefinitions(JObject.Parse(result)), enumerateCollection: true);
127127
}
128128
}
129129

0 commit comments

Comments
 (0)