Skip to content
Snippets Groups Projects
Verified Commit 080741be authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Include documentation from goat/gap/geant-automation-platform

parent c2ce98ae
No related branches found
No related tags found
1 merge request!316Replace Sphinx with MkDocs
Showing
with 1063 additions and 0 deletions
<svg width="79" height="35" viewBox="0 0 79 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_101_15)">
<path d="M15.9 17.8C16.5 17.3 17 17.1 17.4 17.1C18.4 17.1 18.7 17.8 18.7 18.2C18.5 18.3 14.2 19.7 14 19.8C13.9 19.7 13.9 19.6 13.8 19.6C14 19.4 15.9 17.8 15.9 17.8Z" fill="white" fill-opacity="0.85"/>
<path d="M0 27C0 31.8 2.1 34.3 6.3 34.3C9.1 34.3 10.8 33.1 10.8 33L10.9 32.9V26.2H5.2V28.1C5.2 28.1 8.1 28.1 8.6 28.1C8.6 28.6 8.6 31.6 8.6 31.9C8.3 32.1 7.4 32.4 6.2 32.4C3.7 32.4 2.5 30.6 2.5 27C2.5 24.9 3.1 22.4 5.9 22.4C7.8 22.4 8.5 23.5 8.5 24.5V24.8H11.1V24.5C11.1 22.1 9 20.5 5.9 20.5C2.2 20.5 0 22.9 0 27Z" fill="white" fill-opacity="0.85"/>
<path d="M20.2 20.7H12.6V34.1H20.7V32.2C20.7 32.2 15.5 32.2 14.9 32.2C14.9 31.7 14.9 28.5 14.9 28C15.5 28 20.2 28 20.2 28V26.1C20.2 26.1 15.5 26.1 14.9 26.1C14.9 25.6 14.9 23 14.9 22.5C15.5 22.5 20.5 22.5 20.5 22.5V20.6H20.2V20.7Z" fill="white" fill-opacity="0.85"/>
<path d="M54.5 20.7H42.9C42.9 20.7 42.9 28.7 42.9 30.6C42 29 37.2 20.7 37.2 20.7H34.5V34.1H36.8C36.8 34.1 36.8 26.1 36.8 24.2C37.7 25.8 42.5 34.1 42.5 34.1H45.2C45.2 34.1 45.2 23.2 45.2 22.6C45.7 22.6 48.4 22.6 48.9 22.6C48.9 23.2 48.9 34.1 48.9 34.1H51.3C51.3 34.1 51.3 23.2 51.3 22.6C51.8 22.6 54.9 22.6 54.9 22.6V20.7H54.5V20.7Z" fill="white" fill-opacity="0.85"/>
<path d="M28.9 20.7H28.7H26.4L21.4 34.1H23.8C23.8 34.1 25.1 30.6 25.3 30.2C25.7 30.2 29.8 30.2 30.2 30.2C30.3 30.6 31.7 34.1 31.7 34.1H34L28.9 20.7ZM25.9 28.3C26.1 27.6 27.3 24.4 27.7 23.3C28.1 24.4 29.2 27.6 29.5 28.3C28.7 28.3 26.6 28.3 25.9 28.3Z" fill="white" fill-opacity="0.85"/>
<path d="M77 8C68.2 -2.9 32.6 12.5 23 16.5C22.3 16.8 21.4 16.7 20.9 15.7C21.3 16.7 22.1 17.1 23.1 16.7C35.8 11.6 66.5 0.600002 74.2 10.7C77.7 15.3 76.7 20.9 72.9 28.8C72.7 29.1 72.6 29.4 72.6 29.4C72.6 29.4 72.6 29.4 72.6 29.5C72.6 29.5 72.6 29.5 72.6 29.6C72.3 30.1 71.9 30.3 71.6 30.4C72 30.4 72.5 30.2 72.9 29.6C73 29.5 73.1 29.3 73.3 29C78.7 19.5 80.7 12.5 77 8Z" fill="white" fill-opacity="0.85"/>
<path d="M70.3 29.9C70.2 29.8 68.6 28.4 67 26.9C58.7 19 33.4 -5.3 22.4 1.1C19.3 2.9 18.8 8.2 20.7 15.2C20.7 15.3 20.8 15.4 20.8 15.5C21 16.2 21.5 16.7 22.2 16.7C21.7 16.6 21.3 16.2 21.1 15.7C21.1 15.6 21 15.5 21 15.5C21 15.4 20.9 15.3 20.9 15.1C20.9 15 20.9 14.9 20.8 14.9C19.8 9 21 5.1 23.4 3.5C32.3 -2.5 53.5 15.8 64.2 25C66.6 27.1 69.4 29.5 70.2 30.1C71.4 31 72.4 30 72.7 29.5C72.3 30.1 71.3 30.7 70.3 29.9Z" fill="white" fill-opacity="0.85"/>
</g>
<defs>
<clipPath id="clip0_101_15">
<rect width="78.9" height="34.3" fill="white"/>
</clipPath>
</defs>
</svg>
This diff is collapsed.
<mxfile host="Electron" modified="2023-08-04T07:44:54.540Z" 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="f_znjEoEsjO5Cs6O7TO9" version="21.2.1" type="device">
<diagram name="Overview" id="k83DaNArxDXSbVKD7Knm">
<mxGraphModel dx="2490" dy="1944" 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="tLlyI6g2dAklqoHCJuop-1" value="" style="rounded=1;whiteSpace=wrap;html=1;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="200" y="-60" width="310" height="230" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-2" value="&lt;font color=&quot;#FFFFFF&quot;&gt;Jenkins&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#003C56;fontSize=18;strokeColor=none;" vertex="1" parent="1">
<mxGeometry x="-160" y="-110" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-3" value="&lt;font color=&quot;#FFFFFF&quot;&gt;Ansible&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#003C56;fontSize=18;strokeColor=none;" vertex="1" parent="1">
<mxGeometry x="-160" y="20" width="160" height="60" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-4" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="210" y="33" width="310" height="133" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-5" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1084B9;fontSize=18;strokeColor=none;fontColor=#FFFFFF;" vertex="1" parent="tLlyI6g2dAklqoHCJuop-4">
<mxGeometry y="33" width="290" height="60" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-6" value="&lt;h1 style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;Config Templates&lt;br&gt;&lt;/font&gt;&lt;/h1&gt;" style="text;whiteSpace=wrap;html=1;fontColor=#FFFFFF;" vertex="1" parent="tLlyI6g2dAklqoHCJuop-4">
<mxGeometry x="58" y="30" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-15" value="Vendor specific implementation" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="tLlyI6g2dAklqoHCJuop-4">
<mxGeometry x="30" y="93" width="230" height="40" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-7" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fontColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="-286" y="190" width="330" height="200" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-8" value="&lt;h1 align=&quot;center&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;Geant&lt;br&gt;&lt;/font&gt;&lt;/h1&gt;&lt;h1 align=&quot;center&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;IP/MPLS Network&lt;/font&gt;&lt;br&gt;&lt;/h1&gt;" style="text;whiteSpace=wrap;html=1;fontColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="-211" y="230" width="205" height="70" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-9" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fontColor=#FFFFFF;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;fillColor=default;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-5" target="tLlyI6g2dAklqoHCJuop-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="170" y="160" as="sourcePoint" />
<mxPoint x="220" y="110" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-10" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fontColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.625;entryY=0.2;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-3" target="tLlyI6g2dAklqoHCJuop-7">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="140" y="190" as="sourcePoint" />
<mxPoint x="190" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-11" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;fontColor=#FFFFFF;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-3" target="tLlyI6g2dAklqoHCJuop-2">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="-320" y="20" as="sourcePoint" />
<mxPoint x="-220" y="-80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-12" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1084B9;fontSize=18;strokeColor=none;fontColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="210" y="-30" width="290" height="60" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-13" value="&lt;h1 style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;Inventory&lt;br&gt;&lt;/font&gt;&lt;/h1&gt;" style="text;whiteSpace=wrap;html=1;fontColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="268" y="-33" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-14" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fontColor=#000000;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;fillColor=default;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-12" target="tLlyI6g2dAklqoHCJuop-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="90" as="sourcePoint" />
<mxPoint x="140" y="-50" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-16" value="Global variables + Services" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="310" y="-62" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-17" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fontColor=#000000;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.004;entryY=0.113;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;fillColor=default;entryPerimeter=0;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-2" target="tLlyI6g2dAklqoHCJuop-13">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="-20" as="sourcePoint" />
<mxPoint x="282.5" y="-60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-18" value="&lt;font style=&quot;font-size: 15px;&quot;&gt;Netconf&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="-120" y="140" width="150" height="40" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-19" value="Updates via python scripts" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="44" y="-120" width="186" height="30" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-20" value="Sync every minute &amp;amp; on demand" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry y="-33" width="186" height="30" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-22" value="" style="shape=actor;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="342" y="-290" width="40" height="60" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-23" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-16" target="tLlyI6g2dAklqoHCJuop-22">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="430" y="-150" as="sourcePoint" />
<mxPoint x="530" y="-250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-24" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="tLlyI6g2dAklqoHCJuop-2" target="tLlyI6g2dAklqoHCJuop-22">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="-170" y="-190" as="sourcePoint" />
<mxPoint x="-70" y="-290" as="targetPoint" />
<Array as="points">
<mxPoint x="-80" y="-245" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-25" value="&lt;h1&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;Changes to intended configuration via MR&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 style=&quot;line-height: 50%;&quot;&gt;&lt;span style=&quot;font-size: 12px; font-weight: 400;&quot;&gt;We use Merge Requests to incorporate changes to the intended configuration or mechanics.&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
<mxGeometry x="390" y="-220" width="410" height="150" as="geometry" />
</mxCell>
<mxCell id="tLlyI6g2dAklqoHCJuop-26" value="&lt;h1&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;Apply changes to the live network&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 style=&quot;line-height: 50%;&quot;&gt;&lt;span style=&quot;font-size: 12px; font-weight: 400;&quot;&gt;Jenkins web interface is used to run changes in an ordered manner, leveraging pipelines.&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-68" y="-240" width="410" height="150" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
This diff is collapsed.
docs/assets/images/logo.png

2.78 KiB

[data-md-color-scheme="geant"] {
--md-primary-fg-color: #003F5F;
--md-default-fg-color--light: #4D798F;
--md-default-fg-color--dark: #002B41;
--md-primary-fg-color--light: #4D798F;
--md-primary-fg-color--dark: #003F5F;
--md-typeset-a-color: #ED1556;
--md-code-hl-string-color: #E24301;
--md-code-hl-function-color: #6D2077;
--md-code-hl-number-color: #ED1556;
--md-code-hl-special-color: #CC007B;
--md-code-hl-constant-color: #6D2077;
--md-footer-logo-dark-mode: none;
--md-footer-logo-light-mode: block;
}
[data-md-color-scheme="slate"] {
--md-primary-fg-color: #6D2077;
--md-typeset-a-color: #F05B89;
--md-default-fg-color--light: #D4DADA;
--md-default-fg-color--dark: #511259;
--md-primary-fg-color--light: #9D6AA2;
--md-primary-fg-color--dark: #6D2077;
--md-code-hl-string-color: #EA7E66;
--md-code-hl-function-color: #9D6AA2;
--md-code-hl-number-color: #F05B89;
--md-code-hl-special-color: #D85EA3;
--md-code-hl-constant-color: #9D6AA2;
--md-footer-logo-dark-mode: block;
--md-footer-logo-light-mode: none;
}
#logo_light_mode {
display: var(--md-footer-logo-light-mode);
width: 45px;
height: auto;
}
#logo_dark_mode {
display: var(--md-footer-logo-dark-mode);
width: 45px;
height: auto;
}
# GÉANT Automation Platform (GAP)
Welcome to the documentation of the GÉANT Automation Platform, or GAP for short.
The focus of this platform is configuration management and service orchestration for the GÉANT IP/MPLS network.
## What is GAP
GAP represents the vision of GÉANT in terms of Network Automation and Orchestration. It summarises a few years of
experimenting and initiatives in this field, with the aim of fulfilling the following objectives:
- To have a simple interface for managing the network service lifecycle (provisioning, termination, modification)
that ensures that the correct configuration is pushed onto the network
- To have a platform - not a single product - that is capable of adapting and evolving, according to GÉANT needs
- To have certainty that OSS/BSS systems are in sync with the actual configuration deployed in the network
- To introduce a different way of working that avoids fragmentation and silos
GAP is part based on Open Source Software, and part internally developed. GAP integrates with most of the tooling
already in use in GÉANT.
!!! abstract "Credits"
The OSS components that GAP uses are mainly:
- Workflow Orchestrator [https://workfloworchestrator.org/](https://workfloworchestrator.org/)
- Ansible [https://www.ansible.com/](https://www.ansible.com/)
More information about the GAP architecture is available in the [Architecture](architecture/index.md) section.
## About this documentation portal
!!! info
This documentation does not cover the design of network services, just the
modelling and the mechanics related to automation.
This site is organized in 4 main sections:
- [Architecture](architecture/index.md): covers the architecture of GAP
including all the components and the interactions between them
- [Admin guide](admin_guide/index.md): provides detailed information of
the domain models in WFO and all the Ansible mechanics
- [Workflows](workflow/index.md): provides operational guides of the
Workflow Orchestrator based GAP
The documentation provided in this portal is final and reviewed. For information
about the ongoing work please refer to the [internal wiki page](https://wiki.
geant.org/display/NNAT/GOAT+-+Geant+Orchestration+and+Automation+Team).
!!! Tip
For any info or clarification you can refer to `goat`@`geant.org`.
# Activate IP trunk
When the SharePoint checklist of a trunk is completed, this workflow is run to
take the subscription from `PROVISIONING` to `ACTIVE`. The operator is asked
to give a URL to the completed checklist.
# Activate Router
When the SharePoint checklist of a router is completed, this workflow is run to
take the subscription from `PROVISIONING` to `ACTIVE`. The operator is asked
to give a URL to the completed checklist.
# Create IP trunk
This the workflow that brings the subscription from `INACTIVE` to `PROVISIONING`.
The deployment of a new IPtrunk consist in the following steps:
- Fill the form with the necessary fields:
- SID
- Type
- Speed
- Nodes
- LAG interfaces with description
- LAG members with description
- WFO will query IPAM to retrieve the IPv4/IPv6 Networks necessary for the
trunk. The container to use is specified in `oss-params.json`
- The configuration necessary to deploy the LAG is generated and applied to the
destination nodes using the Ansible playbook `iptrunks.yaml` This is done first
in a dry mode (without committing) and then in a real mode committing the
configuration. The commit message has the `subscription_id` and the
`process_id`. Included in this, is the configuration necessary to enable LLDP on
the physical interfaces.
- Once the LAG interface is deployed, another Ansible playbook is called to
verify that IP traffic can actually flow over the trunk ( `iptrunk_checks.yaml`)
- Once the check is passed, the ISIS configuration will take place using the
same `iptrunks.yaml`. Also in this case first there is a dry run and then a
commit.
- After this step the ISIS adjacency gets checked using again
`iptrunks_checks.yaml`
The trunk is deployed with an initial ISIS metric of 90.000 to prevent traffic
to pass.
# Create Router
To add a new router to the GÉANT network, the `create_router` workflow must
be executed first. The intake form for this workflow requires the following
fields to be filled in:
* Trouble ticket number
* Router vendor
* Router site
* Hostname
* Terminal server port
* Router role
The hostname is validated, by checking that the resulting FQDN is not
already taken in IPAM.
!!! warning
The validation only checks whether the FQDN is already taken in IPAM,
**not** whether it is registered somewhere on the internet.
When the workflow is started, a subscription object is first instantiated in
the service database, containing all the information that was provided in
the input form at the beginning. Then, the loopback addresses are allocated
in IPAM, which results in both the IPv4 and IPv6 addresses in the product model.
Once allocated, the first dry run of deploying router configuration takes place.
An Ansible playbook is run, with all the attributes of the new router. This
is where GSO communicates with LSO, and the router configuration is checked,
but not committed to the machine.
After the dry run, the operator is presented with a view of the outcome of
this playbook. This is their opportunity to verify successful execution of
the Ansible playbook, and whether the difference in configuration is as
expected. If not, this is their chance to abort the workflow, and no harm is
done to the router.
When the operator confirms the outcome of this playbook execution, the
playbook runs once again, but it will also commit the configuration after
checking. With the new router configured, the IPAM resources are verified to
ensure this external system is configured correctly.
If the new router is a Nokia, all its interfaces are added to Netbox. This
is done to keep track of interface reservations and bookkeeping. For Juniper
routers, this does not need to take place. These existing devices are not
migrated into Netbox.
Finally, an Ansible playbook is run to verify that the connectivity and
optical power levels of the router are in order. Once this is completed, a
checklist item is created in SharePoint and the router is taken into the
`PROVISIONING` state.
# Create Site
The `create_site` workflow creates a new site object in the service database,
and sets the subscription lifecycle to `ACTIVE`. The attributes that are input
using the intake form of the workflow are stored, and nothing else happens.
# Deploy TWAMP
Takes a trunk that is either `PROVISIONING` or `ACTIVE` and deploy configuration
for TWAMP. The trunk will not change state after running this workflow.
# Workflows
This section contains an overview of all documented workflows in GAP.
# Migrate IP trunk
Migrate one side of an IP trunk from one router to another. In the input form,
the operator selects a new router where this trunk should terminate on.
# Modify connection strategy
Run this workflow to change the way Ansible playbooks connect to a router.
Either via OOB access, or directly to the loopback interface.
# Modify ISIS metric
This workflow modifies the ISIS metric of a trunk.
The strategy is to re-apply the necessary template to the configuration
construct: using a "replace" strategy only the necessary modifications will be
applied.
# Modify Router Kentik license
Change the license of a router in Kentik. The operator can select the license
from a list of all available plans in Kentik, and it will show the utilisation
of each license.
# Modify Site
Attributes of an existing site can be modified using the `modify_site` workflow.
As a result, other subscriptions that rely on this site will have referenced
attributes updated as well.
!!! warning
Be aware that although this *does* update attributes in the services
database, it does **not** update any active subscription instances that are
already deployed. You will need to run additional workflows to update
subscriptions that depend on this change
# Modify IP trunk interface
Modifies LAG interfaces and members. This is used to increase capacity or to
change SID/interface descriptions.
The strategy is to re-apply the necessary template to the configuration
construct: using a "replace" strategy only the necessary modifications will be
applied.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment