Terugblik op PQR's deelname aan de NLVMUG hackathon

Viktor van den Berg

Voorafgaand aan 2018 editie van de NLVMUG UserCon, vond dit jaar een heuse hackathon plaats. Een hackathon die georganiseerd werd door de Nederlandse VMware UserGroup (NLVMUG), waarin je samen met collega’s en/of community vrienden aan de slag kon om ‘iets’ moois te bouwen. Voor diegene die het concept hackathon niet kennen: een hackathon is een bijeenkomst waarin je in een groep een IT-oplossing bedenkt voor een bepaald probleem/uitdaging. De bedoeling is om deze oplossing in beperkte tijd te realiseren: in het geval van de NLVMUG duurde de hackathon een kleine 8 uur. 

Er werd aan de drie teams die meededen aan de NLVMUG hackathon veel vrijheid gegeven, ieder team kon  een eigen onderwerp/uitdaging aandragen die het team binnen de gestelde tijd zou uitvoeren. Vanuit PQR hebben we meegedaan met een vierkoppig team: Herco van Brug, Geurt Dijker, Stefan Verhoef en Viktor van den Berg. Als #TeamPQR hadden wij ons als doel gesteld om een hoop lol te hebben met verschillende API’s (Application Programmable Interface). PQR heeft veel ervaring met het implementeren van VMware's vRealize Automation (vRA) en vRealize Orchestrator (vRO). Normaal gesproken worden deze oplossingen gebruikt om IT-processen te automatiseren: denk aan de uitrol van één of meerdere virtuele machines waarop automatisch een (multi-tier) applicatie wordt geïnstalleerd. In deze trajecten moeten er vaak verschillende IT/business systemen gekoppeld worden aan vRA/vRO, denk hier bijvoorbeeld aan:

  • Active Directory/DNS voor het aanmaken van een computeraccount en registratie in DNS;
  • Een CMDB oplossing voor het vastleggen van de VM/applicatie die wordt uitgerold;
  • Een IPAM oplossing voor het aanvragen van een IP-adres en/of een DNS registratie;
  • De koppeling met vSphere om zo virtuele machines uit te kunnen rollen.

Soms is een koppeling standaard beschikbaar, maar soms verloopt de communicatie tussen vRA/vRO en de externe oplossing via een API.

Binnen de hackathon was ons doel om oplossingen te koppelen die je niet zo vaak tegen komt in een zakelijke omgeving, maar waar je wellicht hele leuke dingen mee kunt doen. Het doel was dan ook om de volgende drie koppelingen te realiseren:

  • Een koppeling maken met Homey: een home automation oplossing om via spraak commando’s aan vRA en vRO te geven. Daarnaast is homey ook ingezet voor een stukje webhook functionaliteit;
  • Een koppeling maken met Trello: een digitaal Kanbanbord als statusoverzicht en om goedkeuring te geven voor het uitrollen van een VM/applicatie via vRA en vRO;
  • En als laatste wilden we een koppeling maken met Lego Mindstorms: hiermee kun je robots maken die je ook via een API kunt aanspreken. De Lego Mindstorms robot visualiseert de status van een uitrol van een VM.

In onderstaande figuur vindt u een schematisch overzicht van de te realiseren koppelingen en informatiestromen.

Ieder teamlid heeft zijn specialiteit op dit vlak daarom is de volgende teamverdeling gemaakt:

  • Geurt richt zich op de koppeling met Homey, hij heeft in zijn privésituatie al veel ervaring met deze domotica/home automation oplossing;
  • Herco richt zich op de koppeling met Trello, waar hij binnen een andere case ook mee gewerkt heeft;
  • Viktor is aan de slag gegaan met Lego Mindstorms;
  • Stefan is verantwoordelijk dat alles aan elkaar geknoopt wordt binnen vRA en vRO.

Ieder van de bovenstaande experts zal nu een korte beschrijving geven van wat er gerealiseerd is en tegen welke uitdagingen we aan liepen. Tevens zal wat technische achtergrond gegeven worden over de gerealiseerde koppeling.

De koppeling met Homey (door Geurt Dijker)

Bij PQR zeggen we vaak: “Wij zijn van de automatisering van de automatisering”. Daarmee bedoelen we, dat we alles wat vaker voorkomt automatisch willen uitvoeren. Dat werkt ook bij mij thuis door. Waarom zou ik zelf verlichting inschakelen rond zonsondergang of als de zon schijnt zonwering naar beneden doen? In 2014 maakte ik via crowdfunding kennis met Homey en werd heel enthousiast. Homey is een domotica controller gemaakt door de Nederlandse startup Athom uit Enschede, mijn studiestad.

Toen ik Homey geleverd kreeg begin 2016 ben ik actief geworden in de community en leerde al snel hoe je vanuit Homey’s open app-structuur relatief eenvoudig apps kan maken voor Homey. Toen ook mijn collega’s mijn enthousiasme voor Homey zagen, was het idee voor een Homey in het PQR Experience Center (PEC) en de opdracht voor deze hackathon snel geboren.

Athom biedt een open platform om apps te ontwikkelen voor Homey. In de Homey Flow-editor zijn verschillende triggers, condities en/of acties beschikbaar. De structuur maak je in een set files met JSON, NodeJS JavaScript, html-bestanden en eventueel plaatjes. Na een middagje stoeien met een Homey in het PEC waren Stefan en ik er snel achter, er bestaat een NodeJS Package (NPM) die al een groot deel aan code interface bevat om vRealize Orchestrator en vRealize Automation vanuit NodeJS aan te sturen.

Als voorbereiding op de hackathon heb ik een lege Homey app gemaakt en deze voorzien van een html-settingspagina. Gelukkig was er al een zeer goed voorbeeld in een andere Homey app om te hergebruiken. Tijdens de hackathon is de app functioneel gemaakt. Voor de Homey Flow-editor is een actie kaartje “Deploy a VM from Blueprint” gecreëerd. Als dit kaartje gebruikt wordt roept de app de juiste functies aan voor de autorisatie met vRA, en start de app de deployment van de gevraagde blueprint.

Nu kan in Homey’s Flow-editor volstaan worden met het maken van een flow. Op basis van spraak (trigger) start de flow en Homey vraagt om een bevestiging (conditie), daarna wordt een VM in vRA uitgerold met de gespecificeerde blueprint naam (actie).

Voor de terugkoppeling vanuit Trello hebben we van de webhooks Homey app gebruik gemaakt. Deze triggert een flow waarbij de parameters uit de (op internet beschikbare) webhook ervoor kunnen zorgen dat er terugkoppeling wordt gegeven aan vRA/vRO, en dat er bijvoorbeeld een lamp gaat branden.

Het resultaat van de app is gepubliceerd op GitHub en in de Homey App store. De app kan gebruikt worden als je vRealize Automation en een Homey hebt en kan eenvoudig uitgebreid worden om zo meer vRA functionaliteit rechtstreeks vanuit Homey aan te sturen.

De koppeling met Trello (door Herco van Brug)

Om in Trello de status van een uitrol aan te geven hebben we een vijftal lijsten gemaakt op een Trello kanbanbord. Om vRA kaarten op een bord te kunnen laten plaatsen moet eerst een token worden aangemaakt waarmee via http GET- en POST-aanvragen geauthenticeerd worden. Deze tokens, samen met een key, worden in elke aanvraag meegegeven samen met de vraag zelf. Zo wordt van een Trello-bord een overzicht van de beschikbare lijsten opgevraagd met een GET request via:

http://api.trello.com/1/boards/<<BOARDID>>/lists?token=<<TOKEN>>&key=<<K...

Deze geeft vervolgens een JSON bericht terug met iets als:

[  { "id": "5a9…315", "name": "Requested" },
   { "id": "5a9…5f4", "name": "Rejected“  },
   { "id": "5a9…ff5", "name": "Approved“  },
   { "id": "5a9…2bf", "name": "Deployed“  },
   { "id": "5a9…7e7", "name": "Completed“ } ]

Met deze lijst kan vRA vervolgens aan de slag. Bij de start van een uitrol maakt vRA een kaart aan in de requested lijst door een POST naar Trello met: 

http://api.trello.com/1/cards?token=<<TOKEN>>&key=<<KEY>>&idList=5a9...3... NAAM>>&desc=<<OMSCHRIJVING>>

waarbij het teruggestuurde JSON bericht het card-id van de nieuwe kaart bevat die in vRA weer wordt onthouden.  

Als de goedgekeurde VM van Approved naar Deployed moet, wordt deze card-id meegegeven met een PUT als: 

http://api.trello.com/1/cards/<<CARDID>>?token=<<TOKEN>>&key=<<KEY>>&idL...

waar de kaart met card-id onderdeel wordt van de nieuwe lijst, meegegeven als idList. 

Alle componenten van de vRA, Homey en Mindstorms stonden in een LAN. Trello is echter een internetapplicatie. Naar Trello toe is dat geen probleem maar als een manager een kaart voor een uitrol van ‘Requested’ naar ‘Approved’ of ‘Rejected’ verplaatst, moet Trello naar vRA terug kunnen aangeven dat een aanvraag wel of niet is goedgekeurd.

Daarvoor kan een firewall aangepast worden maar in dit geval was de API van de Homey al op internet ontsloten en hebben we de route van Trello terug naar vRA gebouwd via de Homey.

Trello kan acties uitvoeren bij veranderingen op elk van hun objecten. Voor de hackathon hebben we op de Requested, Approved en Rejected lijsten een zgn. webhook gemaakt die wordt afgevuurd zodra er op zo’n lijst iets verandert, zoals b.v. het aanmaken van een kaart. Deze webhook doet vervolgens een POST-request naar het opgegeven adres, in dit geval de externe API van de Homey. De Homey voert vervolgens een commando uit zoals in dit geval een API-call naar de vRO om de goedkeuring door te geven van een uitrol. 

De koppeling met Lego Mindstorms (door Viktor van den Berg)

Met Lego Mindstorms kun je robots bouwen, die je vervolgens taken kunt laten uitvoeren. Het centrale hart van een Lego Mindstorms robot is de EV3-steen, waarop de Mindstorms software draait. De standaard Mindstorms sofware is "closed source", je kunt Mindstorms alleen aansturen met de software zoals Lego die levert. Echter is er een alternatieve firmware beschikbaar, waardoor het ineens mogelijk is om de EV3-steen aan te spreken via bijvoorbeeld Python, Node.JS of Java. Deze alternatieve firmware, ev3dev geheten, is gratis te downloaden en redelijk eenvoudig op de EV3-steen te plaatsen. De ev3dev firmware is gebaseerd op Debian Linux.

Binnen de NLVMUG hackathon wilden wij vanuit TeamPQR de Mindstorms robot inzetten als "Business Process Visualizer". Het doel was om de robot op een tafel heen en weer te laten rijden, waarbij de robot een object (een blikje Red Bull, de representatie van een virtuele machine) in een vakje plaatste waarmee zichtbaar werd gemaakt waar een virtuele machine zich in het vRA aanvraag proces bevindt. Om dit voor elkaar te krijgen moesten een tweetal zaken geregeld worden:

  • De Mindstorms robot moet heen en weer rijden en de VM (het blikje) in het juiste vakje kunnen plaatsen;
  • Er moet communicatie mogelijk gemaakt worden tussen vRA/vRO en de Mindstorms robot.

Om de robot zijn positie te laten bepalen, hebben we gebruik gemaakt van de zogenaamde "color sensor". Door tape in verschillende kleuren op de tafel te plakken kan de robot bepalen waar hij zich bevindt. Afhankelijk van waar de robot zich bevindt, kun je hem naar voren of juist naar achter laten rijden. Binnen een stuk Python code zijn een aantal functies gedefineerd: rijd een vak naar voren, rijd een vak terug, pak een object (het blikje) op en zet een object neer. Op de foto ziet u de robot in actie, waarbij de grijze en zwarte tape voor de plaatsbepaling zorgt. De colorsensor bevindt zich aan de rechterkant van de robot (links op de foto).

De tweede uitdaging was om de robot aan te spreken vanuit vRealize Automation/vRealize Orchestrator. Wat eigenlijk moest gebeuren is dat de Python code vanaf vRA/vRO gestart werd op het moment dat de virtuele machine zich in een nieuwe fase binnen het aanvraagproces bevindt. Deze koppeling was redelijk eenvoudig te maken door gebruik te maken van een "SSH host" koppeling binnen vRealize Orchestrator. Op deze manier kan vanuit vRO via SSH (secure shell) een commando geactiveerd worden op de robot, zodat het aanvraagproces gevisualiseerd kan worden.

Het eindresultaat is dat de Mindstorms robot inzicht geeft in de voortgang van de virtuele machine aanvraag zoals deze is vast gelegd binnen vRealize Automation.

En alles komt samen in vRA en vRO (door Stefan Verhoef)

Binnen de hackathon was de uitdaging om vRealize Automation en vRealize Orchestrator als een soort van broker (spin in het web) te laten fungeren. Het eindresultaat mag er zijn, het was schitterend om te zien hoe intuïtief het is om externe systemen (zoals Homey, Trello en Mindstorms) te koppelen met behulp van vRealize Orchestrator. Daarnaast is vRealize Automation met de komst van de message bus (event subscription) in versie 7.x zo ontworpen dat je op ieder moment in de levenscyclus van een virtuele machine een trigger kunt uitsturen om een workflow te starten die bijvoorbeeld de communicatie start richting een extern systeem.

Nadat we een tweetal deployments (Windows en Linux) beschikbaar hebben gesteld voor automatische uitrol, was het voor mij zaak om automatisch een Trello card te laten aanmaken wanneer een virtuele machine wordt aangevraagd in vRealize Automation via de voice control van Homey. Hiervoor is het van belang om Trello als een REST host op te nemen in vRealize Orchestrator, daarnaast is het noodzakelijk om REST operations te creëren die voor verschillende functies kunnen worden ingezet. Een POST operation om bijvoorbeeld een card aan te maken, of een PUT operation om een card te verplaatsen of te wijzigen.

Nadat we een workflow hebben gecreëerd om een card aan te maken tijdens de uitrol van een VM (request fase), hebben we een stukje maatwerk code geschreven om het card-id op te slaan als een custom property bij het virtuele machine object in vRA. Hiermee weet je achteraf altijd welk card-id er bij een virtuele machine hoort en kun je wanneer je wilt een actie doorvoeren voor deze virtuele machine in Trello.

Het goedkeuringsproces in vRA kan op twee tijdstippen worden ingezet: vooraf in de pre-fase en achteraf in de post-fase. Het verschil tussen deze twee fases is dat een goedkeuring in de pre-fase voorkomt dat een uitrol wordt uitgevoerd. Bij het afkeuren van een uitrol en in de post-fase zal een uitrol volledig worden doorlopen tot het moment dat de virtuele machine wordt vrijgegeven voor de aanvrager.

Tijdens de hackathon hebben we bewust gekozen voor een post approval trigger, oftewel een goedkeuring achteraf, omdat we van te voren willen weten wat de naam van de virtuele machine gaat worden en daarnaast het card-id direct op willen slaan bij deze virtuele machine. Hiervoor hebben we een workflow bedacht met een user interaction die extern vanuit de Homey te benaderen moet zijn. In de request fase hebben we de communicatie met de Lego Mindstorms robot gekoppeld, door een custom workflow aan te maken die via SSH Python scripts aftrapt op de robot.

De grootste uitdaging die we hadden was de communicatie van Homey met de vRO server om de goedkeuring van een uitrol te bewerkstelligen. Uiteindelijk hebben we hier een handmatige actie voor ingezet om het proces vlot te trekken.

Overall gezien hebben we in het korte tijdbestek dat we hadden, namelijk een korte 8 uur om de diverse interfaces van alle devices aan elkaar te knopen, bijzonder veel bereikt en kunnen we terugkijken op een zeer geslaagde NLVMUG hackathon!

Ten slotte

Het is mooi om te zien wat te bereiken is binnen de acht uur die de NLVMUG hackathon duurde. Een spraakgestuurde aanvraag van een virtuele machine vanuit Homey, met een koppeling naar vRA/vRO. Daarnaast de integratie van het aanvraag proces met Trello, en natuurlijk de koppeling met de Mindstorms robot die fungeerde als "Business Process Visualizer". Het is ook gaaf om te zien dat het eigenlijk niet uitmaakt wat je wilt koppelen aan een platform als vRealize Automation/vRealize Orchestrator, zolang er een API beschikbaar is, kan er een integratie gerealiseerd worden!

Vanuit PQR zullen we het resultaat van deze hackathon inbrengen binnen het PQR Experience Center, zodat we resultaat kunnen tonen aan de bezoekers van het PEC. Ook zullen we op IT Galaxy 2018 aandacht besteden aan onze setup! Bent u ook op PQR's klantenevenement, kom dan zeker even langs op de stand waar we aandacht zullen besteden aan hetgeen we gerealiseerd hebben. U vindt ons op de beursvloer.

Heeft u zich nog niet ingeschreven voor IT Galaxy 2018? Hier vindt u meer informatie en de mogelijkheid tot inschrijven. IT Galaxy 2018 vindt plaats op 17 april in de Amsterdam Arena.

Geurt Dijker, Herco van Brug, Stefan Verhoef en Viktor van den Berg

>>> meer blogs