Mire való ez a szoftver?
Ez egy letisztult webes felület az ansible és a terraform (opentofu/terragrunt) programokhoz. Minden kódot git repókból fog leszedni, a szükséges jelszavakat, kulcsokat, titkokat megfelelő módon tudja tárolni.
Sokkal fontosabb, hogy igazán akkor tud hasznos lenni, ha egy csapat használja. Ráadásul a felhasználóinak nem kell értenie se a Linuxhoz, se a parancssorhoz 🙂
Nekik csak rá kell kattintani a play gombra 😀
A felhasználók lehetnek helyiek, vagy központi címtárban létezők (LDAP). Sok hasznos funkciót támogat, ám azok csak a fizetős változatban érhetőek el. Így én maradok az ingyenes, nyílt forráskódú változat bemutatásánál.
Kezdjük a telepítéssel
Lehet klasszikusan telepíteni (repóból), dockerben, vagy helm-el Kubernetesbe. Én a dockeres változatot fogom bemutatni. Az oldalon össze lehet kattintani rengeteg opciót, ám én úgy tapasztaltam, hogy semmi értelme, mert nem fog működni. Vagy bugos, vagy csak a fizetős változatnál működik, nem is érdekel. Hozz létre a projektre egy új mappát (pl.: ~/docker/semaphore), abban pedig egy docker-compose.yml fájlt az alábbi tartalommal:
services:
semaphore:
container_name: semaphore
image: semaphoreui/semaphore:v2.16.29-ansible2.16.5
network_mode: host
environment:
- SEMAPHORE_DB_DIALECT=mysql
- SEMAPHORE_DB_HOST=192.168.5.213
- SEMAPHORE_DB_NAME=semaphore
- SEMAPHORE_DB_USER=semaphore
- SEMAPHORE_DB_PASS=titkosjelszo
- SEMAPHORE_SCHEDULE_TIMEZONE=Europe/Budapest
volumes:
- semaphore_data:/var/lib/semaphore
- semaphore_config:/etc/semaphore
- semaphore_tmp:/tmp/semaphore
volumes:
semaphore_data:
semaphore_config:
semaphore_tmp:
A legfontosabb tudnivalók:
4. sor: ha nincs régi szervered, pl RHEL 8, akkor működni fog a legújabb ansible-el is, ebben az esetben legyen a tag latest
5. sor: elhagyható, nálam azért kell, mert ugyanezen a gépen fut a teszt Proxmoxom is, és csak így „lát” bele a semaphore a virbr0 hálózatba
7.-11. sor: az adatbázis szerver adatai, írd át a sajátod szerint, ja és hozd létre a felhasználót és a DB-t
Az első számú probléma, hogy nem hozza létre az admin felhasználót (hiába is adnád meg változókkal), ezért miután elindítottad a konténert add ki ezt a két parancsot:
docker exec semaphore semaphore user add --name 'Márkus Sándor' --login msandor --email semaphore@msandor.hu --password semaphore --admin
docker exec semaphore semaphore user add --name 'Teszt Elek' --login elek --email elek@msandor.hu --password semaphore
Az első létrehoz egy admin jogú felhasználót (msandor), a másik pedig egy mezei usert (elek). Eleket már GUI-ból is létrehozhattuk volna, de ha már úgy is itt vagyunk…
Ennyi a telepítés, nézzük meg alaposabban a cuccot
Nyissuk meg a semaphore ui weboldalt:

Belépés után egy puritán felületet fogunk látni:

- világos/sötét téma, én imádom a sötétet
- nyelv választás, magyar nincs
- ha a nevedre kattintasz, további lehetőségeket fogsz találni

Fentről lefelé:
- verzió szám
- runners/futtatók, hasonló a gitlab/gitea runnersre, de ennél opcionális
- a futó taszkokat láthatod
- API Tokens, ezzel nem foglalkozunk
- Users: adja magát
- Edit Account: saját magunkat tudjuk szerkeszteni
- Sign Out: kilépés
Térjünk vissza a nyitó lapra és hozzunk létre egy demo projektet:

Mindjárt jobban fog kinézni a nyitó lapunk:

Kapunk egy publikus git repót:

A Key Store-ban egy jelszóval, amit nem lehet megnézni, legfeljebb felülírni:

Néhány ansible inventoryt:

És a lényeg, a Taszkok:

Nézzünk meg alaposabban egy taszkot, kattintsunk a play gombra a legfelsőnél:
Minden futtatáskor feljön egy kis ablak, ahol lehet 1-2 dolgot finomhangolni, most csak simán kattintsunk a RUN-ra:

Aki olvasta a korábbi Terraformról szóló cikkemet, annak ismerős lesz az itt felbukkanó ablak:

Ez felel meg a terraform/tofu plan parancsnak, a zöld gomb folytatja a telepítést (demó módban nem csinál semmit, nyugi), a sárga és piros gombok megszakítják a folyamatot. Válasszuk a zöldet (terraform/tofu apply):

- sikeresen lefutott
- ki lehet nagyítani az ablakot (érdemes)
- új tabon megmutatja a logokat sallangok nélkül
- ezzel lehet bezárni az ablakot
Bezárás után látszik, hogy az 1. taszkunk sikeresen lefutott:

Fentről lefelé indítsátok el az összeset, az utolsó powershell híján nem fog működni:

Nézzük meg alaposabban az 1. taszkot. Kattintsunk az Apply infrastructure (OpenTofu) linkre:

- újra futtathatjuk
- törölhetjük a taszkot
- megnézhetjük a korábbi futás logját
- szerkesztő ablak:

- a taszk neve
- ha almappába tettük a terraform/opentofu fájlokat
- munkaterület (fizetős opció)
- git repó
- változó csoport (itt most üres, változó nélkül)
- a Build nézet alá kerül a taszk
Nézzünk meg egy ansible taszkot ugyanígy:

- a taszk neve
- az ansible playbook fájlneve
- inventory
- git repó
- változó csoport (itt is üres tartalommal)
- a Tools nézet alá kerül a taszk
Jut eszembe, a nézetek amolyan csoportosítások, a ceruzára kattintva tudjuk őket menedzselni:


- a hamburgerrel tudjuk a sorrendet megváltoztatni
- csak akkor jelenik meg az új menüpont, ha rákattintunk a zöld pipára!
- ezzel tudjuk törölni
Végül nézzük meg a Dashboard -> settings menüpontot:

Itt átnevezhetjük a projektünket, lementhetjük (érzékeny adatok nélkül), törölhetjük a gyorsítótárat, és magát a projektet.
Én inkább létrehozok egy rendes projektet:


Vaaaaagy, inkább visszatöltöm mentésből:


Itt is figyelmeztet arra, hogy 3 kulcsot frissítenem kell, mielőtt használni kezdem. Menjünk is a Key Store-ba:

Az a 3 csak 2, mivel a None default kulcs, nincs értéke, ezt válasszuk azokon a helyeken, ahol nincs jelszó. A valódi kulcsokat töltsük ki (2):

Bocs a kitakarásért, de ez az igazi titkos ssh kulcsom 🙂
Végül a felhasználónkhoz tartozó jelszót (3):

5 ansible taszkot hoztam létre:

Az envteszt bemutatja, hogy Variable groups menüpontban felvett változókat hogyan lehet felhasználni egy ansible playbookban:

Ez pedig a playbookja:

A ping all host nem ICMP pinget jelent, hanem ansible pinget:

Ez pedig a playbookja:

Az upgrade Linux servers nem igényel bemutatást, frissíti az Operációs rendszereket 🙂 Ez a playbook két családhoz jó: Red Hat és Debian. Azaz jó lesz RHEL-hez, Debianhoz, Fedorához, Almához, Rockyhoz, Ubuntuhoz, stb.
A who am I (msandor) minden hoszton lefuttatja a whoami parancsot. Aki azt várja, hogy minden hoszt msandor-t ad vissza, az téved:

Ennek az a magyarázata, hogy két hosztomhoz root-ként kell csatlakozni:

Végezetül a who am I (root) minden hoszton lefuttatja a whoami parancsot, ám itt már sudo-val, nem meglepő módon mindenhol root felhasználó lesz a megfejtés 😉
Aki szeretné utánam csinálni, innen töltse le az export-ot:

Ha az inventory-t testre szabod, és saját git repóra cseréled az enyémet:

akkor meg fogod érteni, hogy hogyan tudsz változókat használni a playbookokban, ami taszkonként változtatható, fogsz tudni normál felhasználóval és root-ként (-b) is playbookokat futtatni. Bármelyik taszkodhoz fogsz tudni időzített feladatot létrehozni.
Csináljunk egy másik projektet az OpenTofuhoz
Az ehhez szükséges export fájlt innen töltheted le:



Itt is téved, ehhez a projekthez nem szükséges se jelszó, se kulcs, mivel a git repó nyilvános, a PVE teszt fürthöz való token része a repónak.
Természetesen, ezek működő fájlok, de ebben a formában csak nálam. Neked le kell töltened, testre kell szabni (IP címek, token, stb), majd fel kell töltened a saját git szerveredre. És annak a linkjét kell berakni a projekt repójához.
Mit lehet még megemlíteni?
Ha az elején létrehozott elek nevű teszt felhasználót hozzáadom egy projekthez, mint taszk futtató:

Azt elfelejti exportálni 🙁
Ettől még ez egy hasznos funkció. Tételezzük fel, hogy a munkahelyen szeretnénk használni a semaphore ui-t. Legyen 1-2 admin, ők tudják létrehozni és módosítani a taszkokat, projekteket, jelszavakat, kulcsokat, stb, de biztonságosabb, ha a napi használathoz normál felhasználóval (task runner jog) dolgoznak, pláne azok, akik nem is adminok a cégnél. Így elkerülhető, hogy illetéktelenek módosítsanak valamit a szoftveren belül. Ám van egy hátsó kapu! Ne felejtsük el, hogy minden kód git repóban van, aki oda tud committolni, az befolyással lesz a semaphore-ui-ra is!
Csináltam egy időzített feladatot is, bár most nincs engedélyezve:

Mondanom se kell, de ha importálod a mentésem, az inventory-t testre kell szabnod, különben semmi sem fog működni! Magyarul töltsd le a git repót, aktualizáld, és töltsd fel a saját git szerveredre.
Jut eszembe, azt állítja magáról a semaphore ui, hogy képes bash/powershell/python szkripteket is futtatni, na ez jó nagy kamu. Mert, bár képes futtatni, de csak localhoston, így pedig nem sok haszna van. Docker esetén a localhost magát a konténert jelenti, azaz még kevesebb értelme van 🙂
Szerencsére az ansible ebben is tud segíteni, lásd a whoami taszkokat.
Szóval én ki is kapcsoltam:

