Mai întâi vreau să explic puțin contextul problemei și numai atunci voi merge la esența postului. Recent am întâlnit o sarcină simplă, la prima vedere. Dar, așa cum se întâmplă de obicei, a petrecut mult mai mult timp decât se aștepta. Ideea principală a fost actuală - trebuie să dezvoltați un portal web, cu ajutorul căruia utilizatorul va putea să solicite N mașini virtuale în Microsoft Azure configurate conform unui anumit tipar. Scenariul standard pentru noi a fost să folosim următorul șablon:
- o rețea virtuală de 3 mașini virtuale
- una dintre mașini este un controler de domeniu, iar restul sunt în acest domeniu
- pe unul dintre mașinile implementate MS SQL Server
Dacă implementați toate aceste lucruri cu mâinile de pe portal, va dura ceva timp și putem cere un astfel de mediu de câteva ori pe zi. Așa că am început să automatizăm crearea unor astfel de medii și pentru instrumentul de automatizare pe care l-am luat Powershell. Această alegere sa datorat faptului că prin utilizarea Powershell puteți rezolva toate sarcinile, și anume: implementați mașini virtuale N în Vindows Azure, instalați un controler de domeniu etc. În acest fel, putem să ne menținem cu ușurință sistemul nostru de automatizare în viitor.
Principala problemă în implementarea acestei soluții a fost necesitatea de a instala pe rolul nostru Web un set de cmdleturi Microsoft Azure Powershell, de fapt, pentru a trimite comenzi către API-ul Microsoft Azure Management. Acest set de cmdlet-uri Powershell poate fi descărcat gratuit de pe site-ul azure.com (secțiunea Instrumente de linie de comandă), dar va fi instalat pe mașina locală prin Web Platform Installer. Această soluție nu este foarte potrivită din mai multe motive:
- Platformerul Web Platform lansează interfața de utilizare, în care utilizatorul trebuie să aleagă cu mouse-ul sau tastatura. Ie automatizare aici și nu miroase.
- După un pic de cercetare pe tema precedentă, a devenit clar că instrumentul Web Platform Installer Command Line a apărut recent în suita de platforme de instalare Web. Cu ajutorul lor puteți organiza automatizarea instalării de adăugări de interes pentru noi. Dar există un singur lucru: Web Platform Installer va instala întotdeauna cea mai recentă versiune de cmdleturi Microsoft Azure Powershell. Pe de o parte, e bine, dar, de fapt, este foarte rău. După cum ne amintim cu toții, Startup Tasks începe atunci când sunt alocate resurse pentru o anumită instanță a rolului nostru Web. Ie în caz de eșec, farmacistul Microsoft Azure poate transporta unul dintre site-urile noastre de rol Web pe noul hardware, se va porni instalarea de cmdleturi Microsoft Azure Powershell prin Web Platform Installer. Ca rezultat, putem obține situația când pe diferite instanțe ale rolului Web vom avea versiuni diferite ale cmdlet-urilor Microsoft Azure Powershell.
După ce am lucrat mai mult asupra creierului, sa descoperit că, de curând, Platforma de instalare Web are un mod de operare foarte proastă, numit mod Offline. Ideea acestui mod este simplă și transparentă - ne permite să facem o copie curentă offline a modulelor de care avem nevoie și să efectuăm instalarea ulterioară direct din copia locală, nu din depozitul global. Așa că am următorul succesiune de acțiuni:
- Instalați local Platformerul Web.
- Facem o copie offline a cmdlet-urilor Microsoft Azure Powershell.
- Adăugăm cmdleturi Microsoft Azure Powershell și un script pentru instalarea lor în proiect.
Instalați local Platformerul Web
Acest pas este cel mai simplu. Pentru ao face, avem nevoie de:
Cazuri offline copie a Microsoft Azure Powershell cmdlet
În secțiunea Utilizarea secțiunii WebPICMD.exe, vedem un ghid pentru utilizarea Instrumentului de comandă a platformei Web Installer. Acum rulați aplicația din linia de comandă (cmd) de la administratorul administratorului și efectuați următoarele acțiuni:
1. Mergeți la directorul dorit.
2. Obțineți o listă a tuturor aplicațiilor care se află în arhivele Web Platform Installer. Aici mă confrunt cu o problemă legată de limitarea numărului de linii afișate de linia de comandă a aplicației. Din cauza acestei restricții, pot vedea doar sfârșitul listei de sublimări disponibile. În momentul de față am găsit două modalități de a depăși acest lucru:
2.1. Redirecționați fluxul de ieșire într-un fișier:
În sistemul de fișiere din dosarul curent, va fi creat fișierul all.txt în care va fi o listă a tuturor aplicațiilor din depozitele Web Platform Installer.
2.2. Vom folosi rezultatele căutării:
Ca rezultat, vom obține o listă cu două coloane. Primul este ID-ul produsului (de care avem nevoie de fapt), iar al doilea este descrierea.
3. Faceți o copie locală a produsului care ne interesează:
Ca rezultat al acestei comenzi, vom crea un folder offline în rădăcina unității C. Acest dosar va conține tot ceea ce este necesar pentru a instala pachetul Windows AzurePowershell. Este demn de remarcat faptul că Web Platform Installer descarcă nu numai pachetul propriu-zis, ci toate dependentele sale posibile pentru diferite sisteme de operare. Astfel, dosarul meu offline a avut aproximativ 600 MB, cu dimensiunea fișierului windowsazure-powershell.0.7.4.msi aproximativ 9 MB.
Adăugați cmdleturi Microsoft Azure Powershell și un script pentru a le instala în proiect
Ei bine, la sfarsitul intregului epic, trebuie sa adaugam urmatoarele lucruri rolului Web / Worker:
2. Instalați scriptul de linie de comandă InstallWindowsAzurePowershell.cmd pentru a instala cmdleturi Microsoft Azure Powershell. În exemplul meu, pare a fi simplu:
3. Adăugați o nouă sarcină de pornire la fișierul ServiceDefinition.csdef:
Acum putem fi siguri că fiecare instanță a rolului va conține o singură versiune a cmdlet-urilor Microsoft Azure Powershell. Dacă aveți nevoie să faceți upgrade la o versiune mai nouă, va trebui să mergem până la capăt și să recreați / propagați rolul cu noua distribuție.