Skip to content

Commit 1a50534

Browse files
author
Maddie Clayton
authored
Merge pull request #8978 from aashish1987/master
Do not break for invalid GuestConfiguration policy definitions
2 parents b976625 + 7ac3364 commit 1a50534

File tree

4 files changed

+61
-40
lines changed

4 files changed

+61
-40
lines changed

src/GuestConfiguration/GuestConfiguration/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
- Fixed cmdlets failure when a subscription has an incorrect format initiative definition for GuestConfiguration category.
2122

2223
## Version 0.10.4
2324
* Fix cmdlets failure when an initiative definition in subscription does not have category set.

src/GuestConfiguration/GuestConfiguration/Common/GuestConfigurationCmdletBase.cs

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -349,56 +349,64 @@ private IEnumerable<PolicyData> GetPolicyStatusesHelper(PolicySetDefinition[] po
349349
// Get all gcrp assignments for the initiative - for policy definitions of category "Guest Configuration", effectType "AuditIfNotExists" or "Audit"
350350
foreach (var policyDef in policyDefinitionsForTheInitiative)
351351
{
352-
var policyRule = JObject.Parse(policyDef.PolicyRule.ToString());
353-
var policyRuleDictionary = policyRule.ToObject<Dictionary<string, object>>();
352+
try
353+
{
354+
var policyRule = JObject.Parse(policyDef.PolicyRule.ToString());
355+
var policyRuleDictionary = policyRule.ToObject<Dictionary<string, object>>();
354356

355-
var policyRuleThen = JObject.Parse(policyRuleDictionary["then"].ToString());
356-
var policyRuleThenDictionary = policyRuleThen.ToObject<Dictionary<string, object>>();
357+
var policyRuleThen = JObject.Parse(policyRuleDictionary["then"].ToString());
358+
var policyRuleThenDictionary = policyRuleThen.ToObject<Dictionary<string, object>>();
357359

358-
var effectType = policyRuleThenDictionary["effect"].ToString();
359-
var effectTypeLower = effectType.ToLower();
360+
var effectType = policyRuleThenDictionary["effect"].ToString();
361+
var effectTypeLower = effectType.ToLower();
360362

361-
if (Constants.AuditIfNotExists != effectTypeLower && Constants.Audit != effectTypeLower)
362-
{
363-
continue;
364-
}
363+
if (Constants.AuditIfNotExists != effectTypeLower && Constants.Audit != effectTypeLower)
364+
{
365+
continue;
366+
}
365367

366-
var policyMetadata = JObject.Parse(policyDef.Metadata.ToString());
367-
var policyMetadataDictionary = policyMetadata.ToObject<Dictionary<string, object>>();
368-
var policyCategory = policyMetadataDictionary["category"].ToString().ToLower();
369-
if (Constants.GuestConfigurationCategory != policyCategory)
370-
{
371-
continue;
372-
}
368+
var policyMetadata = JObject.Parse(policyDef.Metadata.ToString());
369+
var policyMetadataDictionary = policyMetadata.ToObject<Dictionary<string, object>>();
370+
var policyCategory = policyMetadataDictionary["category"].ToString().ToLower();
371+
if (Constants.GuestConfigurationCategory != policyCategory)
372+
{
373+
continue;
374+
}
373375

374-
string guestConfigurationAssignmentNameInPolicy = null;
376+
string guestConfigurationAssignmentNameInPolicy = null;
375377

376-
if (Constants.AuditIfNotExists == effectTypeLower)
377-
{
378-
var policyRuleThenDetails = JObject.Parse(policyRuleThenDictionary["details"].ToString());
379-
var policyRuleDetailsDictionary = policyRuleThenDetails.ToObject<Dictionary<string, object>>();
380-
guestConfigurationAssignmentNameInPolicy = policyRuleDetailsDictionary["name"].ToString();
381-
}
382-
else if (Constants.Audit == effectTypeLower)
383-
{
384-
var policyRuleIf = JObject.Parse(policyRuleDictionary["if"].ToString());
385-
var policyRuleIfDictionary = policyRuleIf.ToObject<Dictionary<string, object>>();
386-
var policyRuleIfAllOf = policyRuleIfDictionary["allOf"];
387-
var policyRuleIfAllOfJArray = JArray.FromObject(policyRuleIfAllOf);
388-
var guestConfigurationAssignmentNameInPolicyArray = policyRuleIfAllOfJArray.Single(
389-
x => x.Value<string>("field") == "name"
390-
);
391-
guestConfigurationAssignmentNameInPolicy = guestConfigurationAssignmentNameInPolicyArray.Value<string>("equals");
392-
}
378+
if (Constants.AuditIfNotExists == effectTypeLower)
379+
{
380+
var policyRuleThenDetails = JObject.Parse(policyRuleThenDictionary["details"].ToString());
381+
var policyRuleDetailsDictionary = policyRuleThenDetails.ToObject<Dictionary<string, object>>();
382+
guestConfigurationAssignmentNameInPolicy = policyRuleDetailsDictionary["name"].ToString();
383+
}
384+
else if (Constants.Audit == effectTypeLower)
385+
{
386+
var policyRuleIf = JObject.Parse(policyRuleDictionary["if"].ToString());
387+
var policyRuleIfDictionary = policyRuleIf.ToObject<Dictionary<string, object>>();
388+
var policyRuleIfAllOf = policyRuleIfDictionary["allOf"];
389+
var policyRuleIfAllOfJArray = JArray.FromObject(policyRuleIfAllOf);
390+
var guestConfigurationAssignmentNameInPolicyArray = policyRuleIfAllOfJArray.Single(
391+
x => x.Value<string>("field") == "name"
392+
);
393+
guestConfigurationAssignmentNameInPolicy = guestConfigurationAssignmentNameInPolicyArray.Value<string>("equals");
394+
}
393395

394-
if (!string.IsNullOrEmpty(guestConfigurationAssignmentNameInPolicy) && gcrp_AssignmentName_Assignment_Map.ContainsKey(guestConfigurationAssignmentNameInPolicy))
395-
{
396-
var gcrpAsgnment = gcrp_AssignmentName_Assignment_Map[guestConfigurationAssignmentNameInPolicy];
397-
if (gcrpAsgnment != null)
396+
if (!string.IsNullOrEmpty(guestConfigurationAssignmentNameInPolicy) && gcrp_AssignmentName_Assignment_Map.ContainsKey(guestConfigurationAssignmentNameInPolicy))
398397
{
399-
gcPolicyAssignmentsList.Add(new PolicyData(gcrpAsgnment, policyDef.DisplayName));
398+
var gcrpAsgnment = gcrp_AssignmentName_Assignment_Map[guestConfigurationAssignmentNameInPolicy];
399+
if (gcrpAsgnment != null)
400+
{
401+
gcPolicyAssignmentsList.Add(new PolicyData(gcrpAsgnment, policyDef.DisplayName));
402+
}
400403
}
401404
}
405+
catch (Exception)
406+
{
407+
this.WriteWarning(string.Format(StringResources.InvalidPolicyDefinition, policyDef.DisplayName));
408+
continue;
409+
}
402410
}
403411
}
404412
return gcPolicyAssignmentsList;

src/GuestConfiguration/GuestConfiguration/Properties/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/GuestConfiguration/GuestConfiguration/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,7 @@
162162
<data name="NotFoundByReportId" xml:space="preserve">
163163
<value>No report was found for report id {0}.</value>
164164
</data>
165+
<data name="InvalidPolicyDefinition" xml:space="preserve">
166+
<value>Policy definition with name - {0} does not comply with GuestConfiguration policy category. No reports will be fetched for this definition.</value>
167+
</data>
165168
</root>

0 commit comments

Comments
 (0)