Henry Isakoff 🥕 Palvelinten Hallinta

| Palvelinten Hallinta | 4 min

Infrakoodi ja useita porkkanoita ylempää.

Tämän viikon raportissa tutustutaan saltin käyttölogiikkaan syvemmin, tehdään tilafunktioista esimerkit ja luodaan ylin tiedosto jonka alta hallittavat löytävät tarvitsemansa. Aluksi voisin kuitenkin avata saltin reseptiajattelua.

Reseptit

Eli oletuksena salt hakee services /srv/salt kansiosta tiloja joita jakaa hallittaville koneille. Tämä voidaan tehdä ’toiminta.sls’ kirjana jolloin tietyttyjen hallittavien koneiden ’reseptit’ voidaan helpommin hallita omille tasoilleen. Kokonaisuus voidaan myös ajaa vain ylemmän hierarkian kautta - jolloin puhutaan top mallista. Tällöin ajettavat ajetaan hierarkisesti kansion alapuolelta.

Esim Hallittavat koneeni > Reseptit1.sls ja Reseptit2.sls

Tulevaisuudessa, kun teemme ctf konettamme tai infraa, niin voimme jakaa ctf ja tekoälyaspektit esimerkiksi omiin kokonaisuuksiin ja päättää per rauta mitä tulee mihinkin. Näihinkin voidaan seurata ehtoja.

Tässä top.sls toimii koko reseptikirjaston sisällysluettelona.

Seuraavat tehty suoraan raudalle ilman virtualisointia.

Esimerkkikokonaisuus

Tehdään tällä ajatuskokonaisuudella viisi tärkeintä pkg, file, service, user ja cmd funktiokutsua, tehdään kokonaisuus toppina ja tarkastetaan idempotentti.

Haluamme asentaa hallittaville koneillemme suosikki top-ohjelmani: btop. Tehdään myös moitiedosto, tarkastetaan, että cron toimii (edellisviikon alhainen hedelmä). Luodaan käyttäjä Mervinille (masentunut robootti) ja asetetaan järjestelmälle aikavyöhyke.

Eli luon jokaiselle oman kansion ja init.sls tiedoston joka ohjeistaa toiminnon.

Täällä

Näytän kuvan vain yhdestä, mutta ohessa jokaisen init.sls tiedoston kokonaisuus.

# Varmistetaan, että btop-paketti on asennettu järjestelmään.
btop:
  pkg.installed:
    - name: btop
# Luodaan tiedosto /tmp/moro.txt ja määritellään sen sisältö.
moro:
  file.managed:
    - name: /tmp/moro.txt
    - contents: 'Täällä Salt, kiitos kaloista!'
# Varmistetaan, että cron-palvelu on käynnissä ja
käynnistyy automaattisesti järjestelmän mukana.
cron:
  service.running:
    - name: cron
    - enable: True
# Luodaan käyttäjä mervin_robotti ja asetetaan hänen koko nimensä.
# Luodaan myös kotihakemisto ja määritellään oletuskomentotulkki.
user:
  user.present:
    - name: mervin_robotti
    - fullname: 'Mervin Masentunut Robotti'
    - shell: /bin/zsh
    - createhome: True
# Asetetaan järjestelmän aikavyöhyke Helsinkiin.
'unless' varmistaa, että komentoa ei ajeta, jos aikavyöhyke on jo oikein.
# Tämä tekee tilasta idempotenttisen.
tz:
  cmd.run:
    - name: 'timedatectl set-timezone Europe/Helsinki'
    - unless: 'timedatectl status | grep "Time zone: Europe/Helsinki"'

Täällä Täällä

Tehdään vielä salt-juureen top.sls jossa määritetään alapuolella tapahtuvat. Tehdään nyt vain yksi taso niin käytetään saltin omaa ohjeistusta ’base’.

’/srv/salt/top.sls’ base: '*': - btop - cron - moro - tz - user

Tämän jälkeen pyöritetään salt-call käyntiin. Etsin virallisista dokumenteista verbose tasot ja tähän voidaan kokeilla ’info’ tasoa joka näyttää yleisesti mitä tapahtuu.

sudo salt-call -l info --local state.apply

Täällä Täällä Täällä

Mervin robotic errori tulee kun en tarkastanut sudolla. Nähdään kuitenkin, että kansio on paikallaan 👍🏼

Yhdistelmä ja idempotenttisuus

Tehdään myös vähän laajempi kokonaisuus yteen kutsuun. Esimerkkinä hyvä käyttää jotain vähän käytännöllisempää. Apache olkoot hyvä esimerkki. Kommentit mukana.

# /srv/salt/apache2/init.sls

# Apache2 paketti sisään
apache2:
  pkg.installed:
    - name: apache2

# Muokataan perus-etusivua
apache_etusivu:
  file.managed:
    - name: /var/www/html/index.html
    - source: salt://apache2/index.html # tiedosto eri paikasta huom salt: hakee saltin päähakemistosta suoraan - kätevä setti.
    # Vaaditaan, että apache2-paketti on asennettu ensin.
    # Muuten /var/www/html -hakemistoa ei välttämättä ole.
    - require:
      - pkg: apache2

# Varmistetaan päälläolo
apache_palvelu:
  service.running:
    - name: apache2
    - enable: True
    # Tarkkaillaan (watch) etusivun muutoksia. Jos se muuttuu,
    # käynnistä tämä palvelu uudelleen.
    - watch:
      - file: apache_etusivu

Sitten luodaan sivu ’apache2/index.html’ kansioon.

<!-- /srv/salt/apache2/index.html -->
<h1>Tämä on Saltin konfiguroima web-palvelin!</h1>
<p>Tila on idempotenttinen.</p>

Lisään myös top-tiedostoon apache2-tilan aktiiviseksi.

Täällä

Kokeilen myös syvempää vebose-tilaa. Debug:

sudo salt-call -l debug --local state.apply

Täällä

Ajan myös toisen kerran ja todistetaan idempotenssi.

Täällä

Hyvin toimii ja kaikki selkeää. Kuvista ei nyt selviä, mutta debug toistaa KAIKEN konsoliin. Info toimii useammin hyvin jos epävarma omasta reseptistä.

Kommentit

Olen tosissaan itse käyttänyt ansiblea ennen ja täytyy sanoa, että saltin käyttölogiikka tuntuu kivalta ja yksinkertaiselta. Näen jo valtavasti potenttiaalia tämän käytössä.

Lähteet

Teron salt settiä. Nano ihan hyvä :D https://terokarvinen.com/2024/hello-salt-infra-as-code/

Salt docs - hyvä vilkuilla aina kun tarvis https://docs.saltproject.io/en/latest/contents.html

Kuvat optimoitu https://optimage.app

Käytetty aika: 30min