Validate Workflow
And finally, the validate workflow, used to check if the information in
all OSS and BSS is still the same with the information in the
subscription. One way to do this is to reconstruct the payload sent to
the external system using information queried from that system, and
compare this with the payload that would have been sent by generating a
payload based on the current state of the subscription. The
@validate_workflow
decorator takes care of necessary subscription
administration. There is no initial input form for this type of
workflow.
@validate_workflow("Validate l2vpn")
def validate_l2vpn() -> StepList:
return (
begin
>> validate_l2vpn_in_ims
>> validate_l2vpn_terminations_in_ims
>> validate_vlans_on_ports_in_ims
)
- Necessary subscription administration (
@validate_workflow
):- Register validate process for this subscription
- Set subscription ‘out of sync’, even when subscription is already out of sync
- One or more steps to validate the subscription against all OSS and BSS:
- Validate subscription against IMS:
validate_l2vpn_in_ims
validate_l2vpn_terminations_in_ims
validate_vlans_on_ports_in_ims
- Validate subscription against IMS:
- Set subscription ‘in sync’ again (
@validate_workflow
)
When one of the validation steps fail, the subscription will stay ‘out of sync’, prohibiting other workflows to be started for this subscription. The failed validation step can be retried as many times as needed until it succeeds, which finally will set the subscription ‘in sync’ and allow other workflows to be started again. This safeguards workflows to be started for subscription with mismatching information in OSS and BSS which would make these workflows likely to fail.
It is better to limit the number of validations done in each step. This will make it easier to see in a glance what discrepancy was found and will make a retry of the failed step much faster. A commonly used strategy is to use separate steps for each OSS and BSS, and separate steps per external system for each payload that was sent. This can be done by comparing a payload created for a product block in the orchestrator with a payload that is generated by querying the external system.
Not only validations per subscription can be done, is also possible to
validate other requirements. For example, to make sure that there are no
L2VPNs administered in IMS that do not have a matching subscription in
the orchestrator, a task (a workflow with Target.SYSTEM
) can be
written that will retrieve a list of all L2VPNs from IMS and compare it
against a list of all L2VPN subscription from the orchestrator.