diff --git a/.gitignore b/.gitignore index 9cab947d828bd79f34ca62c75823b46f4a0fe412..ee3252b6a09193591476ad5c9c433e5f6eacd12e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /site/ /.ahoy.l3d /.env -/docs/diagrams/out/ +/docs/diagrams/uml/out/ diff --git a/docs/devops/alm/alm.md b/docs/devops/alm/alm.md new file mode 100644 index 0000000000000000000000000000000000000000..e5bb7f8b1eba8b80c27753993309877f00f6fa16 --- /dev/null +++ b/docs/devops/alm/alm.md @@ -0,0 +1,129 @@ +# Application Lifecycle Management (ALM) + +The ALM is one of our most important topics in our development strategy. Here, you gain an insight of our company's +philosophy concerning lean and professional software development. + +This document describes the different roles of our configuration management. Principles, features and tools are +explained in detail. This document is linked to our [Hosting & Maintenance](./hosting_maintain) document, where we also follow our +philosophy. + +## Roles + +To satisfy the principle of separation of concerns, we have defined specific roles, which are involved +in our ALM. Every role has different requirements and expectations from the environment they are working in. + +The roles are: + +### Customer + +First of all, the ALM is designed to provide the biggest benefit for our customers. The customer expects working +software and wants to see results as fast as possible. This leads to short feedback cycles, a faster progress and +a good communication between the customer and ourselves. + +So, the customer and their product can have a short time to market. + +### Developer + +This role has the most interactions with the ALM environment. A developer has the following requirements: + +* fast setup of a developer environment +* enable collaboration in a developer team +* a proper way to communicate with the customer +* of course, develop the software +* fast execution of tests +* short feedback cycles with the building system + +### Builder + +Although in our case the builder role is a machine, it is described here as well. The reason is we want the builder to work +completely automated. Here, the focus is on consistency. So, e.g., the tests +should run as fast as possible, but since this process is automated, it is not that time critical. The builder logs all the build steps and satisfy the fail fast principle. This means the build immediately stops, +when something is wrong. Those build failures must be reported to the developers, so they can fix them as +soon as possible. + +## Overview + +Here you can see the complete process of our ALM and how it satisfies all the goals and requirements of each +role described above. + + + +First, we start with the role developer in the bottom right. One of the most important interactions for a developer +is with the repository. We use GitLab for our entire configuration management. Everything a developer needs to work with, is stored here: + +* Source Code in GIT repositories +* Developer Tools in Docker Images +* Documentation in Wiki projects + +We also use GitLab as our ticket system, where we can interact with the customer and other teammates. For our Drupal +development the toolset allows us to pull data from the live system. This allows the developer to work with the real +data or to reproduce bugs as fast as possible. The developer has the total control of the process. They can work and run the tests on their local machine +and when they decide to push a change, the builder role gets triggered. The builder takes the same Docker images from GitLab (without the developer tools) +and starts to build the project. This is important, because we follow the DRY (don't repeat yourself) principle, and the builder should +use the same tools as the developer. The building process covers the following steps: + +* Build +* Prepare +* Test (Unit, Integration, Visual Behaviour, Code Style, etc.) + +If all the phases are passed, the site gets deployed depending on the branch, like "Feature A", "Test" or "Live". This is completely automated. The +deployment scripts are written with Ansible, which are also stored in GitLab projects. So, after a build was successful, the customer can see the results +immediately on the specific version. For instance, if we work on a feature, and a product increment is ready, the customer can use and provide feedback in +a little while. + +To summarize our process the following chapters provide a comprehensive list of our features, principles and the tools in use. + +## Features and Principles + +### Infrastructure as Code + +This is one of our key concepts. All our code for creating our infrastructure and tools is stored in Ansible scripts +in our GitLab. These scripts can always be executed through jobs in a build pipeline. + +### Provide customer benefit as fast as possible + +After a product increment or an entire feature is implemented, the customer can see the result in a few minutes. The customer has access to +our GitLab projects which include the ticket system and pipelines. + +### Provide Quality Software + +Of course developers strive to provide good software, and they can write and execute the tests on their local machine. +But we go a step further. In our build pipeline every test gets executed automatically and fails if something goes wrong. +If this happens, nothing gets deployed, so we can always provide a running system. + +### Single point of entry + +The customer just can go the specific GitLab project and contact us by opening a ticket. They can also follow the progress in Kanban Boards or even +in the build pipelines. + +The same goes for the developers. They are working on the code base, which is managed by GitLab. Even the tools for development are managed by GitLab. + +### Keep Drupal Configuration up to date + +As you can see in the overview picture above, there is a connection between the live configuration and the GitLab repository. If someone updates +the configuration on the website, the changes are pushed to the Git repository. This assures an actual system and retracing the changes that are made. + +### Open Source Toolset + +You do not need a paid licence for using Drupal of course. We want to keep this philosophy for our tools as well. All deployment scripts and developer tools are +free to use for everyone. This allows to raise the quality, and the number of features, so everybody can benefit from. + +### Easy entry area for Drupal developers + +Developers just need Docker on their local machine. The development tool L3D, which is open source, creates all the Docker containers needed for +developing Drupal. This also includes debugging and testing. Now, the developer can use the IDE of their choice. + +## Tools + +Here you see our tools, which are involved in our ALM. As you can see, we make heavy use of GitLab. This allows us to maintain just one tool, +which provides a huge set of features and a single point of entry for our customers. We also want to satisfy our principle of separation of concerns. Every tool +is designed to achieve a specific goal and just using it for this. + +| Function | Tool | +| --- | --- | +| Repo / Versioning | [GitLab](https://about.gitlab.com) | +| Issues / Communication | [GitLab](https://about.gitlab.com) | +| Agile Planning | [GitLab](https://about.gitlab.com) | +| CI/CD Pipelines | [GitLab](https://about.gitlab.com) | +| Drupal Development | [Docker](https://www.docker.com) | +| Deployment | [Ansible](https://www.ansible.com) | diff --git a/docs/devops/alm/hosting_maintain.md b/docs/devops/alm/hosting_maintain.md new file mode 100644 index 0000000000000000000000000000000000000000..81e811e932d9ec0bdad87a439e8c901e4220ce32 --- /dev/null +++ b/docs/devops/alm/hosting_maintain.md @@ -0,0 +1,111 @@ +# Hosting and Maintenance + +This document gives a comprehensive overview of all important concepts, components and tools in use. As you will see +one of our key expertise is to automate monitoring to provide an excellent quality concerning stability. + +This document is also linked to the document [ALM](alm), where you find similar philosophies and principles. + +## Overview + + + +The following features explain our environment in a more detailed fashion. + +### Infrastructure as Code + +This is one of our key concepts. All our code for creating our infrastructure and tools is stored in Ansible scripts +in our GitLab. These scripts can always be executed through jobs in a build pipeline. It is also a key part of +our recovery concept described later in this document. + +### Live Monitoring + +By using sensors and heartbeats, we can monitor a host by checking: + +* If the host is running +* CPU +* Memory Usage +* Disk I/O +* Network + +We use the tool Netdata, several thousand metrics are monitored every second, e.g.: + +* MySQL +* Docker +* Apache +* etc. + +### Extensive Logging + +As you can see in the picture above, we collect the logs from every host and from every application in use. This is a huge amount of data, +so we use Elasticsearch for analysis. This analysis can also result in an alert, which is sent to our alerting system described below. + +### High-Quality Analysis + +With Netdata and logging in place we can provide a comprehensive analysis of all our components. It allows us to retrace problems or even +avoid problems, which might appear in the future. + +### Alert Deduplication + +As seen in the picture this component has four incoming channels: + +* Result of the Log Analysis +* Host sensors +* Host heartbeats +* Applications + +This component is critical because it acts as a single pool of alerts for the DevOps staff. +We want to avoid duplications to get a clear overview of what has happened. + +### Automatic Ticket Creation + +Our alert deduplication component will create tickets in GitLab automatically, when something goes wrong. This allows us to react as fast as +possible to take care of the potential problem. + +### CI / CD Pipelines and Communication + +The tasks defined in the pipelines can be triggered from various sources, like: +* Schedule, e.g. running every night +* Action of a developer in Git (our VCS) +* Command from the communication platform. We use the ChatOps feature in Mattermost. + +The tasks are developed once to satisfy our goal of DRY (don't repeat yourself). These tasks can be used from different triggers. + +### Result of CI / CD Pipelines + +The pipelines have three main goals: + +* Provisioning: Covers all the tools of the host +* Maintenance: Covers the configuration of the applications +* Deployment: Install and update the application + +### Manage Configuration in Repository + +Configuration of a host is managed by the Git repositories. This allows us to easily keep track and recover the system. This concept is +explained in the next chapter. + +## Recovery + +The following components are backed up by the 3-2-1 philosophy and can be recovered. + + + +Note: The DB and User Data recovery duration cannot be determined due to the amount of data and network speed. + +## Tools + +| Function | Tool | +| --- | --- | +| Repo / Versioning | [GitLab](https://about.gitlab.com) | +| Issues | [GitLab](https://about.gitlab.com) | +| CI/CD Pipelines | [GitLab](https://about.gitlab.com) | +| Communication | [Mattermost](https://mattermost.com/) | +| Provisioning / Deployment / Maintenance | [Ansible](https://www.ansible.com) | +| Alert Deduplication | [Alerta](https://alerta.io) | +| Sensors | [Netdata](https://www.netdata.cloud/) and [Beats](https://www.elastic.co/beats/) | +| Heartbeats | [curl](https://curl.se/) | +| Log Collection | [TD-Agent](https://docs.fluentd.org/) | +| Log Aggregation | [Elasticsearch](https://www.elastic.co/elasticsearch/) | +| Log Visualizing | [Kibana](https://www.elastic.co/kibana) | +| Log Analysis | [ElastAlert](https://elastalert.readthedocs.io/en/latest/) | +| Ping | [Netdata API](https://learn.netdata.cloud/docs) | +| Backup | [Borg Backup](https://www.borgbackup.org/) | diff --git a/docs/devops/alm/tools.md b/docs/devops/alm/tools.md new file mode 100644 index 0000000000000000000000000000000000000000..1810d113bf8d0e9b8e4b2350a50b7d0d319ee9b5 --- /dev/null +++ b/docs/devops/alm/tools.md @@ -0,0 +1,17 @@ +# Tools used for DevOps + +| Function | Tool | +| --- | --- | +| Repo / Versioning | GitLab | +| Issues | GitLab | +| CI/CD Pipelines | GitLab | +| Communication | Mattermost | +| Provisioning / Deployment / Maintenance | Ansible | +| Alert Deduplication | Alerta | +| Sensors | Netdata + Beats | +| Heartbeats | curl | +| Log Collection | TD-Agent | +| Log Aggregation | ElasticSearch | +| Log Visualizing | Kibana | +| Log Analyzing | ElastAlert | +| Ping | Netdata API | diff --git a/docs/diagrams/alm/alm.svg b/docs/diagrams/alm/alm.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb4c0dfcf215c3d4464fafd82ec7c49a033ba21b --- /dev/null +++ b/docs/diagrams/alm/alm.svg @@ -0,0 +1,1136 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + sodipodi:docname="alm.svg" + inkscape:version="1.0 (4035a4f, 2020-05-01)" + id="svg6441" + version="1.1" + viewBox="0 0 297 210" + height="210mm" + width="297mm"> + <defs + id="defs6435"> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker9083" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path9081" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker8937" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path8935" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker8805" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path8803" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker8679" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path8677" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker8573" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path8571" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker8437" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path8435" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleInM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker8337" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path8335" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker8157" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path8155" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="TriangleInM" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1341" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7987" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7985" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker7905" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7903" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7817" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7815" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker7727" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7725" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7637" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7635" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker7573" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7571" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7493" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7491" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker7439" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path7437" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker7309" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7307" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="TriangleOutM" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1350" /> + </marker> + <rect + id="rect7124" + height="65.65558" + width="45.696283" + y="124.7456" + x="143.65441" /> + </defs> + <sodipodi:namedview + inkscape:snap-global="false" + inkscape:snap-nodes="false" + inkscape:snap-others="false" + inkscape:window-maximized="1" + inkscape:window-y="23" + inkscape:window-x="0" + inkscape:window-height="1315" + inkscape:window-width="2560" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="mm" + inkscape:cy="529.378" + inkscape:cx="500.03125" + inkscape:zoom="1.0074671" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> + <metadata + id="metadata6438"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <rect + y="70.63636" + x="88.232056" + height="136.31905" + width="115.04665" + id="rect7140" + style="fill:#7acccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.446922" /> + <rect + y="154.68454" + x="226.43523" + height="49.635616" + width="67.439163" + id="rect6461" + style="fill:#51f220;fill-opacity:0.0769231;stroke:#000000;stroke-width:0.403521" /> + <text + id="text7026" + y="181.2094" + x="244.76399" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:7.05556px;stroke-width:0.264583" + y="181.2094" + x="244.76399" + id="tspan7024" + sodipodi:role="line">Developer</tspan></text> + <rect + y="129.68303" + x="93.738503" + height="75.180054" + width="100.35706" + id="rect7028" + style="fill:#d7984c;fill-opacity:0.04858303;stroke:#000000;stroke-width:0.393446" /> + <text + id="text7032" + y="137.08884" + x="102.16008" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="137.08884" + x="102.16008" + id="tspan7030" + sodipodi:role="line">Repositories</tspan></text> + <text + id="text7036" + y="190.40117" + x="102.42271" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="190.40117" + x="102.42271" + id="tspan7034" + sodipodi:role="line">Trigger</tspan></text> + <text + id="text7040" + y="147.0685" + x="163.03415" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="147.0685" + x="163.03415" + id="tspan7038" + sodipodi:role="line">Customer</tspan></text> + <text + id="text7044" + y="154.90773" + x="162.84122" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="154.90773" + x="162.84122" + id="tspan7042" + sodipodi:role="line">bitegra Sol.</tspan></text> + <text + id="text7048" + y="162.6367" + x="162.84122" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="162.6367" + x="162.84122" + id="tspan7046" + sodipodi:role="line">bower</tspan></text> + <text + id="text7052" + y="170.36569" + x="162.84122" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="170.36569" + x="162.84122" + id="tspan7050" + sodipodi:role="line">packagist</tspan></text> + <text + id="text7056" + y="177.91" + x="163.22983" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="177.91" + x="163.22983" + id="tspan7054" + sodipodi:role="line">Java</tspan></text> + <text + id="text7060" + y="185.82365" + x="162.79988" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="185.82365" + x="162.79988" + id="tspan7058" + sodipodi:role="line">Docker</tspan></text> + <text + id="text7064" + y="193.55264" + x="162.79988" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="193.55264" + x="162.79988" + id="tspan7062" + sodipodi:role="line">Drupal</tspan></text> + <rect + y="78.479721" + x="172.30959" + height="15.583414" + width="21.812675" + id="rect7066" + style="fill:#00f6f6;fill-opacity:1;stroke:#000000;stroke-width:0.338505" /> + <text + id="text7070" + y="87.978477" + x="176.74481" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="87.978477" + x="176.74481" + id="tspan7068" + sodipodi:role="line">Wiki</tspan></text> + <rect + y="73.546501" + x="93.505798" + height="50.661587" + width="64.843193" + id="rect7072" + style="fill:#00f6f6;fill-opacity:1;stroke:#000000;stroke-width:0.489519" /> + <text + id="text7102" + y="93.756157" + x="135.25049" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="93.756157" + x="135.25049" + id="tspan7100" + sodipodi:role="line">Issues</tspan><tspan + id="tspan7104" + style="stroke-width:0.264583" + y="100.81171" + x="135.25049" + sodipodi:role="line">Tickets</tspan></text> + <rect + y="75.635223" + x="97.695488" + height="7.8786745" + width="31.252058" + id="rect7074" + style="fill:#7acccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.465" /> + <text + id="text7108" + y="80.625046" + x="105.31154" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="80.625046" + x="105.31154" + id="tspan7106" + sodipodi:role="line">DevOps</tspan></text> + <rect + style="fill:#52cccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.465" + id="rect7110" + width="31.252058" + height="7.8786745" + x="97.695488" + y="85.614876" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="105.31154" + y="90.604698" + id="text7114"><tspan + sodipodi:role="line" + id="tspan7112" + x="105.31154" + y="90.604698" + style="stroke-width:0.264583">ALM</tspan></text> + <rect + y="95.331902" + x="97.695488" + height="7.8786745" + width="31.252058" + id="rect7116" + style="fill:#52cccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.465" /> + <text + id="text7120" + y="100.32172" + x="105.31154" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="100.32172" + x="105.31154" + id="tspan7118" + sodipodi:role="line">Prod Mgt</tspan></text> + <text + style="line-height:1.25;font-family:sans-serif;font-size:3.52777778000000009px;white-space:pre;shape-inside:url(#rect7124);" + id="text7122" + xml:space="preserve" /> + <rect + y="105.04893" + x="97.695488" + height="7.8786745" + width="31.252058" + id="rect7128" + style="fill:#52cccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.465" /> + <text + id="text7132" + y="110.03875" + x="105.31154" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="110.03875" + x="105.31154" + id="tspan7130" + sodipodi:role="line">Customer</tspan></text> + <rect + style="fill:#52cccc;fill-opacity:0.048583;stroke:#000000;stroke-width:0.465" + id="rect7134" + width="31.252058" + height="7.8786745" + x="97.695488" + y="114.76595" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="105.31154" + y="119.75578" + id="text7138"><tspan + sodipodi:role="line" + id="tspan7136" + x="105.31154" + y="119.75578" + style="stroke-width:0.264583">User</tspan></text> + <rect + style="fill:#b3b3b3;fill-opacity:0.259109;stroke:#000000;stroke-width:0.40274" + id="rect6461-8" + width="67.177322" + height="49.636398" + x="4.0976439" + y="153.50233" /> + <text + id="text7159" + y="178.84579" + x="28.625834" + style="font-size:6.35px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="178.84579" + x="28.625834" + id="tspan7157" + sodipodi:role="line">Build</tspan></text> + <rect + y="116.43558" + x="3.7980111" + height="32.902588" + width="67.513962" + id="rect7161" + style="fill:#b3b3b3;fill-opacity:0.259109;stroke:#000000;stroke-width:0.328719" /> + <text + xml:space="preserve" + style="font-size:6.35px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="24.423876" + y="134.98787" + id="text7165"><tspan + sodipodi:role="line" + id="tspan7163" + x="24.423876" + y="134.98787" + style="stroke-width:0.264583">Prepare</tspan></text> + <rect + style="fill:#b3b3b3;fill-opacity:0.259109;stroke:#000000;stroke-width:0.403521" + id="rect7167" + width="67.439163" + height="49.635616" + x="3.5727897" + y="63.685894" /> + <text + id="text7171" + y="106.88728" + x="41.231705" + style="font-size:6.35px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="106.88728" + x="41.231705" + id="tspan7169" + sodipodi:role="line">Test</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="6.7704115" + y="72.22113" + id="text7175"><tspan + sodipodi:role="line" + id="tspan7173" + x="6.7704115" + y="72.22113" + style="font-size:4.93889px;stroke-width:0.264583">Custom</tspan></text> + <text + id="text7179" + y="72.22113" + x="6.7704115" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="72.22113" + x="6.7704115" + id="tspan7177" + sodipodi:role="line">Custom</tspan></text> + <text + id="text7187" + y="79.574554" + x="6.7704115" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="79.574554" + x="6.7704115" + id="tspan7185" + sodipodi:role="line">Visual</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="6.7704115" + y="86.665359" + id="text7191"><tspan + sodipodi:role="line" + id="tspan7189" + x="6.7704115" + y="86.665359" + style="font-size:4.93889px;stroke-width:0.264583">Behavior</tspan></text> + <text + id="text7195" + y="94.018784" + x="6.7704115" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="94.018784" + x="6.7704115" + id="tspan7193" + sodipodi:role="line">Unit</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="6.7704115" + y="72.22113" + id="text7199"><tspan + sodipodi:role="line" + id="tspan7197" + x="6.7704115" + y="72.22113" + style="font-size:4.93889px;stroke-width:0.264583">Custom</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="6.7704115" + y="100.58434" + id="text7203"><tspan + sodipodi:role="line" + id="tspan7201" + x="6.7704115" + y="100.58434" + style="font-size:4.93889px;stroke-width:0.264583">Code Style</tspan></text> + <rect + y="9.8475428" + x="4.0972528" + height="49.637184" + width="66.915482" + id="rect7205" + style="fill:#b3b3b3;fill-opacity:0.259109;stroke:#000000;stroke-width:0.401958" /> + <text + xml:space="preserve" + style="font-size:6.35px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="25.211742" + y="35.979252" + id="text7209"><tspan + sodipodi:role="line" + id="tspan7207" + x="25.211742" + y="35.979252" + style="stroke-width:0.264583">Deploy</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="45.04398" + y="86.043045" + id="text7171-7"><tspan + sodipodi:role="line" + id="tspan7169-6" + x="45.04398" + y="86.043045" + style="font-size:4.93889px;stroke-width:0.264583">All OK?</tspan></text> + <ellipse + ry="7.7473583" + rx="14.444228" + cy="84.433075" + cx="53.837578" + id="path7229" + style="fill:#b33eb3;fill-opacity:0.25910902;stroke:#000000;stroke-width:0.465" /> + <path + id="path7233" + d="M 68.281803,84.564386 C 97.6955,89.55421 97.6955,89.55421 97.6955,89.55421" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#TriangleOutM)" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="77.076157" + y="84.30217" + id="text7048-8"><tspan + sodipodi:role="line" + id="tspan7046-3" + x="77.076157" + y="84.30217" + style="font-size:4.23333px;stroke-width:0.264583">no</tspan></text> + <text + id="text7048-8-9" + y="68.911011" + x="57.434742" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="68.911011" + x="57.434742" + id="tspan7303" + sodipodi:role="line">yes</tspan></text> + <path + id="path7305" + d="M 54.62544,75.89785 C 51.473972,50.94873 51.473972,50.94873 51.473972,50.94873" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7309);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path7347" + d="m 60.665753,13.918983 c 219.552257,0 219.552257,0 219.552257,0" + style="fill:none;stroke:#000000;stroke-width:0.865;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + y="22.564505" + x="87.694839" + height="14.486257" + width="38.122265" + id="rect7349" + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.222972;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + id="text7353" + y="31.252054" + x="95.331909" + style="font-size:4.9389px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + id="tspan7355" + style="stroke-width:0.264583" + y="31.252054" + x="95.331909" + sodipodi:role="line">Feature B</tspan></text> + <rect + y="38.60548" + x="96.119766" + height="6.3029356" + width="23.373384" + id="rect7359" + style="fill:#0bf412;fill-opacity:0.956012;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7361" + width="23.373384" + height="6.3029356" + x="96.119766" + y="45.958904" /> + <text + id="text7367" + y="42.807438" + x="102.94795" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="42.807438" + x="102.94795" + id="tspan7365" + sodipodi:role="line">Data</tspan></text> + <text + id="text7371" + y="50.160866" + x="102.16008" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="50.160866" + x="102.16008" + id="tspan7369" + sodipodi:role="line">Config</tspan></text> + <rect + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.222972;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7373" + width="38.122265" + height="14.486257" + x="132.34064" + y="22.301882" /> + <text + xml:space="preserve" + style="font-size:4.93890000000000029px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;-inkscape-font-specification:'sans-serif, Normal';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;" + x="139.97771" + y="30.989431" + id="text7377"><tspan + id="tspan7429" + sodipodi:role="line">Feature A</tspan></text> + <rect + style="fill:#0bf412;fill-opacity:0.956012;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7379" + width="23.373384" + height="6.3029356" + x="140.76556" + y="38.342857" /> + <rect + y="45.696281" + x="140.76556" + height="6.3029356" + width="23.373384" + id="rect7381" + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="147.59375" + y="42.544815" + id="text7385"><tspan + sodipodi:role="line" + id="tspan7383" + x="147.59375" + y="42.544815" + style="stroke-width:0.264583">Data</tspan></text> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="146.80588" + y="49.898243" + id="text7389"><tspan + sodipodi:role="line" + id="tspan7387" + x="146.80588" + y="49.898243" + style="stroke-width:0.264583">Config</tspan></text> + <rect + y="22.301882" + x="176.98643" + height="14.486257" + width="38.122265" + id="rect7391" + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.222972;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + id="text7395" + y="31.252054" + x="190.92644" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="31.252054" + x="190.92644" + id="tspan7431" + sodipodi:role="line">Test</tspan></text> + <rect + y="38.342857" + x="185.41136" + height="6.3029356" + width="23.373384" + id="rect7397" + style="fill:#0bf412;fill-opacity:0.956012;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7399" + width="23.373384" + height="6.3029356" + x="185.41136" + y="45.696281" /> + <text + id="text7403" + y="42.544815" + x="192.23955" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="42.544815" + x="192.23955" + id="tspan7401" + sodipodi:role="line">Data</tspan></text> + <text + id="text7407" + y="49.898243" + x="191.45168" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="49.898243" + x="191.45168" + id="tspan7405" + sodipodi:role="line">Config</tspan></text> + <rect + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.222972;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7409" + width="38.122265" + height="14.486257" + x="222.15747" + y="22.039259" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="236.36009" + y="30.726809" + id="text7413"><tspan + y="30.726809" + x="236.36009" + id="tspan7427" + sodipodi:role="line">Live</tspan></text> + <rect + style="fill:#0bf412;fill-opacity:0.956012;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" + id="rect7415" + width="23.373384" + height="6.3029356" + x="230.5824" + y="38.080235" /> + <rect + y="45.433659" + x="230.5824" + height="6.3029356" + width="23.373384" + id="rect7417" + style="fill:#ffcc00;fill-opacity:0.259109;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="237.41058" + y="42.282192" + id="text7421"><tspan + sodipodi:role="line" + id="tspan7419" + x="237.41058" + y="42.282192" + style="stroke-width:0.264583">Data</tspan></text> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="236.62271" + y="49.63562" + id="text7425"><tspan + sodipodi:role="line" + id="tspan7423" + x="236.62271" + y="49.63562" + style="stroke-width:0.264583">Config</tspan></text> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path7435" + d="m 106.88728,14.444227 -0.0743,9.433389" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7439)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7493)" + d="m 152.05832,14.181605 -0.0743,9.433389" + id="path7489" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path7569" + d="m 196.44149,13.918983 -0.0743,9.433389" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7573)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7637)" + d="m 241.61253,13.918983 -0.0743,9.433389" + id="path7633" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" /> + <path + id="path7723" + d="M 243.71623,50.942995 C 233.57336,118.03723 185.90187,144.71949 185.90187,144.71949" + style="fill:none;stroke:#000000;stroke-width:0.4538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7727)" /> + <path + inkscape:connection-end="#rect7397" + inkscape:connection-start="#rect7415" + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path7807" + d="m 230.5824,41.299648 -21.79765,0.126731" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7987);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + inkscape:connection-end="#rect7379" + inkscape:connection-start="#rect7397" + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path7809" + d="M 185.41136,41.494325 H 164.13895" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7905);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + inkscape:connection-end="#rect7359" + inkscape:connection-start="#rect7379" + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path7813" + d="m 140.76556,41.563071 -21.27241,0.125132" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7817);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path8073" + d="m 191.71563,92.019324 76.31315,68.866636" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.533314;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInM);marker-end:url(#marker8157)" /> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path8333" + d="m 153.63828,101.11653 94.01034,61.43974" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.475;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8337);marker-end:url(#marker8437);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path8569" + d="m 190.6638,158.36126 c 44.90842,16.80782 44.90842,16.80782 44.90842,16.80782" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker8679);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path8801" + d="m 226.38044,178.8458 c -38.34286,-0.52525 -38.34286,-0.52525 -38.34286,-0.52525" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker8805);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path8933" + d="m 254.2184,41.231703 c 26.26223,0 26.26223,0 26.26223,0 l 0.26263,104.523677" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker8937);stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + y="147.59375" + x="269.18787" + height="6.3029356" + width="23.373384" + id="rect9071" + style="fill:#0bf412;fill-opacity:0.956012;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + id="text9075" + y="151.53308" + x="275.49078" + style="font-size:3.52776999999999985px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;-inkscape-font-specification:'sans-serif, Normal';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;" + xml:space="preserve"><tspan + id="tspan9077" + sodipodi:role="line">Data</tspan></text> + <path + id="path9225" + d="m 161.77535,146.28063 v 0 c 0,0 -23.63601,17.85832 -39.39335,40.44383 24.42388,-19.43404 39.91859,-32.82778 39.91859,-32.82778" + style="fill:none;stroke:#000000;stroke-width:0.26458299;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:0.26458299,0.79374896;stroke-dashoffset:0" /> + <path + id="path9227" + d="m 163.08846,161.77535 v -0.26263 c 0,0 -6.04031,4.46458 -40.18122,24.6865 39.65597,-16.5452 39.65597,-16.5452 39.65597,-16.5452" + style="fill:none;stroke:#000000;stroke-width:0.26458299;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:0.26458299,0.52916597;stroke-dashoffset:0" /> + <path + id="path9229" + d="m 162.82584,177.00744 c 0,0 0,0 -39.39335,9.4544 38.8681,-2.3636 38.8681,-2.3636 38.8681,-2.3636" + style="fill:none;stroke:#000000;stroke-width:0.26458299;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:0.26458299,0.52916597;stroke-dashoffset:0" /> + <path + id="path9231" + d="m 124.22035,186.19922 c 39.13073,5.77769 39.13073,5.77769 39.13073,5.77769" + style="fill:none;stroke:#000000;stroke-width:0.26458299;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:0.26458299,0.52916597;stroke-dashoffset:0" /> + <path + id="path9245" + d="m 102.16008,188.82544 c -43.07006,0 -43.07006,0 -43.07006,0" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9083);stroke-miterlimit:4;stroke-dasharray:none" /> + </g> +</svg> diff --git a/docs/diagrams/alm/overview.svg b/docs/diagrams/alm/overview.svg new file mode 100644 index 0000000000000000000000000000000000000000..9e0ee1738ff1162312f4c65ea3c629f116e10012 --- /dev/null +++ b/docs/diagrams/alm/overview.svg @@ -0,0 +1,956 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + sodipodi:docname="overview.svg" + inkscape:version="1.0 (4035a4f, 2020-05-01)" + id="svg8" + version="1.1" + viewBox="0 0 210 297" + height="297mm" + width="210mm"> + <defs + id="defs2"> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker6205" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6203" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker5989" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path5987" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker5627" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path5625" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker5399" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path5397" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker5215" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path5213" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker5011" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path5009" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleInM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker4839" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4837" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker4619" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path4617" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker4451" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4449" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker4289" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path4287" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker4119" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4117" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker3937" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path3935" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker3793" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3791" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker3627" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path3625" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker3489" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3487" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker3145" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path3143" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3027" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path3025" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2889" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path2887" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2783" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path2781" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker2647" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2645" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2553" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path2551" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker2451" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2449" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2327" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path2325" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2251" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path2249" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleInM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker2091" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path2089" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker1965" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1963" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker1913" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1911" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker1785" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1783" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker1745" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleInM"> + <path + transform="scale(-0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1743" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker1647" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1645" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleInM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker1607" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1605" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(-0.4)" /> + </marker> + <rect + id="rect861" + height="45.357143" + width="185.20833" + y="343.20238" + x="-461.13095" /> + <linearGradient + osb:paint="solid" + id="linearGradient855"> + <stop + id="stop853" + offset="0" + style="stop-color:#f2f2f2;stop-opacity:1;" /> + </linearGradient> + </defs> + <sodipodi:namedview + inkscape:snap-global="false" + inkscape:snap-center="false" + inkscape:snap-nodes="true" + inkscape:snap-bbox="false" + inkscape:object-nodes="false" + inkscape:snap-others="true" + inkscape:window-maximized="1" + inkscape:window-y="23" + inkscape:window-x="0" + inkscape:window-height="1315" + inkscape:window-width="2560" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="mm" + inkscape:cy="583.15467" + inkscape:cx="572.01299" + inkscape:zoom="0.9983453" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <rect + y="253.34691" + x="18.947489" + height="16.684063" + width="46.218575" + id="rect1181" + style="fill:#f2f2f2;stroke:#000000;stroke-width:0.234649;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text1185" + y="260.51865" + x="28.681274" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="260.51865" + x="28.681274" + id="tspan1183" + sodipodi:role="line">Repository</tspan><tspan + id="tspan1187" + style="stroke-width:0.264583" + y="265.8103" + x="28.681274" + sodipodi:role="line">Versioning</tspan></text> + <rect + style="fill:#f2f2f2;stroke:#000000;stroke-width:0.238539;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1189" + width="47.731716" + height="16.69521" + x="79.457191" + y="253.34135" /> + <text + id="text1193" + y="260.28812" + x="87.701424" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="260.28812" + x="87.701424" + id="tspan1191" + sodipodi:role="line">Communication</tspan><tspan + id="tspan1195" + style="stroke-width:0.264583" + y="265.57977" + x="87.701424" + sodipodi:role="line">intern / extern </tspan></text> + <rect + y="253.11079" + x="141.93558" + height="16.69521" + width="47.731716" + id="rect1197" + style="fill:#f2f2f2;stroke:#000000;stroke-width:0.238539;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text1201" + y="262.36298" + x="157.78787" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="262.36298" + x="157.78787" + id="tspan1199" + sodipodi:role="line">Issues</tspan></text> + <path + inkscape:connection-end="#rect1189" + inkscape:connection-start="#rect1197" + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path1603" + d="m 141.93558,261.54647 -14.74667,0.0544" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1607);marker-end:url(#marker1647)" /> + <path + inkscape:connection-end="#rect1189" + inkscape:connection-start="#rect1181" + inkscape:connector-curvature="0" + inkscape:connector-type="orthogonal" + id="path1741" + d="M 65.166063,261.68894 H 79.457191" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1745);marker-end:url(#marker1785)" /> + <path + id="path1909" + d="M 166.95007,269.59656 C 98.109699,290.74703 40.800275,269.98808 40.800275,269.98808" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1913);marker-end:url(#marker1965)" /> + <rect + y="205.63522" + x="35.491188" + height="28.400826" + width="67.624062" + id="rect2081" + style="fill:#f2f2f2;stroke:#000000;stroke-width:0.421517;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text2085" + y="220.49818" + x="49.029045" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="220.49818" + x="49.029045" + id="tspan2083" + sodipodi:role="line">CI / CD Pipelines</tspan></text> + <path + id="path2087" + d="m 42.403498,234.0143 c 0,19.08158 0,19.3466 0,19.3466" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2091);marker-end:;stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path2549" + d="m 94.347783,234.0143 c 0,19.08158 0,19.08158 0,19.08158" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2553);marker-end:url(#marker2647);stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + style="fill:#f2f2f2;stroke:#000000;stroke-width:0.421517;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect2771" + width="67.624062" + height="28.400826" + x="113.67265" + y="205.63522" /> + <text + id="text2775" + y="216.78787" + x="128.53561" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="216.78787" + x="128.53561" + id="tspan2773" + sodipodi:role="line">Alert </tspan><tspan + id="tspan2777" + style="stroke-width:0.264583" + y="223.84343" + x="128.53561" + sodipodi:role="line">Deduplication</tspan></text> + <path + id="path2779" + d="m 121.11499,234.0143 c -0.26502,19.08158 -0.26502,19.08158 -0.26502,19.08158" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker2889);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path3023" + d="m 160.60325,234.0143 c 0,18.81656 0,18.81656 0,18.81656" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker3145);stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + y="125.12746" + x="19.648737" + height="48.15974" + width="78.372231" + id="rect3363" + style="fill:none;stroke:#000000;stroke-width:0.53924;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + y="159.06557" + x="23.904408" + height="9.96595" + width="71.716042" + id="rect3461" + style="fill:#f2f257;fill-opacity:1;stroke:#000000;stroke-width:0.569881;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#f22b14;fill-opacity:1;stroke:#000000;stroke-width:0.569881;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3467" + width="71.716042" + height="9.96595" + x="23.904406" + y="144.48936" /> + <text + id="text3465" + y="151.32748" + x="45.318737" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="151.32748" + x="45.318737" + id="tspan3463" + sodipodi:role="line">Maintanance</tspan></text> + <rect + y="129.91316" + x="23.904409" + height="9.96595" + width="71.716042" + id="rect3469" + style="fill:#3af2f2;fill-opacity:1;stroke:#000000;stroke-width:0.569881;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text3473" + y="136.75128" + x="46.1138" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="136.75128" + x="46.1138" + id="tspan3471" + sodipodi:role="line">Deployment</tspan></text> + <text + id="text3477" + y="165.63867" + x="45.318737" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="165.63867" + x="45.318737" + id="tspan3475" + sodipodi:role="line">Provisioning</tspan></text> + <rect + y="132.18507" + x="107.80304" + height="27.418951" + width="36.95974" + id="rect3479" + style="fill:#51f220;fill-opacity:1;stroke:#000000;stroke-width:0.343301;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text3483" + y="144.17189" + x="116.3446" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="144.17189" + x="116.3446" + id="tspan3481" + sodipodi:role="line">Log </tspan><tspan + id="tspan4789" + style="stroke-width:0.264583" + y="151.22745" + x="116.3446" + sodipodi:role="line">Analysis</tspan></text> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="orthogonal" + id="path3485" + d="m 123.63272,159.84199 v 46.05826" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3489)" /> + <path + id="path3623" + d="m 69.435728,205.65696 c 0,-32.59768 0,-32.59768 0,-32.59768" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3627);stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + style="fill:none;stroke:#000000;stroke-width:0.753451;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3761" + width="153.68925" + height="47.94553" + x="29.03161" + y="9.1549854" /> + <rect + style="fill:#f2f23c;fill-opacity:1;stroke:#000000;stroke-width:0.763894;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3763" + width="131.41698" + height="9.7719383" + x="40.167751" + y="43.082993" /> + <text + xml:space="preserve" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="99.118172" + y="49.824108" + id="text3767"><tspan + sodipodi:role="line" + id="tspan3765" + x="99.118172" + y="49.824108" + style="font-size:4.93889px;stroke-width:0.264583">Hosts</tspan></text> + <rect + y="27.614727" + x="69.223152" + height="9.96595" + width="71.716042" + id="rect3769" + style="fill:#f22b14;fill-opacity:1;stroke:#000000;stroke-width:0.569881;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <rect + style="fill:#42f2f2;fill-opacity:1;stroke:#000000;stroke-width:0.447804;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3771" + width="43.7458" + height="10.088028" + x="83.208267" + y="13.507524" /> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="91.167519" + y="34.187817" + id="text3775"><tspan + sodipodi:role="line" + id="tspan3773" + x="91.167519" + y="34.187817" + style="font-size:4.93889px;stroke-width:0.264583">Configuration</tspan></text> + <text + xml:space="preserve" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="90.902496" + y="19.876642" + id="text3779"><tspan + sodipodi:role="line" + id="tspan3777" + x="90.902496" + y="19.876642" + style="font-size:4.93889px;stroke-width:0.264583">Applications</tspan></text> + <rect + y="91.432541" + x="44.258652" + height="17.226421" + width="92.49263" + id="rect3781" + style="fill:#51f220;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text3785" + y="98.05809" + x="70.230789" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="98.05809" + x="70.230789" + id="tspan3783" + sodipodi:role="line">Log Aggregat &</tspan><tspan + id="tspan3787" + style="stroke-width:0.264583" + y="105.11364" + x="70.230789" + sodipodi:role="line">Visualisation</tspan></text> + <path + id="path3789" + d="m 121.11499,108.39394 c 0,23.32193 0,23.32193 0,23.32193" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3793);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4089" + d="m 63.340225,124.8253 c 0,-16.43136 0,-16.43136 0,-16.43136" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:3.9000001;stroke-dasharray:none;marker-end:url(#marker3937)" /> + <rect + y="67.050529" + x="50.089134" + height="14.31118" + width="32.067646" + id="rect4109" + style="fill:#51f220;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-miterlimit:3.9;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text4113" + y="75.531235" + x="52.739349" + style="font-size:4.93889px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.93889px;stroke-width:0.264583" + y="75.531235" + x="52.739349" + id="tspan4111" + sodipodi:role="line">Log Collect</tspan></text> + <path + id="path4115" + d="m 66.78551,56.9797 c 0,9.80581 0,9.80581 0,9.80581" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4119);stroke-miterlimit:4;stroke-dasharray:none" /> + <rect + style="fill:#f2f2f2;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-miterlimit:3.9;stroke-dasharray:none;stroke-opacity:1" + id="rect4271" + width="32.067646" + height="14.31118" + x="123.5002" + y="66.785507" /> + <rect + y="66.785507" + x="161.13329" + height="14.31118" + width="32.067646" + id="rect4273" + style="fill:#f2f2f2;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-miterlimit:3.9;stroke-dasharray:none;stroke-opacity:1" /> + <text + id="text4277" + y="75.531235" + x="129.33067" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="75.531235" + x="129.33067" + id="tspan4275" + sodipodi:role="line">Sensors</tspan></text> + <text + id="text4281" + y="72.350967" + x="168.28888" + style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="72.350967" + x="168.28888" + id="tspan4279" + sodipodi:role="line">Heart-</tspan><tspan + id="tspan4283" + style="stroke-width:0.264583" + y="79.406517" + x="168.28888" + sodipodi:role="line">beats</tspan></text> + <path + id="path4285" + d="m 65.990443,81.09669 c 0,10.07083 0,10.07083 0,10.07083" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4289);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4447" + d="m 129.86072,81.096688 c 0,10.070833 0,10.070833 0,10.070833" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4451)" /> + <path + id="path4809" + d="m 174.38438,81.626734 c 0,124.295256 0,124.295256 0,124.295256" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4619)" /> + <path + id="path4835" + d="m 141.25666,66.255464 c 0,-14.046157 0,-14.046157 0,-14.046157" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4839);marker-end:url(#marker5011)" /> + <path + id="path5211" + d="m 167.49381,52.209306 c 0,14.311182 0,14.311182 0,14.311182" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker5215);marker-end:url(#marker5399)" /> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path5893" + d="m 146.94242,81.599615 -0.0945,124.062725" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.431;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5627);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path5985" + d="m 127.21049,18.286508 c 71.55591,0.265022 71.55591,0.265022 71.55591,0.265022 l -0.79507,202.74172 h -16.9614" + style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5989);stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path6201" + d="M 19.346596,148.94229 H 7.685634 V 32.067645 h 21.201749" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6205);stroke-miterlimit:4;stroke-dasharray:none" /> + </g> +</svg> diff --git a/docs/diagrams/alm/recovery.svg b/docs/diagrams/alm/recovery.svg new file mode 100644 index 0000000000000000000000000000000000000000..52d7a4e080db7b6448b0ace26d4515099ae6695b --- /dev/null +++ b/docs/diagrams/alm/recovery.svg @@ -0,0 +1,509 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + sodipodi:docname="recovery.svg" + inkscape:version="1.0 (4035a4f, 2020-05-01)" + id="svg8" + version="1.1" + viewBox="0 0 210 297" + height="297mm" + width="210mm"> + <defs + id="defs2"> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1521" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1519" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker1447" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1445" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker1315" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1313" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="marker1223" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1221" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="TriangleOutM" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + transform="scale(0.4)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + id="path1040" /> + </marker> + </defs> + <sodipodi:namedview + inkscape:snap-global="false" + inkscape:window-maximized="1" + inkscape:window-y="23" + inkscape:window-x="0" + inkscape:window-height="1315" + inkscape:window-width="2560" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="mm" + inkscape:cy="518.51064" + inkscape:cx="567.02128" + inkscape:zoom="0.94" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <rect + y="213.87234" + x="26.130764" + height="27.957884" + width="67.082443" + id="rect851" + style="fill:#cccccc;fill-opacity:0.956012;stroke:#000000;stroke-width:0.372809" /> + <text + inkscape:transform-center-y="-9.8515071" + id="text855" + y="232.87047" + x="41.394035" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="232.87047" + x="41.394035" + id="tspan861" + sodipodi:role="line">(Hardware)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="51.92276" + y="225.04512" + id="text865" + inkscape:transform-center-y="-9.8515071"><tspan + y="225.04512" + x="51.92276" + id="tspan867" + sodipodi:role="line">Host</tspan></text> + <rect + y="213.91844" + x="134.82491" + height="27.584219" + width="58.264629" + id="rect869" + style="fill:#00ff00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465" /> + <text + id="text873" + y="224.05141" + x="145.15994" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="224.05141" + x="145.15994" + id="tspan889" + sodipodi:role="line">Order Hardware</tspan><tspan + y="230.22502" + x="145.15994" + id="tspan891" + sodipodi:role="line"></tspan></text> + <text + id="text879" + y="237.56206" + x="148.89848" + style="font-size:6.35px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:5.64444px;stroke-width:0.264583" + y="237.56206" + x="148.89848" + id="tspan877" + sodipodi:role="line">ca. 1 hour</tspan></text> + <path + inkscape:connection-end="#rect869" + inkscape:connection-start="#rect851" + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path893" + d="m 93.213207,227.80602 41.611703,-0.0562" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)" /> + <text + id="text1185" + y="224.3329" + x="103.86304" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="224.3329" + x="103.86304" + id="tspan1183" + sodipodi:role="line">Recovery</tspan></text> + <rect + style="fill:#5dcccc;fill-opacity:0.956012;stroke:#000000;stroke-width:0.372809" + id="rect1193" + width="67.082443" + height="27.957884" + x="26.412235" + y="164.89629" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="47.304939" + y="185.86472" + id="text1197" + inkscape:transform-center-y="-9.8515071"><tspan + y="185.86472" + x="47.304939" + id="tspan1267" + sodipodi:role="line">Services</tspan></text> + <text + inkscape:transform-center-y="-9.8515071" + id="text1201" + y="174.38023" + x="32.219746" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="174.38023" + x="32.219746" + id="tspan1265" + sodipodi:role="line">Operating System</tspan></text> + <rect + style="fill:#00ff00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465" + id="rect1203" + width="58.264629" + height="27.584219" + x="135.10638" + y="164.94238" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="140.37494" + y="175.63829" + id="text1209"><tspan + y="175.63829" + x="140.37494" + id="tspan1273" + sodipodi:role="line">Provisioning Ansible</tspan><tspan + y="181.8119" + x="140.37494" + id="tspan1275" + sodipodi:role="line"></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="149.17996" + y="188.586" + id="text1213"><tspan + y="188.586" + x="149.17996" + id="tspan1277" + sodipodi:role="line">ca. 15 min</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1223)" + d="m 93.494679,178.82996 41.611701,-0.0562" + id="path1215" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="104.1445" + y="175.35684" + id="text1219"><tspan + sodipodi:role="line" + id="tspan1217" + x="104.1445" + y="175.35684" + style="stroke-width:0.264583">Recovery</tspan></text> + <rect + y="114.23139" + x="26.130764" + height="27.957884" + width="67.082443" + id="rect1285" + style="fill:#e3dedb;fill-opacity:0.956012;stroke:#000000;stroke-width:0.372809" /> + <text + inkscape:transform-center-y="-9.8515071" + id="text1289" + y="135.48131" + x="37.171963" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="135.48131" + x="37.171963" + id="tspan1373" + sodipodi:role="line">Code & Config</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="42.352726" + y="123.99682" + id="text1293" + inkscape:transform-center-y="-9.8515071"><tspan + y="123.99682" + x="42.352726" + id="tspan1371" + sodipodi:role="line">Application</tspan></text> + <rect + y="114.27749" + x="134.82491" + height="27.584219" + width="58.264629" + id="rect1295" + style="fill:#00ff00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465" /> + <text + id="text1301" + y="124.69192" + x="144.03406" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="124.69192" + x="144.03406" + id="tspan1375" + sodipodi:role="line">Deploy from Git</tspan><tspan + y="130.86554" + x="144.03406" + id="tspan1377" + sodipodi:role="line"></tspan></text> + <text + id="text1305" + y="137.92111" + x="148.89848" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="137.92111" + x="148.89848" + id="tspan1379" + sodipodi:role="line">ca. 5 min</tspan></text> + <path + inkscape:connector-curvature="0" + inkscape:connector-type="polyline" + id="path1307" + d="m 93.213207,128.16507 41.611703,-0.0562" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1315)" /> + <text + id="text1311" + y="124.69195" + x="103.86304" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="stroke-width:0.264583" + y="124.69195" + x="103.86304" + id="tspan1309" + sodipodi:role="line">Recovery</tspan></text> + <ellipse + ry="12.065001" + rx="34.723469" + cy="71.775261" + cx="58.686832" + id="path1381" + style="fill:#ffcc00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.541558;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + inkscape:transform-center-y="-9.8515071" + id="text1369" + y="73.331909" + x="44.041553" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="73.331909" + x="44.041553" + id="tspan1383" + sodipodi:role="line">DB - Data</tspan></text> + <ellipse + style="fill:#ffcc00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.541558;stroke-miterlimit:4;stroke-dasharray:none" + id="ellipse1385" + cx="59.249775" + cy="35.183956" + rx="34.723469" + ry="12.065001" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="44.604496" + y="36.740604" + id="text1389" + inkscape:transform-center-y="-9.8515071"><tspan + y="36.740604" + x="44.604496" + id="tspan1391" + sodipodi:role="line">User-Data</tspan></text> + <rect + style="fill:#00ff00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.610211" + id="rect1393" + width="67.126511" + height="41.231117" + x="127.57924" + y="26.249477" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="144.03406" + y="124.69192" + id="text1399"><tspan + sodipodi:role="line" + id="tspan1395" + x="144.03406" + y="124.69192">Deploy from Git</tspan><tspan + sodipodi:role="line" + id="tspan1397" + x="144.03406" + y="130.86554"></tspan></text> + <text + id="text1405" + y="33.776585" + x="151.07085" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="33.776585" + x="151.07085" + id="tspan1407" + sodipodi:role="line">Backup</tspan><tspan + y="39.950199" + x="151.07085" + id="tspan1409" + sodipodi:role="line"></tspan></text> + <rect + y="40.531918" + x="132.29167" + height="6.7553191" + width="57.983158" + id="rect1411" + style="fill:#ffcc00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + id="text1415" + y="45.316929" + x="142.14316" + style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + xml:space="preserve"><tspan + style="font-size:4.23333px;stroke-width:0.264583" + y="45.316929" + x="142.14316" + id="tspan1413" + sodipodi:role="line">3 - Copies</tspan></text> + <rect + style="fill:#ffcc00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465;stroke-miterlimit:4;stroke-dasharray:none" + id="rect1417" + width="57.983158" + height="6.7553191" + x="132.29167" + y="50.383427" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + x="141.86169" + y="55.168438" + id="text1421"><tspan + y="55.168438" + x="141.86169" + id="tspan1429" + sodipodi:role="line">2 - Different Media</tspan></text> + <rect + y="59.390522" + x="132.29167" + height="6.7553191" + width="57.983158" + id="rect1423" + style="fill:#ffcc00;fill-opacity:0.956012;stroke:#000000;stroke-width:0.465;stroke-miterlimit:4;stroke-dasharray:none" /> + <text + id="text1427" + y="64.175529" + x="141.86169" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583" + xml:space="preserve"><tspan + y="64.175529" + x="141.86169" + id="tspan1431" + sodipodi:role="line">1 - External</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.459333;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1447)" + d="m 85.339203,41.759342 40.503327,8.669564" + id="path1439" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" /> + <path + id="path1517" + d="M 90.915337,71.212326 C 126.09929,52.635195 126.09929,52.635195 126.09929,52.635195" + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1521)" /> + <text + xml:space="preserve" + style="font-size:3.52777px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" + x="100.2039" + y="54.88699" + id="text1579"><tspan + sodipodi:role="line" + id="tspan1577" + x="100.2039" + y="54.88699" + style="stroke-width:0.264583">Recovery</tspan></text> + </g> +</svg> diff --git a/docs/diagrams/src/test1.puml b/docs/diagrams/src/test1.puml deleted file mode 100644 index 1c36d3509396b37e92de6e50f57fcf58312d4b34..0000000000000000000000000000000000000000 --- a/docs/diagrams/src/test1.puml +++ /dev/null @@ -1,6 +0,0 @@ -@startuml - - Goofy -> MickeyMouse: calls - Goofy <-- MickeyMouse: responds - -@enduml diff --git a/docs/index.md b/docs/index.md index 51e346b6de7df65615ea372b54bb81b7db744595..f0dfe9ae9e6d6e5d7c6b4c328bbdbc8dbc90fb4e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1 @@ -# Welcome to DevOps Tools - -For full documentation visit [mkdocs.org](https://mkdocs.org). - - +# DevOps Tools Documentation diff --git a/mkdocs.yml b/mkdocs.yml index 15e7b5c2b7ca5bbbc03aa7d97f74c8ace99d74ff..8ddac65903f07480205fc72576cd2c61b983196d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,121 +10,126 @@ plugins: render: "server" server: "http://www.plantuml.com/plantuml" output_format: "svg" - diagram_root: "docs/diagrams" + diagram_root: "docs/diagrams/uml" output_folder: "out" input_folder: "src" input_extensions: "" nav: - Home: index.md - Docker: - - Home: docker/index.md - - GitLab Drupal CI: docker/gitlab-drupal-ci/index.md - - L3D: docker/l3d/index.md - - Maven: docker/maven-build/index.md - - Node: docker/node/index.md + - Home: docker/index.md + - GitLab Drupal CI: docker/gitlab-drupal-ci/index.md + - L3D: docker/l3d/index.md + - Maven: docker/maven-build/index.md + - Node: docker/node/index.md - Composer: - - Home: composer/index.md - - Libraries: - - Composer.json Utilities: composer/library/composer-json-utils/index.md - - Docker Traefik: composer/library/docker-traefik/index.md - - Plugins: - - Ahoy: composer/plugin/ahoy/index.md - - Behat for Drupal: composer/plugin/b4d/index.md - - Docker for Drupal: composer/plugin/d4d/index.md - - Drupal 8 SASS Theme: composer/plugin/d8-sass-theme/index.md - - Drupal 8 Scaffold: composer/plugin/d8-scaffold/index.md - - Drupal 9 Scaffold: composer/plugin/d9-scaffold/index.md - - Dorgflow: composer/plugin/dorgflow/index.md - - Drupal Development Environment: composer/plugin/drupal-dev-environment/index.md - - Drupal Environment: composer/plugin/drupal-environment/index.md - - Project: - - Drupal 8: composer/project/d8/index.md - - Drupal 8 Commerce: composer/project/d8-commerce/index.md - - Drupal 8 Commerce Demo: composer/project/d8-commerce-demo/index.md - - Drupal 9: composer/project/d9/index.md + - Home: composer/index.md + - Libraries: + - Composer.json Utilities: composer/library/composer-json-utils/index.md + - Docker Traefik: composer/library/docker-traefik/index.md + - Plugins: + - Ahoy: composer/plugin/ahoy/index.md + - Behat for Drupal: composer/plugin/b4d/index.md + - Docker for Drupal: composer/plugin/d4d/index.md + - Drupal 8 SASS Theme: composer/plugin/d8-sass-theme/index.md + - Drupal 8 Scaffold: composer/plugin/d8-scaffold/index.md + - Drupal 9 Scaffold: composer/plugin/d9-scaffold/index.md + - Dorgflow: composer/plugin/dorgflow/index.md + - Drupal Development Environment: composer/plugin/drupal-dev-environment/index.md + - Drupal Environment: composer/plugin/drupal-environment/index.md + - Project: + - Drupal 8: composer/project/d8/index.md + - Drupal 8 Commerce: composer/project/d8-commerce/index.md + - Drupal 8 Commerce Demo: composer/project/d8-commerce-demo/index.md + - Drupal 9: composer/project/d9/index.md - Ansible: - - Home: ansible/index.md - - Wiki: - - Home: ansible/wiki/index.md - - Attacks: ansible/wiki/attacks.md - - Crontabs: ansible/wiki/configure-crontabs.md - - Desaster recovery: ansible/wiki/desaster-recovery.md - - Drupal Apache update: ansible/wiki/drupal-apache-update.md - - Drupal deployment: ansible/wiki/drupal-deployment.md - - Drush fetch aliases: ansible/wiki/drush-fetch-aliases.md - - Firewall: ansible/wiki/firewall.md - - GitLab CI configuration: ansible/wiki/gitlab-ci-configuration.md - - GitLab CI introduction: ansible/wiki/gitlab-ci-introduction.md - - GitLab CI prerequisites: ansible/wiki/gitlab-ci-prerequisites.md - - HaProxy custom blacklists: ansible/wiki/haproxy-custom-blacklists.md - - HaProxy quick update: ansible/wiki/haproxy-quick-update.md - - LetsEncrypt: ansible/wiki/letsencrypt.md - - Resources: ansible/wiki/resources.md - - Swapfile: ansible/wiki/swapfile.md - - Add new user: ansible/wiki/user-add-new.md - - Set user password: ansible/wiki/user-set-password.md - - Varnish quick update: ansible/wiki/varnish-quick-update.md - - Backup: - - Home: ansible/wiki/backup/backup.md - - Intro: ansible/wiki/backup/introduction.md - - Backup to Google: ansible/wiki/backup/backup-google.md - - Backup to SpiderOak: ansible/wiki/backup/backup-spideroak.md - - Restore: ansible/wiki/backup/restore.md - - Restore from Google: ansible/wiki/backup/restore-google.md - - Restore from SpiderOak: ansible/wiki/backup/restore-spideroak.md - - ELK: - - Home: ansible/wiki/elk/introduction.md - - Fluentd: ansible/wiki/elk/fluentd.md - - Kibana: ansible/wiki/elk/kibana.md - - Hosts: - - Add new host: ansible/wiki/hosts/add.md - - JiffyBox: ansible/wiki/hosts/jiffybox.md - - Prevent reboot: ansible/wiki/hosts/prevent-reboot.md - - Inventory: - - Add new inventory: ansible/wiki/inventory/add.md - - ChatOps: ansible/wiki/inventory/chatops.md - - Pipelines: ansible/wiki/inventory/pipelines.md - - Monitoring: - - Home: ansible/wiki/monitoring/monitoring.md - - Introduction: ansible/wiki/monitoring/introduction.md - - Alerts: ansible/wiki/monitoring/alerts.md - - Alerts to ELK: ansible/wiki/monitoring/alerts-elk.md - - Alerts on NetData: ansible/wiki/monitoring/alerts-netdata.md - - Alerts on uptime: ansible/wiki/monitoring/alerts-uptime.md - - OpenSSL: - - CSR: ansible/wiki/openssl/csr.md - - Tips: - - Signed Git commits: ansible/wiki/tips/signed-git-commits.md - - Plugins: - - Fluentd: ansible/plugins/fluentd/index.md - - ServerDensity: ansible/plugins/serverdensity/index.md - - Roles: - - Apache: ansible/roles/apache/index.md - - Borg Backup: ansible/roles/borgbackup/index.md - - Composer: ansible/roles/composer/index.md - - Discourse: ansible/roles/discourse/index.md - - ElastAlert: ansible/roles/elastalert/index.md - - Elasticsearch: ansible/roles/elasticsearch/index.md - - Fail2Ban: ansible/roles/fail2ban/index.md - - Fluentd: ansible/roles/fluentd/index.md - - GitLab: ansible/roles/gitlab/index.md - - HaProxy: ansible/roles/haproxy/index.md - - Heartbeat: ansible/roles/heartbeat/index.md - - JailKit: ansible/roles/jailkit/index.md - - Keycloak: ansible/roles/keycloak/index.md - - LetsEncrypt: ansible/roles/letsencrypt/index.md - - MySQL: ansible/roles/mysql/index.md - - Nextcloud: ansible/roles/nextcloud/index.md - - Oracle: ansible/roles/oracle/index.md - - Packetbeat: ansible/roles/packetbeat/index.md - - PHP: ansible/roles/php/index.md - - ServerDensity: ansible/roles/serverdensity/index.md - - SpiderOak ONE: ansible/roles/spideroak/index.md - - User Management: ansible/roles/user-management/index.md - - VPN: ansible/roles/vpn/index.md - - Zammad: ansible/roles/zammad/index.md + - Home: ansible/index.md + - Wiki: + - Home: ansible/wiki/index.md + - Attacks: ansible/wiki/attacks.md + - Crontabs: ansible/wiki/configure-crontabs.md + - Desaster recovery: ansible/wiki/desaster-recovery.md + - Drupal Apache update: ansible/wiki/drupal-apache-update.md + - Drupal deployment: ansible/wiki/drupal-deployment.md + - Drush fetch aliases: ansible/wiki/drush-fetch-aliases.md + - Firewall: ansible/wiki/firewall.md + - GitLab CI configuration: ansible/wiki/gitlab-ci-configuration.md + - GitLab CI introduction: ansible/wiki/gitlab-ci-introduction.md + - GitLab CI prerequisites: ansible/wiki/gitlab-ci-prerequisites.md + - HaProxy custom blacklists: ansible/wiki/haproxy-custom-blacklists.md + - HaProxy quick update: ansible/wiki/haproxy-quick-update.md + - LetsEncrypt: ansible/wiki/letsencrypt.md + - Resources: ansible/wiki/resources.md + - Swapfile: ansible/wiki/swapfile.md + - Add new user: ansible/wiki/user-add-new.md + - Set user password: ansible/wiki/user-set-password.md + - Varnish quick update: ansible/wiki/varnish-quick-update.md + - Backup: + - Home: ansible/wiki/backup/backup.md + - Intro: ansible/wiki/backup/introduction.md + - Backup to Google: ansible/wiki/backup/backup-google.md + - Backup to SpiderOak: ansible/wiki/backup/backup-spideroak.md + - Restore: ansible/wiki/backup/restore.md + - Restore from Google: ansible/wiki/backup/restore-google.md + - Restore from SpiderOak: ansible/wiki/backup/restore-spideroak.md + - ELK: + - Home: ansible/wiki/elk/introduction.md + - Fluentd: ansible/wiki/elk/fluentd.md + - Kibana: ansible/wiki/elk/kibana.md + - Hosts: + - Add new host: ansible/wiki/hosts/add.md + - JiffyBox: ansible/wiki/hosts/jiffybox.md + - Prevent reboot: ansible/wiki/hosts/prevent-reboot.md + - Inventory: + - Add new inventory: ansible/wiki/inventory/add.md + - ChatOps: ansible/wiki/inventory/chatops.md + - Pipelines: ansible/wiki/inventory/pipelines.md + - Monitoring: + - Home: ansible/wiki/monitoring/monitoring.md + - Introduction: ansible/wiki/monitoring/introduction.md + - Alerts: ansible/wiki/monitoring/alerts.md + - Alerts to ELK: ansible/wiki/monitoring/alerts-elk.md + - Alerts on NetData: ansible/wiki/monitoring/alerts-netdata.md + - Alerts on uptime: ansible/wiki/monitoring/alerts-uptime.md + - OpenSSL: + - CSR: ansible/wiki/openssl/csr.md + - Tips: + - Signed Git commits: ansible/wiki/tips/signed-git-commits.md + - Plugins: + - Fluentd: ansible/plugins/fluentd/index.md + - ServerDensity: ansible/plugins/serverdensity/index.md + - Roles: + - Apache: ansible/roles/apache/index.md + - Borg Backup: ansible/roles/borgbackup/index.md + - Composer: ansible/roles/composer/index.md + - Discourse: ansible/roles/discourse/index.md + - ElastAlert: ansible/roles/elastalert/index.md + - Elasticsearch: ansible/roles/elasticsearch/index.md + - Fail2Ban: ansible/roles/fail2ban/index.md + - Fluentd: ansible/roles/fluentd/index.md + - GitLab: ansible/roles/gitlab/index.md + - HaProxy: ansible/roles/haproxy/index.md + - Heartbeat: ansible/roles/heartbeat/index.md + - JailKit: ansible/roles/jailkit/index.md + - Keycloak: ansible/roles/keycloak/index.md + - LetsEncrypt: ansible/roles/letsencrypt/index.md + - MySQL: ansible/roles/mysql/index.md + - Nextcloud: ansible/roles/nextcloud/index.md + - Oracle: ansible/roles/oracle/index.md + - Packetbeat: ansible/roles/packetbeat/index.md + - PHP: ansible/roles/php/index.md + - ServerDensity: ansible/roles/serverdensity/index.md + - SpiderOak ONE: ansible/roles/spideroak/index.md + - User Management: ansible/roles/user-management/index.md + - VPN: ansible/roles/vpn/index.md + - Zammad: ansible/roles/zammad/index.md - GitLab: - - Home: gitlab/index.md - - Ansible: gitlab/ansible/index.md - - Composer: gitlab/composer/index.md - - Drupal: gitlab/drupal/index.md + - Home: gitlab/index.md + - Ansible: gitlab/ansible/index.md + - Composer: gitlab/composer/index.md + - Drupal: gitlab/drupal/index.md + - DevOps: + - ALM: + - Introduction: devops/alm/alm.md + - Hosting and Monitoring: devops/alm/hosting_maintain.md + - Tools: devops/alm/tools.md