RES Automation Manager: Parsing Parameters in bestanden

In deze blog tonen we hoe je met RES Automation Manager parameters en Windows variabelen kunt opnemen binnen een bestand. Dit doen we aan de hand van het XenApp update script, die door Thomas Koetzing is gemaakt. Dit script bevat een aantal instellingen die je normaal handmatig moet aanpassen. Door hier parameters in op te nemen, maken we dit script eenvoudig op te nemen in verschillende omgevingen waarin Citrix XenApp 6.0 en XenApp 6.5 draaien.

In dit blog gaan we alleen op het downloaden van de hotfixes in. Het Buildingblock op het einde bevat het update-script in twee delen. Eentje voor het downloaden en eentje voor het updaten van servers. Dit voorkomt dat elke server opnieuw alle hotfixes gaat downloaden van de Citrix servers.

In het script staan alle in te vullen instellingen bovenin. Zie het screenshot hiernaast. We gaan deze instellingen direct vervangen door parameters, nog voordat we ze überhaupt hebben aangemaakt binnen RES AM. Om vervolgens deze parameters te vervangen door de ingevulde waarden, moet het script eerst worden opgenomen binnen de RES Automation Manager database.

 

 

Maak een nieuwe Resource aan en kies ‘Stored in database’. Browse naar het update script en selecteer deze. Nadat hij geïmporteerd is, klik je op het tabblad ‘Properties’ and vink de laatste twee checkboxes aan; ‘Parse variables, parameters and functions’ en ‘Skip parsing of environment variables’. Deze laatste optie zorgt ervoor dat RES Automation Manager geen Windows variabelen aanpast, welke ook later in het update-script staan. Uiteraard zouden we ook alle variabelen in het script kunnen aanpassen met parameters, maar dat kost ontzettend veel tijd en maakt het updaten in de toekomst veel moeilijker.

Nadat we deze opties hebben ingesteld, gaan we direct het bestand aanpassen en de parameters invoegen. Ga terug naar het eerste tabblad en klik op de knop ‘Edit’. Verander alle variabelen door parameters. RES Automation Manager gebruikt de volgende structuur voor een plek die veranderd moet worden door een parameter: $[parameter]. Hieronder staan alle parameters die je moet invoeren (klik op het plaatje om deze te vergroten).Let Op: Op dit moment zit er nog een bug in RES Automation Manager, waardoor %% wordt vervangen door een enkele %. Om te voorkomen dat hierdoor het script defect raakt, moeten we een kleine aanpassing maken. Doe een Zoek&Vervang binnen het script en verander alle %% door %%%. Na het parsen van het bestand, veranderd dit automatisch terug naar %%, waardoor het script blijft werken. Zie ook RES Portal artikel Q203306: Double percent signs are replaced by a single percent sign. Deze bug wordt opgelost in RES AM 2012 SR1. Onthoud dit, omdat je op dat moment de %%% weer moet vervangen door %%.

Zoek binnen het script ook naar het woord ‘Pause’ op het einde van het script. Deze staat er twee maal in. Haal deze regels weg, omdat ze het script anders continue laat doorlopen. Na al deze aanpassingen kun je Notepad afsluiten, de aanpassingen worden op dat moment automatisch opgeslagen.

Het script gebruikt wget.exe om de hotfixes en rollup packs te downloaden. Deze moet dus ook worden toegevoegd als resource. Omdat het een klein bestand is, die gedownload moet worden naar de server die de updates download, kun je hem het beste ook opslaan in de database (‘store in database’).

Nadat dit gedaan is, kun je de download module gaan maken. Creëer een nieuwe module en kies voor de taak ‘Download’. Als resource kies je wget.exe en het update-script die je net hebt toegevoegd als resource. In het ‘destination’-veld maak je een parameter aan. Klik daarvoor met de rechtermuisknop in het veld en kies voor ‘Insert Parameter’->’Add Parameter’. In het tabblad ‘Input’ kies je voor ‘parameter value is required (may not be empty)’. Nadat de parameter is aangemaakt is de taak klaar en kun je hem opslaan met de knop ‘OK’.

De download-taak is nu klaar, maar het script moet ook nog uitgevoerd worden. Voeg een nieuwe taak toe en kies nu voor ‘Command (Execute)’. Selecteer ‘Execute command using Windows command interpreter’ en ‘redirect standard output and standard error to logfiles’. Klik met de rechtermuisknop in de ‘command-line’-box en kies voor ‘Insert Script’. Ga vervolgens naar het tabblad ‘Script’. Klik hier weer met de rechtermuisknop in en selecteer ‘Insert Parameter’ en kies de parameter die je hebt aangemaakt in de ‘Download resource’-taak. Type achter de ingevulde tekst een ‘\’ en type daarna de naam van het update-script. Sluit het venster met de ‘OK’-button.

Nu moeten we allen nog de parameters toevoegen die we in het update-script gebruiken. Er zijn drie parameters die niet worden opgegeven door gebruikers, omdat de waarde hiervan vast staat. Dit zijn de XA-parameter (deze is altijd XA), de OS-parameter (deze is altijd W2K8R2) en de Download_only-parameter (aangezien we ons concentreren op het download gedeelte van het script, is deze altijd Yes). Om deze toe te voegen ga je naar het tabblad ‘Module Parameters’, daar kies je voor ‘Add new parameter’. Creëer de XA, OS en Download_only parameters en vul de default/vaste waarde in. Ga daarna naar het ‘Input’-tabblad. Uncheck ‘when importing buildingblock’ en ‘when scheduling job’, aangezien deze waarden niet door de gebruiker ingevoerd worden. Bij het aanmaken van de parameters, moet je er goed op letten de exact gelijke naam te gebruiken, als je eerder in het script hebt gebruikt tussen de [blokhaken]. Als je een typefout maakt of een andere naam gebruikt, wordt de waarde in het script niet aangepast.

Nadat je deze drie parameters hebt aangemaakt, kun je de rest aanmaken. Doe dit op dezelfde manier als bij de andere drie, maar met een paar kleine veranderingen op het ‘input’-tabblad. Zorg ervoor dat ‘When scheduling job’ aangevinkt blijft en haal het vinkje weg bij ‘Hide parameter if parameter is not used directly’. Deze laatste is nodig om er voor te zorgen dat RES Automation Manager de parameter ook vraagt aan de gebruiker in te vullen, als deze de job scheduled. Zou je hem niet aanvinken, dan wordt de parameter niet getoond, omdat deze niet direct wordt gebruikt in de module, maar indirect bij het parsen.

Nadat je alle parameters hebt aangemaakt, zou je ongeveer deze lijst moeten hebben:

De module kan nu gedraaid worden op de server die de hotfixes download. Hierbij gaan we er vanuit dat er al een download directory is en dat deze ook geshared wordt binnen het netwerk met ‘read rechten’ voor andere domain-members. Bij het schedulen van de module, vraagt RES AM de gebruiker om informatie, wat er ongeveer uit zou moeten zien zoals in de screenshot.

Nadat je het script hebt gedraaid, vind je in de download directory het script met de ingevulde parameters, wget.exe en de gedownloade hotfixes en rollup packs van de XenApp versie die je hebt opgegeven. Kijk je dieper op de uitgevoerde taak binnen RES Automation Manager, dan zie je zoiets als hiernaast staat afgebeeld. Hierin valt mogelijk de ‘error log’ op van het script. Dit is normaal. Hierin staan de verschillende kb-artikelen die het script download om de hotfixes uit te extracten.

Het building block dat aan dit artikel zit, kent een RunBook, 2 modules en het update-script in tweeën gesplitst. Het ene deel download de updates op de fileserver. Het 2de deel kopieert de hotfixes naar de lokale harddisk van de XenApp server, schakelt tijdelijk de UAC uit en update de XenApp server.

Zoals je kan zien is het parsen van paremeters erg krachtig. Daarnaast is RES Automation Manager in staat om ook Windows variabelen al in te vullen binnen het script. Denk hierbij aan bijvoorbeeld de computernaam. Elk text-bestand kan aangepast worden, dus naast .cmd kun je ook .vbs en txt bestanden aanpassen. Een ander voorbeeld is te vinden op ResGuru.com, in het Citrix buildingblock, waar de connectiestring (.dsn) wordt aangepast met behulp van gevraagde parameters.

Buildingblock: runbook_citrix install xenapp hotfixes