func checkDefaults()

in internal/tools/checks/checkDefaults.go [16:49]


func checkDefaults(azany any) error {
	az, ok := azany.(*alzlib.AlzLib)
	if !ok {
		return fmt.Errorf("checkDefaults: expected *alzlib.AlzLib, got %T", azany)
	}
	defs := az.PolicyDefaultValues()
	for _, def := range defs {
		pdv := az.PolicyDefaultValue(def)
		for _, assignment := range pdv.Assignments() {
			a := az.PolicyAssignment(assignment)
			if a == nil {
				return fmt.Errorf("checkDefaults: policy assignment `%s`, referenced by default `%s` is not found in the library", assignment, def)
			}
			// We need to check that the referenced definition has the parameter as it may not be present in the assignment (e.g. if it has a default value)
			// First let's get the referenced policy definition id and parse it into a resource id type.
			var pdIdStr string
			if a.Properties.PolicyDefinitionID == nil {
				return fmt.Errorf("checkDefaults: policy assignment `%s`, referenced by default `%s` does not have a policy definition ID", assignment, def)
			}
			pdIdStr = *a.Properties.PolicyDefinitionID
			pdResId, err := arm.ParseResourceID(pdIdStr)
			if err != nil {
				return fmt.Errorf("checkDefaults: policy assignment `%s`, referenced by default `%s` has an invalid policy definition ID", assignment, def)
			}
			// Now we can check that the parameters are present in the referenced definition
			for _, param := range pdv.AssignmentParameters(assignment) {
				if !az.AssignmentReferencedDefinitionHasParameter(pdResId, param) {
					return fmt.Errorf("checkDefaults: policy assignment `%s`, referenced by default `%s` has a parameter `%s` that is not present in the referenced definition", assignment, def, param)
				}
			}
		}
	}
	return nil
}