eerste versie

This commit is contained in:
2022-06-10 21:48:59 +02:00
parent b328149ee3
commit 96844423ee
8 changed files with 344 additions and 25 deletions

View File

@ -1,9 +1,206 @@
\section*{Resultaten}
Automatiseren is het (gedeeltelijk) vervangen van menselijke handelingen door een programma. Dit programma verricht dezelfde handelingen (of komt in ieder geval tot hetzelfde resultaat) door gebruik te maken van diverse koppelingen (APIs) met andere systemen.
\subsection*{Declaratief en imperatief}
Imperatief en declaratief zijn programmeerconcepten die een bepaalde programmeerstijl (of 'schrijfstijl') inhouden. Bij het imperatief programmeren wordt beschreven \textit{hoe} tot een bepaald eindresultaat moet worden gekomen. Dit houd dus in het een voor een beschrijven van stappen en instructies om bijvoorbeeld een gebruikersaccount aan te maken. In afbeelding \ref{fig:imperatief_voorbeeld} wordt een voorbeeld gegeven van een imperatief geschreven routine voor het aanmaken van nieuwe gebruikers.
\begin{figure}[h]
\begin{lstlisting}[language=python]
username = 'jdoe'
password = 'hunter02'
if userExists(username):
user := getUser(username)
else:
user := createUser(username, password)
if length(password) > 7 and
contains(password, "!@#$%^&*()"):
setUserPassword(user, password)
else:
print("Password not valid")
\end{lstlisting}
\caption{Voorbeeld imperatieve schrijfstijl}
\label{fig:imperatief_voorbeeld}
\end{figure}
Bij een declaratieve schrijfstijl wordt het eindresultaat beschreven (wat) in plaats van de manier om die te bereiken (hoe). Een declaratieve versie van het voorbeeld in figuur \ref{fig:imperatief_voorbeeld} zou simpelweg een lijst zijn met gebruikers en wachtwoorden, zoals in \ref{fig:declaratief_voorbeeld}.
\begin{figure}[h]
\begin{lstlisting}
users:
- username: jdoe
password: hunter02
- username: foo
password: bar
\end{lstlisting}
\caption{Voorbeeld declaratieve schrijfstijl}
\label{fig:declaratief_voorbeeld}
\end{figure}
Een voordeel van een declaratieve schrijfstijl is dat deze beter te begrijpen is. Er hoeft alleen nagedacht te worden over wat het gewenste resultaat is en niet hoe deze bereikt kan worden. Wanneer automatisering wordt toegepast in een afdeling die niet gespecialiseerd is in het ontwikkelen en onderhouden van code is een abstractere programmeertaal een voordeel.
\subsection*{Eigenschappen van automatiseringstools}
Er zijn vele tools welke automatisering bevorderen of volledig zijn geoptimaliseerd voor een 'automatisering'-usecase. Dit houdt onder andere in dat de tools veel functionaliteiten bevatten voor het verwerken van data en het communiceren met systemen. Over het algemeen hebben automatiseringstools de volgende karakteristieken:
\begin{enumerate}
\item \textbf{Data-extractie en -injectie functionaliteit}\\
Bevatten een uitgebreid assortiment aan functies waarmee gecommuniceerd kan worden met verschillende systemen en in verschillende datastructuren en protocollen.
\item \textbf{Data transformatie functionaliteit}\\
Bevatten een uitgebreid assortiment aan functies waarmee veelvoorkomende operaties kunnen worden uitgevoerd op data. Zoals filteren, sorteren en omzetten van datastructuren.
\item \textbf{Declaratieve syntax}\\
Hebben een manier om op een declaratieve manier de taak vast te leggen.
\item \textbf{Uitbreidbaar}\\
Kan worden uitgebreid wanneer er geen bestaande functionaliteit zijn om het gewenste resultaat te bereiken. Dit is belangrijk omdat elke business een andere omgeving heeft. Om een automatiseringstool tot volledige potentie te kunnen gebruiken moet deze maximaal geïntegreerd zijn in de omgeving van een business en het mogelijk maken om seamless met alle software en apparaten te kunnen integreren.
\end{enumerate}
\subsection*{Ansible}
Ansible is een op Python gebaseerde tool waarmee zeer diverse soorten automatiseringen kunnen worden gerealiseerd dankzij een uitgebreid assortiment aan eenvoudig te gebruiken modules en een YAML gebaseerde "Domain Specific Language" \cite{ansible}.
Ansible is door KEMBIT als automatiseringstool naar keuze verkozen dankzij de flexibiliteit, uitbreidbaar, gebruiksvriendelijkheid en inzetbaarheid in haar huidige productieomgevingen. De tool is initïeel in gebruik genomen door het Expert Team Infrastructure, een ander team binnen KEMBIT gespecialiseerd in het beheren van servers.
Na evaluatie door het networking team wordt de tool als zeer potentieel beschouwd dankzij het uitgebreide assortiment aan netwerkmodules en officiële ondersteuning voor het automatiseren van netwerk gerelateerde taken waaronder configureren.
\subsection*{Continuous Practices}
Continuous practices zoals continuous integration, delivery en deployment zijn praktijken in de software development sector die ervoor zorgen dat met hoge kwaliteit, regelmaat en betrouwbaarheid nieuwe features en producten kunnen worden uitgebracht \cite{shahin_continuous_2017}.
\begin{figure}[h]
\centering
\includegraphics[scale=0.5]{continuous_practices.pdf}
\caption{Relatie tussen continuous integration, delivery en deployment \cite{shahin_continuous_2017}}
\end{figure}
\textbf{Continuous Integration (CI)} betekent het geautomatiseerd uitvoeren van tests op een codebase nadat hier een wijziging heeft plaatsgevonden. Dit motiveert om regelmatig aanpassingen te maken en publiceren. \cite{shahin_continuous_2017}
De voornaamste redenen voor het toepassen van continuous integration zijn als volgt:
\begin{itemize}
\item Bevindingen huidige situatie
\item Root cause -> integratie (lack thereof)
\item CMDB
\item Uitbreidingsmogelijkheden Ansible
\item wens self service
\end{itemize}
\item Verminderen van \textit{build en test tijden} bij het ontwikkelen en onderhouden van een actieve codebase \cite{shahin_continuous_2017}.
\item Vergroten van de \textit{zichtbaarheid en bekendheid} van testresultaten door deze centraal inzichtelijk te maken \cite{shahin_continuous_2017}.
\end{itemize}
In de context van netwerkbeheer kan dat betekenen om netwerkconfiguraties te controleren op bijvoorbeeld security of correctheid wanneer deze worden aangepast in een gecentraliseerde repository.
\textbf{Continuous DElivery (CDE)} betekent om op een geautomatiseerde manier nadat de continuous integration tests volledig zijn doorstaan de nieuwe release naar een testomgeving wordt gepubliceerd en vervolgens handmatig naar een productieomgeving. \cite{shahin_continuous_2017}
\textbf{Continuous Deployment (CD)} gaat een stap verder en publiceert changes structureel en geautomatiseerd naar een productieomgeving. Het gebruik van CD impliceert ook het gebruik van CDE. Alleen is de finale stap van het publiceren naar een productieomgeving niet meer handmatig maar automatisch. \cite{shahin_continuous_2017}
De voornaamste redenen voor het toepassen van continuous integration zijn als volgt:
\begin{itemize}
\item Verminderen van \textit{build en test tijden} bij het ontwikkelen en onderhouden van een actieve codebase \cite{shahin_continuous_2017}.
\item Vergroten van de \textit{zichtbaarheid en bekendheid} van testresultaten door deze centraal inzichtelijk te maken \cite{shahin_continuous_2017}.
\end{itemize}
In de context van netwerkbeheer kan dat betekenen om netwerkconfiguraties te controleren op bijvoorbeeld security of correctheid wanneer deze worden aangepast in een gecentraliseerde repository.
\subsection*{Huidige situatie}
Het Expert Team Networking beheert een groot aantal netwerkapparaten verspreid over verschillende fysieke locaties en klanten. Om deze apparaten gecentraliseerd te kunnen beheren wordt gebruik gemaakt van virtuele machine die verbonden is met alle locaties door tunnels. Door in te loggen op deze server kan alle apparatuur worden bereikt ondanks deze verschillende fysieke locaties staan en zonder daar naartoe te hoeven gaan om toegang te krijgen tot deze apparatuur.
Onder 'beheerverbinding' is in dit geval sprake van SSH (secure shell). Dit is een veelzijdig protocol voor het uitwisselen van versleutelde gegevens. In het geval van beheerwerkzaamheden wordt het gebruikt voor het overzetten van commando's en de output van deze commando's. SSH is de primaire manier om verbinding te maken met een netwerkapparaat en deze te configureren of commando's uit te voeren voor bijvoorbeeld troubleshooting.
\subsection*{Analyse tijdsbesteding}
Om te evalueren waar potentiele automatiseringen het meest effectief kunnen zijn is een analyse gemaakt van de tijdsbesteding van het Expert Team Networking. Hier wordt gezocht naar werkzaamheden die veel tijd in beslag nemen en met redelijke regelmaat worden uitgevoerd.
In afbeelding \ref{fig:changes_tijd_gemiddeld_categorie} is de totale verdeling van gemiddelde gespendeerde tijd te zien per categorie. Uit deze grafiek blijkt dat de meeste tijd wordt besteed aan changes die behoren tot de 'overige' en 'internet' categorieën.
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{changes_tijd_gemiddeld_categorie.pdf}
\caption{Gemiddelde bestede tijd aan changes per categorie (percentage)}
\label{fig:changes_tijd_gemiddeld_categorie}
\end{figure}
Afbeelding \ref{fig:changes_aantal_categorie} geeft het aantal changes weer per categorie. De volgende zaken kunnen worden geconcludeerd omtrent de tijdsverdeling van changes:
\begin{itemize}
\item Werkzaamheden met betrekking tot routers en/of modems
\end{itemize}
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{changes_aantal_categorie.pdf}
\caption{Aantal changes per categorie (percentage)}
\label{fig:changes_aantal_categorie}
\end{figure}
In figuur \ref{fig:incidenten_tijd_gemiddeld_categorie} is de gemiddelde bestede tijd aan incidenten per categorie weergegeven.
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{incidenten_tijd_gemiddeld_categorie.pdf}
\caption{Gemiddelde bestede tijd aan incidenten per categorie (percentage)}
\label{fig:incidenten_tijd_gemiddeld_categorie}
\end{figure}
Hier valt op dat incidenten gerelateerd tot Uninteruptable Power Supplies ('UPS') gemiddeld de meeste tijd in beslag nemen. Wanneer men achter kijkt naar de hoeveelheid incidenten die zijn afgehandeld onder deze categorie wordt duidelijk dat deze slechts sporadisch moeten worden uitgevoerd.
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{incidenten_aantal_categorie.pdf}
\caption{Aantal incidenten per categorie (percentage)}
\label{fig:incidenten_aantal_categorie}
\end{figure}
\subsection*{Visie en wensen}
KEMBIT en het Expert Team Networking willen in de toekomst meer werkzaamheden uitvoeren met automatiseringstools, dit blijkt uit de survey afgenomen van het Expert Team Networking en het interview met opdrachtgever.
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{survey_pie_meer_automatisering_mening.pdf}
\caption{Antwoord op de vraag over het meer gebruikmaken van automatisering in de dagelijkse werkzaamheden.}
\label{fig:survey_pie_meer_automatisering_mening}
\end{figure}
In afbeelding \ref{fig:survey_pie_meer_automatisering_mening} is te zien dat het Expert Team Networking gelooft dat automatisering een positief effect heeft op de kwaliteit en tijdigheid van hun dagelijkse werkzaamheden. Daarnaast blijkt uit het antwoord dat medewerkers graag meer gebruik willen maken van automatiseringstools. Als reden wordt voornamelijk voor tijdsbesparing gekozen (afbeedling \ref{fig:survey_waarom_automatiseren}).
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{survey_waarom_automatiseren.pdf}
\caption{Waarom medewerkers meer gebruik willen maken van automatiseringstools}
\label{fig:survey_waarom_automatiseren}
\end{figure}
In de surveyvraag in afbeelding \ref{fig:survey_leren_automatiseren} is gevraagd of werknemers van het Expert Team Networking het gemakkelijk vinden om te leren over hoe ze automatiseringen toe kunnen passen. Hier geeft ruim de helft van de werknemers aan dat dit niet gemakkelijk is.
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{survey_leren_automatiseren.pdf}
\caption{Is het gemakkelijk om te leren over automatiseren?}
\label{fig:survey_leren_automatiseren}
\end{figure}
\section*{Ontwerp}
Gedurende het onderzoek is vastgesteld dat het niet gemakkelijk is voor het Expert Team Networking om Ansible te kunnen gebruiken in de dagelijkse werkzaamheden. Een van de redenen hiervoor is het ontbreken van integraties tussen Ansible en andere applicaties die worden gebruikt door het team.
Dit ontwerp beschrijft een integratie tussen Ansible en TOPdesk Asset Management. Asset Management wordt door het team gebruikt om informatie over de hardware in op te slaan.
De integratie moet het mogelijk maken om automatisch de informatie van Asset Management te verkrijgen en beschikbaar te maken binnen Ansible. Hierdoor hoeft deze informatie niet handmatig te worden ingevoerd. Dit kan namelijk zeer veel tijd in beslag nemen door de grote hoeveelheid aan apparatuur en eigenschappen.
Het systeem moet voldoen aan de volgende criteria:
\begin{itemize}
\item De informatie over de apparatuur is afkomstig uit TOPdesk Asset Management. Dit is de centrale bron van alle informatie met betrekking tot hardware binnen KEMBIT.
\item Actuele informatie. De gegevens die het systeem produceert moet gebaseerd zijn op de actuele informatie zoals beschikbaar is in Asset Management.
\item Configureerbare velden. Het moet mogelijk zijn om de namen van velden op te geven die de werknemer nodig heeft voor gebruik in Ansible. Deze velden moeten dan ook worden opgehaald en verwerkt vanuit Asset Management.
\item Het systeem moet met minimale training en uitleg zelfstandig gebruikt kunnen worden en dus zo eenvoudig mogelijk zijn om te gebruiken.
\item De implementatie van het systeem is zo eenvoudig mogelijk om het team niet te belasten met het onderhouden van een zeer complexe codebase.
\end{itemize}