in src/PSRule.Rules.Azure/Data/Policy/PolicyAssignmentVisitor.cs [986:1024]
private static void VisitCondition(PolicyAssignmentContext context, PolicyDefinition policyDefinition, JObject condition)
{
if (condition.TryArrayProperty(PROPERTY_ALLOF, out var all) ||
condition.TryArrayProperty(PROPERTY_ANYOF, out all))
{
foreach (var item in all.Values<JObject>().ToArray())
{
VisitCondition(context, policyDefinition, item);
}
// Pull up child condition
if (all.Count == 1)
{
condition.Replace(all[0]);
}
}
else if (condition.TryObjectProperty(PROPERTY_NOT, out var item))
{
VisitCondition(context, policyDefinition, item);
}
else
{
if (condition.TryStringProperty(PROPERTY_VALUE, out var s) && s.IsExpressionString())
{
condition = VisitValueExpression(context, condition, s);
}
else if (condition.TryStringProperty(PROPERTY_FIELD, out var field))
{
if (VisitField(context, policyDefinition, condition, field) == null)
condition.Remove();
}
else if (condition.TryObjectProperty(PROPERTY_COUNT, out var count))
{
VisitCountExpression(context, policyDefinition, condition, count);
}
ResolveObject(context, condition);
ConvertCondition(context, condition);
}
}