Closed RonGonz-illumio closed 1 year ago
Doing it another way (i.e. manually building a rule object):
intra_rules = [(all_workloads_actor, all_workloads_actor, all_services_obj),
(all_workloads_actor, ipl_internal_obj, all_services_obj)]
for intra_rule in intra_rules:
rule = illumio.Rule(enabled=True, providers=[intra_rule[0]], consumers=[intra_rule[1]], ingress_services=[intra_rule[2]], unscoped_consumers=False)
self._pce.rules.create(rule, parent=ruleset)
Yields:
API call returned error code 406. Errors:
input_validation_error: Input validation failed. Details: {The property '#/' did not contain a required property of 'resolve_labels_as' in schema sec_policy_rule_sets_sec_rules_post.schema.json} : APP_K | Test
I fixed the problem with the 'resolve_labels_as' issue by including the following block, I don't believe that is an issue with illumio-py
resolve_labels_block = LabelResolutionBlock(providers=["workloads"], consumers=["workloads"])
rule = illumio.Rule(enabled=True, resolve_labels_as=resolve_labels_block, providers=[intra_rule[0]], consumers=[intra_rule[1]], ingress_services=[intra_rule[2]], unscoped_consumers=False)
The build function expects strings or references that can be converted to Actor objects, so if you pass in the "ams" literal rather than an Actor object it will work.
This is a case of insufficient type validation, a bit of a tricky issue in python. I'm planning to deprecate the build functions entirely in a future change, but for now I'll see if I can improve the logic to accept Actor objects.
The following code attempts to build a rule using 'AMS' (all workloads) as Actor in both consumer and provider:
However, the rule.py rule class is attempting to dereference an Href value which does not exist for an 'All Workloads' (ams) Actor:
What is the correct way to build a rule with an 'All Workloads' Actor? I do not believe an object with an HREF exists for the inbuilt "AMS" or 'All Workloads' actor, instead I believe this is a builtin.