Versionhallinta

Versionhallinta - Palvelinten hallinta viikkotehtävä 3

TLDR

Tehtävässä loin paikallisen git varaston, tein muutoksia ja peruin niitä, sekä vein paikallisen git varaston githubiin ja laitoin sen sisään /srv/salt kansion sisällön.

Tehtävänanto

Markdown - Tehtävä A

Ensimmäisenä tehtävänä oli kirjoittaa tämä raportti markdownina. Olen kirjoittanut kaikki raporttini tähän mennessä markdownilla, joten tämä tapahtuu itsestään.

Laitoin markdown version tästä raportista samaan repositorioon, jonka luon myöhemmin tehtävän aikana. Sitä voi tarkastella täältä.

Paikallinen git varasto - Tehtävä B

Tehtävänä oli demonstroida omalla paikallisella git varastolla git log, git diff sekä git blame komentoja. Gitin käyttämisen alkuun pääsee helposti jo muutamalla komennolla. Tero Karvisella on hyvä artikkeli tähän liittyen.

gitlog

Git log näyttää git varaston commit historian. Täältä näkee kuka on tehnyt commitin, mihin aikaan ja minä päivänä, sekä committiin liitetyn viestin.

gitdiff

Git diff näyttää tiedostoihin tehdyt muutokset, joita ei ole vielä commitattu git varastoon. Mikäli olisin poistanut tiedostosta rivejä olisi git diff näyttänyt ne - merkillä + merkin sijaan. Mikäli muutokset on lisätty git add comennolla, muttei kuitenkaan vielä commitattu voi muutoksia tarkastella git diff --staged komennolla.

gitblame

Git blame vastaavasti näyttää kuka on tehnyt muutokset tiedostoon. Komento onkin nimetty hyvän muistisäännön mukaan, sillä komennolla voi tarkistaa ketä syyttää huonoista muutoksista.

Tee tyhmä muutos gittiin - Tehtävä C

Seuraavaksi vuorossa oli tehdä jokin tyhmä muutos gittiin. Päätin siis poistaa readme.md tiedoston ja lisätä sen commitoitavaksi git add komennolla. Muutoksia en kuitenkaan vienyt maaliin asti git commit -m komennolla vielä.

gitresethard

git reset --hard komento peruuttaa kaikki tehdyt muutokset ja palauttaa varaston tilan edelliseen committiin. Tämä tarkoittaa, että aikaiseemin tekemäni muutokset muutoksien sisäänkin poistuvat ja readme.md tiedosto palaa aikaisempaan muotoonsa.

Oh shit git sivustolta löytyy loistavia ohjeita sekä Englanniksi, että Suomeksi gitin käytöstä, mikäli jotain menee pieleen. Sivustosta on myös saatavilla kirosanaton versio Dangit git. Kirosanaton version on myös käännetty suomeksi.

Luo uusi salt moduuli - Tehtävä D

Tässä tehtävässä luodaan jokin uusi salt moduuli samaan tapaan kuin edellisessäkin tehtävässä. Ensin asennan käsin ja sitten automatisoin prosesesin saltin avulla. Päätin asentaa Postgresql tietokanta-ajurin. Ohjeita tämän asennukseen löytää täältä

psql

Käyttäjän sekä tietokannan luonti onnistui vaivattomasti. Seuraavaksi halusin luoda taulun tietokantaan.

CREATE TABLE employees(
	id serial primary key,
	name varchar(250),
	address varchar(250)
);

psqltaulu

Ja näin taulu on luotu tietokannan sisään.

Seuraavaksi on vuorossa tämän automatisointi, sekä idempotentin tilan luonti. Aloitin poistamalla kaiken asentamani.

$ sudo -u postgres dropdb toni
$ sudo -u postgres dropuser toni
$ sudo apt-get purge postgresql

Automatisointi

Aloitin luomalla kansion /srv/salt hakemiston sisään postgresiä varten. Nimesin kansion todella luovasti postgres. Tiedoston tarkoituksena on tarkistaa onko järjestelmä halutussa tilassa ja toimii asianmukaisesti mikäli ei ole. Haluttu tila on seuraava:

  • Postgresql asennettuna
  • Käyttäjä sekä tietokanta luotu
  • Taulu employees luotu sekä sen sisälle kentät:
    • id
    • name
    • address
# /srv/salt/postgres/init.sls sisältö

postgresql:
  pkg.installed

'createuser toni && createdb toni'
  cmd.run:
    - runas: postgres
    - unless: 'psql -c "\du"|grep toni'

'psql -c CREATE TABLE employees(id serial primary key, name varchar(250), address varchar(250))':
  cmd.run:
    - runas: toni
    - unless: 'psql -c "\d"|grep employees'

success

Komento onnistui ja halutut asetukset ovat voimassa.

inserted

Komennon ajo toni käyttäjänä myös onnistui, sillä käyttäjällä on oikeus lisätä tietoa tauluun.

Entä jos poistan taulun ja ajan salt komennon uudelleen?

deleet

uusisalt

Komento ajettiin onnistuneesti, ja muutoksia tapahtui vain yksi, joka oli taulun luonti. Tämä siis tarkoittaa, että salt tila on onnistuneesti luotu.

Vie salt kansiosi githubiin - Tehtävä E

Viimeisenä vuorossa oli viedä /srv/salt kansion sisältö githubiin. Aloitin siirtymällä /srv/salt kansioon ja ajamalla sudo git init komennon. /srv/salt kansion sisällä ei tavallisella käyttäjällä pysty luomaan kansioita tai muokkaamaan tiedostoja. Siksi siis sudo täytyy lisätä komentoon.

sudogit

Aikaisemmin linkkaamassani ohjeessa näytettiin, kuinka git varasto saadaan synkronoitua githubista paikalliseksi. Siksi oli tärkeää luoda tiedostoja etärepositorioon ensin ja sitten käyttää git pull komentoa vetääkseen repositorion paikalliseksi. Tässä tapauksessa /srv/salt kansioni ei ole tyhjä, joten linkitys githubiin täytyy tehdä hieman eri tavalla.

Alku pysyy kuitenkin samana. Githubiin luodaan repositorio haluamalla nimellä, sekä kuvauksella. Kuitenkin repositorion luontivaiheessa ei lisätä yhtäkään tiedostoa. Ei readme tai licence tiedostoa myöskään. Etärepositorion tulee olla täysin tyhjä luomisen jälkeen.

tyhjarepo

Github myös kohteliaasti kertoo ohjeet, kuinka olemassa oleva repositorio pusketaan githubiin

$ git remote add origin https://github.com/Vapalo/suolagit.git
$ git branch -M main
$ git push -u origin main

Seuraavaksi palasin paikalliseen git repositoriooni ajamaan nämä komennot. Komentoja ajaessani törmäsin ongelmaan. Unohdin aikaisemmassa kohdassa git init komennon jälkeen sanoa, että pitäisi ajaa git add ., git commit -m "Initial commit" komennot. Näitä ajaessa sudon avulla commitin tekijä muuttuu gittiin asetetusta käyttäjästä root käyttäjäksi. Arvelinkin, että näiden komentojen ajaminen sudolla oli huono idea ja tässä se materialisoitui.

Hätä ei ole tämän näköinen! Loin uuden kansion käyttäjäni kotihakemistoon ja kopioin /srv/salt sisällön sinne. Poistin samalla .git kansion /srv/salt kansion sisältä, jonka git init komento loi.

kotihakemistokansio

ekacommit

Näin commit saatiin tehtyä oikean käyttäjän tiedoilla.

Seuraavaksi ajoin githubin tarjoamat komennot, joilla paikallinen repositorio saadaan vietyä githubiin

githubkomennot

etärepo

Ja näin repositoriomme on näkyvä maailmalle! Sitä voi tarkastella täältä. Lisäsin readme tiedoston sekä licencen jälkikäteen.

Viimeisenä vuorossa oli poistaa paikallinen /srv/salt kansio ja palauttaa se githubista paikalleen. Poistin myös paikallisen suolagit repositorion.

rm-rf

Käytin git clone komentoa hankkiakseni suolagit kansioni takaisin githubista.

backagain

Viimeisenä loin /srv/salt kansion uudelleen, ja kopioin suolagitistä tuleet kansiot takaisin sen sisään. Testasin myös ajaa salt komennon paikallisesti, jotta näen tilojen toimivuuden.

createsrvsalt

endresult

Linkkejä