AWX - interfata web pentru Ansible
Postat la Mon 31 December 2018 in tutoriale

AWX - proiect ce aduce o interfata web si un robust REST API pentru Ansible, si este proiectul din care se dezvolta cunoscuta aplicatie comerciala Ansible Tower sustinuta acum de Redhat.
Personal am considerat ca o interfata la Ansible nu e absolut necesara, mai ales la proiectele mici - one man show - dar la proiectele in crestere unde si alti membrii ai echipei trebuie sa efectueze diverse operatii pe infrastructura are avantaje vizibile:
- access granular la proiecte;
- access granular la masini;
- access granular la anumite job-uri;
- stocare credentiale pentru utilizare fara expunere;
- permite rularea task-urilor de catre utilizatori fara cunostinte despre Ansible.
Deci AWX permite accesul colaboratorilor fara a mai fi necesar sa aiba direct access la cheile ssh de access la masini/git. O prezentare mai detaliata gaziti in acest webinar.
O metoda rapida si recomandata de a rula AWX prin docker/ docker-compose. Fisierul utilizat de mine este acesta . Pentru siguranta va recomand sa stocati baza de date Postgres intr-un folder extern sau o instanta dedicata pentru pastrarea proiectelor.
De asemenea avem novoie de un repo git pe Guthub/Bitbucket/Gitlab/server propriu care sa fie acceibil de developer si instanta AWX.
Pornire AWX
Descarcam fisierul pentru docker-compose din link-ul de mai sus si pornim containerele
docker-compose up -d
in scurt timp putem accesa AWX la adresa http://127.0.0.1/ folosind userul admin si parola password
Configurare AWX
In AWX exista notiunea de organizatii ce cuprind multiple proiecte, care putem atasa si utlizatori.
Creem o organizatie:

Creem un utilizator cu drepturi minime

Pentru accessarea proiectului prin git (via ssh) creem un credential de tip Source control. Am adaugat o cheie privata ssh.

si am adaugat userul meu cu drept de utilizare a cheii in tab-ul Permisions.

Pentru accesul la masinile administrare vom creem un credential de tip Machine. Am adaugat o cheie privata ssh.

Proiectele in AWX de obicei cuprind un repository (git cel mai des) cu mai multe playbook-uri include.

si am adaugat userul meu cu drept de utilizare a proiectului in tab-ul Permisions.

Cum am mentionat intr-un articol anterior pentru Ansible e necesar sa specificam masinile de administrat. Creem un inventar

La care adaugam masinile individual. putem specifica variabile specifice ce sa fie folosite la rularea playbook-urilor.

si am adaugat userul meu cu drept de utilizare a inventarului in tab-ul Permisions.

Alternativ inventarul poate fi importat dintr-o sursa externa (AWS,GCE, Redhat Satelite, etc) sau intr-ul fisier host din cadrul proiectului (ce poate fi in git).
Masinile pot fi incluse in grupuri pentru rularea de job-uri specifice:

la care adaugam masinile dorite:

Configurare joburi in AWX
Un job in AWX consta in rularea unui playbook din cadrul unui proiect pe un inventa. Acesta se adauga in Templates / Job template

si am adaugat userul meu cu drept de executie in tab-ul Permisions.

Initierea job-urilor se face prin apasarea iconitei racheta din lista:

Daca avem servere de stage/qa si prod definite in inventarii dedicate bifand Prompt on launch putem selecta inventarul asupra caruia va rula playbook-ul la start:

In exemplul meu am folosit ansistrano/deploy pentru deploy-ul unui mic site. Recomand sa-l testati.
Sunt cazuri in care dorim sa specificam variabile la rularea unui playbook, in cazul meu sa pot selecta branch-ul la care sa fac deploy. Aici folosim tabul survey din cadrul proiectului:

La startul job-ului vom avea un pop-up unde putem modifica daca dorim variabila:

Inainte de rulare putem verifica conditiile puse

In timul rularii job-ului, cat si ulterior putem vizualiza output-ul comenzilor pentru debug.

Mai multe detalii despre configurarea AWX gasiti in documentia oficiala de la Ansible Tower
Articolul face parte din seria Aplicatii pentru managementul configuratiilor