diff --git a/docs/admin_guide/oss_bss/ipam.md b/docs/admin_guide/oss_bss/ipam.md new file mode 100644 index 0000000000000000000000000000000000000000..ae5591069a8746bee3d2b5cf2869f850845b1b0c --- /dev/null +++ b/docs/admin_guide/oss_bss/ipam.md @@ -0,0 +1 @@ +# Integration with Infoblox \ No newline at end of file diff --git a/docs/admin_guide/oss_bss/kentik.md b/docs/admin_guide/oss_bss/kentik.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/admin_guide/oss_bss/librenms.md b/docs/admin_guide/oss_bss/librenms.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/admin_guide/oss_bss/netbox.md b/docs/admin_guide/oss_bss/netbox.md new file mode 100644 index 0000000000000000000000000000000000000000..27b47a009cb8b4c8aa3404c200a0ae89029126cf --- /dev/null +++ b/docs/admin_guide/oss_bss/netbox.md @@ -0,0 +1 @@ +# Integration with Netbox \ No newline at end of file diff --git a/docs/architecture/index.md b/docs/architecture/index.md index 5848e3b1da8da3f59f2619f6fc059c4feeff51b1..7e4c3879ca47faf35141aa9d8c3529bae5bfa86f 100644 --- a/docs/architecture/index.md +++ b/docs/architecture/index.md @@ -1,81 +1,44 @@ # Architecture -We follow the principles of infrastructure as code, and decompose configuration in data and templates. Git stores and -versions all configuration, and it's also responsible for managing mechanisms such as: +An overview of the architecture of GAP is depicted in the following picture: -* Automatic checks to validate data and data references. -* Merge requests for change approval. + -The stack of tools is kept limited: +The diagram, shows how GAP position itself as a single point of access not only for the interaction with a specific technical domain, in our case the IP/MPLS network, but also for the interaction with OSS/BSS systems that are authoritative for certain types of resources. -* Workflow Orchestrator (WFO) orchestrates all changes. -* Ansible is the tool that deploys configuration. -* If needed, custom Python scripts can support extra functionality. +GAP is responsible not only to allocate and release these resources but also to verify that all the systems are in sync over time. -This approach works well for the deployment of 'base configuration'. For service fulfillment, three more components are -introduced: +In other words, operators are no longer responsible to prepare resources before doing changes (for example allocating IP networks or addresses and configuring accordingly DNS): the GAP component responsible for the interaction with that particular system will take care of allocating and configure the necessary resources. +## OSS/BSS systems currently in scope -* A resource database. -* A service database. -* A workflow engine. +### Infoblox -All three of these components are deployed as part of WFO. More information about WFO can be found on their website -<a href="https://workfloworchestrator.org/" target="_blank">here</a>. +Infoblox is the GÉANT DDI (DHCP/DNS/IPAM) platform and it is responsible to manage the allocation of IP networks and addresses (both IPv4 and IPv6) as well as the assignment of domain names for the zones GÉANT is athoritative for. -## Configuration (de)composition +Currently GAP support: -The configuration of a network element can be decomposed in different functional parts: +- Allocation and deletion of an IP (v4/v6) Network within an existing network container +- Allocation and deletion of a host and relative IPv4 and IPv6 addresses including A,AAAA and PTR records. -* Base configuration. -* Service configuration: - * IFS - * CFS +More detailed information about this integration is available in the [Ipam integration module](../admin_guide/oss_bss/ipam.md) -The base configuration includes all configuration necessary to provision a new node, and to include it in the network. -It covers aspects such as: +### Netbox -* Standard routing configuration for node reachability. -* User access configuration and AAA. -* Standard configuration related to security and hardening of the device. -* Monitoring and event management. +Netbox is responsible of managing physical resources such as nodes and interfaces. -The configuration is similar across all network elements, apart from some device-specific values such as hardware type -or loopback address. +An interface can be in 3 different states: -On top of this 'base layer' services can be deployed. Some examples of offered services are given in the table below. +- __free__: available to be used by a workflow to deploy a service +- __reserved__: currently in use by a workflow that is still running +- __in use__: holding a service currently active -| Infrastructure facing services | Customer facing services | -|--------------------------------|-----------------------------------| -| Backbone trunks | Access point for R&E traffic | -| Transit provider | Access point for internet traffic | -| Internet exchange | | +More detailed information about this integration is available in the [Physical resources integration module](../admin_guide/oss_bss/netbox.md) +### LibreNMS -## Principles -### For reference +More detailed information about this integration is available in the [LibreNMS integration module](../admin_guide/oss_bss/librenms.md) +### Kentik (planned) -* All network operations are automated, requiring no operator steps beyond the instantiation of intent. -* Changes applied to individual network element are fully declarative, vendor-neutral, and derived from the network -infrastructure from the high-level, network-wide intent. -* Any network changes are automatically halted and rolled back if the network displays unintended behaviour. -* The infrastructure doesn't allow operations that violate network policies. -<a href="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45687.pdf" -target="_blank">Source</a>. +## Interaction with a technical domain: IP/MPLS -### Other principles - -* Automatic check evaluate all changes -* After passing pipelines, all changes are merged into the `main` branch. These pipelines run once a change is -peer-reviewed and approved. - -- - - - -## Orchestration and service database - -All services offered can be summarised in the following four categories. Some examples are given in the table below. - -| | Multipoint | Point 2 point | -|---------|-------------|------------------| -| Layer 2 | VPLS / EVPN | Layer 2 circuits | -| Layer 3 | L3VPN | Core links | diff --git a/docs/assets/images/Architecture-WFO_Geant_specific.drawio.png b/docs/assets/images/Architecture-WFO_Geant_specific.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..fe04e2e470d5689eb9ab3d26bbce9f9dbc160249 Binary files /dev/null and b/docs/assets/images/Architecture-WFO_Geant_specific.drawio.png differ diff --git a/docs/assets/images/image_sources/Architecture.drawio b/docs/assets/images/image_sources/Architecture.drawio new file mode 100644 index 0000000000000000000000000000000000000000..b06f6b20137de1e57ddfb7fe6568b1e0742b7184 --- /dev/null +++ b/docs/assets/images/image_sources/Architecture.drawio @@ -0,0 +1,388 @@ +<mxfile host="Electron" modified="2023-08-28T13:52:32.490Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="hKNO4S5IgK634bX5jO2K" version="21.2.1" type="device" pages="4"> + <diagram name="Overview" id="5LPZLXcoEl9-ho0UlVSG"> + <mxGraphModel dx="1663" dy="775" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="BRG2872ae9NKHgnPV-JH-18" value="" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Tahoma;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="190" y="290" width="410" height="280" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-1" value="Workflow Engine" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#075683;strokeColor=none;fontFamily=Tahoma;fontColor=#FFFFFF;fontSize=13;" parent="1" vertex="1"> + <mxGeometry x="335" y="400" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-2" value="HW inventory" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e83f4b;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="120" y="270" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-3" value="IPAM/DNS" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e83f4b;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="120" y="338" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-4" value="Monitoring" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e83f4b;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="120" y="407" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-6" value="User interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8a10c;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="570" y="273" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-7" value="Messaging/Emails" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8a10c;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="570" y="343" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-8" value="Ticketing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8a10c;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="570" y="413" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-9" value="Technical Domain<br>(ie IP/MPLS)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="180" y="570" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-10" value="Ansible" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="190" y="550" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-11" value="Technical Domain<br>(ie Optical)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="330" y="570" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-12" value="Domain Specific Automation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="340" y="550" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-13" value="Technical Domain<br>(ie Datacenter)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="480" y="570" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-14" value="Domain Specific Automation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="490" y="550" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-16" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="560" y="253" width="140" height="240" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-19" value="Service database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#075683;strokeColor=none;fontFamily=Tahoma;fontColor=#FFFFFF;fontSize=13;" parent="1" vertex="1"> + <mxGeometry x="335" y="300" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-20" value="Orchestration Layer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="365" y="490" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-21" value="Workflow Orchestrator" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=17;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="305" y="253" width="175" height="30" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-22" value="Internal<br>OSS/BSS systems" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="100" y="210" width="150" height="30" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-23" value="User Facing<br>OSS/BSS systems" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="555" y="210" width="150" height="30" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-24" value="Operators" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> + <mxGeometry x="720" y="260" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-25" value="Users" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> + <mxGeometry x="720" y="370" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-30" value="More..." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e83f4b;strokeColor=none;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="120" y="475" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="BRG2872ae9NKHgnPV-JH-15" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="110" y="250" width="140" height="290" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="OxvVKvg4RBchy1Ke26Vi" name="Lifecycle"> + <mxGraphModel dx="1663" dy="775" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="9i9uzR1bp89Chr804UXO-1" value="INITIAL" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="120" y="280" width="100" height="100" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-2" value="PROVISIONING" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="280" y="160" width="100" height="100" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-3" value="ACTIVE" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="440" y="280" width="100" height="100" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-4" value="MIGRATING" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="440" y="450" width="100" height="100" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-5" value="TERMINATED" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="150" y="430" width="100" height="100" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-12" value="<div style="text-align: justify;"><span style="background-color: initial;">Attributes are collected from authoritative systems and from the operator/user</span></div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="100" y="220" width="160" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-13" value="<div style="text-align: justify;">Domain-Specific Automation provisions the subscription on the network</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="260" y="285" width="160" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-14" value="<div style="text-align: justify;">Attributes are manipulated to adapt to new needs<br></div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="590" y="210" width="160" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-16" value="Modify" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="530" y="240" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-17" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.08;entryY=0.77;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-1" target="9i9uzR1bp89Chr804UXO-2" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-10" y="480" as="sourcePoint" /> + <mxPoint x="40" y="430" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-2" target="9i9uzR1bp89Chr804UXO-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="340" y="380" as="sourcePoint" /> + <mxPoint x="390" y="330" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-19" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-3" target="9i9uzR1bp89Chr804UXO-5" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="280" y="430" as="sourcePoint" /> + <mxPoint x="330" y="380" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-20" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-4" target="9i9uzR1bp89Chr804UXO-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="250" y="380" as="sourcePoint" /> + <mxPoint x="300" y="330" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-22" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-3" target="9i9uzR1bp89Chr804UXO-4" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="630" y="470" as="sourcePoint" /> + <mxPoint x="680" y="420" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-23" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="9i9uzR1bp89Chr804UXO-3" target="9i9uzR1bp89Chr804UXO-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="610" y="270" as="sourcePoint" /> + <mxPoint x="660" y="220" as="targetPoint" /> + <Array as="points"> + <mxPoint x="580" y="280" /> + <mxPoint x="660" y="270" /> + <mxPoint x="550" y="220" /> + <mxPoint x="520" y="240" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-24" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="9i9uzR1bp89Chr804UXO-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="540" y="330" as="sourcePoint" /> + <mxPoint x="595" y="385" as="targetPoint" /> + <Array as="points"> + <mxPoint x="650" y="370" /> + <mxPoint x="660" y="310" /> + <mxPoint x="620" y="310" /> + <mxPoint x="580" y="310" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-25" value="Validate" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="580" y="315" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-26" value="<div style="text-align: justify;">Subscription is checked to verify all is in sync</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="660" y="315" width="160" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-27" value="<div style="text-align: justify;">The subscription might be migrated to new hardware or substrate</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="540" y="400" width="160" height="30" as="geometry" /> + </mxCell> + <mxCell id="9i9uzR1bp89Chr804UXO-28" value="<div style="text-align: justify;">The subscription is terminated, removed from the network, all the systems gets updated.&nbsp;</div>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="284" y="450" width="130" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="I4smcoPWwe3PN79ySEkT" name="WFO_Geant_specific"> + <mxGraphModel dx="2490" dy="775" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-10" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;" parent="1" vertex="1"> + <mxGeometry x="800" y="370.5" width="90" height="239.5" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-6" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#bac8d3;fontColor=#ffffff;strokeColor=none;" parent="1" vertex="1"> + <mxGeometry x="-20" y="525" width="670" height="60" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-1" value="Authentication and&nbsp;&nbsp;<br>Authorization Infrastructure" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=none;" parent="1" vertex="1"> + <mxGeometry x="60" y="420" width="180" height="90" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-2" value="Orchestrator GUI" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="400" y="420" width="130" height="90" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-5" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="425" y="310" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="xgwRl2r8zASo9SITuRbb-5" vertex="1"> + <mxGeometry width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-4" value="" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;strokeColor=#FFFFFF;" parent="xgwRl2r8zASo9SITuRbb-5" vertex="1"> + <mxGeometry x="25" y="10" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-11" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" source="xgwRl2r8zASo9SITuRbb-2" target="xgwRl2r8zASo9SITuRbb-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="310" y="380" as="sourcePoint" /> + <mxPoint x="460" y="390" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-12" value="Operators" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="435" y="280" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-14" value="" style="group" parent="1" vertex="1" connectable="0"> + <mxGeometry x="275" y="310" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-15" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="FV0cLB4CSSY3hVsMsGnb-14" vertex="1"> + <mxGeometry width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-16" value="" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;strokeColor=#FFFFFF;" parent="FV0cLB4CSSY3hVsMsGnb-14" vertex="1"> + <mxGeometry x="25" y="10" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-17" value="" style="endArrow=none;html=1;rounded=0;exitX=0.432;exitY=0.009;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;strokeWidth=2;" parent="1" source="xgwRl2r8zASo9SITuRbb-6" target="FV0cLB4CSSY3hVsMsGnb-15" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="350" y="420" as="sourcePoint" /> + <mxPoint x="345" y="390" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-18" value="Customers" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="287" y="280" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-19" value="Self service<br>portal API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="250" y="470" width="140" height="40" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-13" value="Self service<br>portal" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="250" y="420" width="140" height="40" as="geometry" /> + </mxCell> + <mxCell id="FV0cLB4CSSY3hVsMsGnb-20" value="" style="endArrow=none;html=1;rounded=1;entryX=0.736;entryY=0.944;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryPerimeter=0;strokeWidth=2;" parent="1" source="FV0cLB4CSSY3hVsMsGnb-19" target="FV0cLB4CSSY3hVsMsGnb-15" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="325" y="440" as="sourcePoint" /> + <mxPoint x="375" y="390" as="targetPoint" /> + <Array as="points"> + <mxPoint x="355" y="400" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-1" value="IP/MPLS<br>Junos/Nokia" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="65" y="630" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-2" value="Ansible" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="75" y="610" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-3" value="Technical Domain<br>(ie Optical)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="215" y="630" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-4" value="Domain Specific Automation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="225" y="610" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-5" value="Technical Domain<br>(ie Datacenter)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="365" y="630" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-6" value="Domain Specific Automation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="375" y="610" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-7" value="Other <br>Technical Domain" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#393938;strokeColor=none;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="510" y="630" width="140" height="130" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-8" value="Domain Specific Automation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6a6a69;strokeColor=#FFFFFF;fontColor=#FFFFFF;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="520" y="610" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-10" value="Infoblox" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="810" y="395" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-11" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.125;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=2;" parent="1" source="xgwRl2r8zASo9SITuRbb-7" target="PUE3jFu-1MjbAkVMeXG0-10" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="710" y="530" as="sourcePoint" /> + <mxPoint x="760" y="480" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-9" value="ipam" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="670" y="395" width="110" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-12" value="Netbox" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="810" y="445" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-13" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1.009;exitY=0.379;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=2;" parent="1" source="xgwRl2r8zASo9SITuRbb-7" target="PUE3jFu-1MjbAkVMeXG0-12" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="650" y="490" as="sourcePoint" /> + <mxPoint x="760" y="530" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-14" value="resource_manager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="670" y="445" width="110" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-15" value="LibreNMS" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="810" y="495" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-16" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;exitX=1.027;exitY=0.647;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="xgwRl2r8zASo9SITuRbb-7" target="PUE3jFu-1MjbAkVMeXG0-15" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="660" y="540" as="sourcePoint" /> + <mxPoint x="760" y="580" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-17" value="monitoring" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="670" y="495" width="110" height="40" as="geometry" /> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-18" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" source="PUE3jFu-1MjbAkVMeXG0-2" target="fU0Jv1-IXl80mrmCQJBs-2" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint y="860" as="sourcePoint" /> + <mxPoint x="130" y="590" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-19" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.127;entryY=0.982;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="284.77" y="611" as="sourcePoint" /> + <mxPoint x="284.77" y="585" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-20" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.127;entryY=0.982;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="435" y="610" as="sourcePoint" /> + <mxPoint x="435" y="584" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="PUE3jFu-1MjbAkVMeXG0-21" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.127;entryY=0.982;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="579.77" y="611" as="sourcePoint" /> + <mxPoint x="579.77" y="585" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-8" value="Orchestration Layer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1"> + <mxGeometry x="320" y="540" width="146" height="30" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-4" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=none;opacity=80;" parent="1" vertex="1"> + <mxGeometry x="58" y="280" width="340" height="241" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-5" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=none;opacity=80;" parent="1" vertex="1"> + <mxGeometry x="210" y="600" width="460" height="180" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-6" value="Kentik" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="810" y="545" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-7" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.985;exitY=0.667;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=2;" parent="1" source="xgwRl2r8zASo9SITuRbb-6" target="fU0Jv1-IXl80mrmCQJBs-6" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="650" y="590" as="sourcePoint" /> + <mxPoint x="760" y="630" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-8" value="monitoring" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="670" y="545" width="110" height="40" as="geometry" /> + </mxCell> + <mxCell id="xgwRl2r8zASo9SITuRbb-7" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BAC8D3;fontColor=#ffffff;strokeColor=none;" parent="1" vertex="1"> + <mxGeometry x="540" y="390" width="110" height="190" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-2" value="LSO<br>Lightweight Service Orchestrator" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontFamily=Tahoma;" parent="1" vertex="1"> + <mxGeometry x="12.5" y="550" width="245" height="40" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-11" value="OSS/BSS Already in use in Geant" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="900" y="450" width="70" height="70" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-12" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;" parent="1" vertex="1"> + <mxGeometry x="660" y="370.5" width="130" height="239.5" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-13" value="Integration modules<br>internally developed" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="670" y="610" width="110" height="30" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-14" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;" parent="1" vertex="1"> + <mxGeometry y="545" width="270" height="55" as="geometry" /> + </mxCell> + <mxCell id="fU0Jv1-IXl80mrmCQJBs-15" value="Integration module internally developed" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="-60" y="600" width="110" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="QxhRZFN0ACoc4i0gpn6R" name="Page-4"> + <mxGraphModel dx="1663" dy="775" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/docs/assets/images/image_sources/TNC23_diagrams.drawio b/docs/assets/images/image_sources/tnc_diags.drawio similarity index 100% rename from docs/assets/images/image_sources/TNC23_diagrams.drawio rename to docs/assets/images/image_sources/tnc_diags.drawio