Central management of multiple servers - Exercise 1
==============
==============
*Disclaimer:*
*Disclaimer:*
--------------
--------------
Tämä harjoitus on tehty osana Haaga-Helian Tietojenkäsittelyn koulutusohjelman kurssia [Palvelinten hallinta (ICT4TN022, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN022). Kurssin pitäjänä toimii [Tero Karvinen](http://terokarvinen.com/), joka on määritellyt tämän harjoituksen tehtävänkuvaukset. Tehtävien vastaukset ovat Pekka Heleniuksen (allekirjoittanut) tuottamia.
This exercise is a part of [Configuration Management (ICT4TN022, spring 2018) // Palvelinten hallinta (ICT4TN022, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN022) school course organized as a part of Information Technology studies in Haaga-Helia university of Applied Sciences, Helsinki, Finland. Course lecturer [Tero Karvinen](http://terokarvinen.com/) has defined the original assignment descriptions in Finnish presented in this document in English. Answers and translations have been written by Pekka Helenius (me, ~ Fincer).
*SISÄLLYSLUETTELO*
*Table of contents*
--------------
--------------
- [c) Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.](https://github.com/Fincer/central-management-of-multiple-servers/blob/master/h1.md#c-asenna-salt-master-ja-slave-pull-arkkitehtuurilla-eli-master-on-server-voit-laittaa-herran-ja-orjan-my%C3%B6s-samalle-koneelle-kokeile-suorittamalla-saltilla-komentoja-et%C3%A4n%C3%A4)
- [c) Install Salt master and minion using pull architecture (e.g. master takes server role). You can set up the master and the slave on the same computer. Test the configuration by issuing salt commands remotely.]()
- [d) Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.](https://github.com/Fincer/central-management-of-multiple-servers/blob/master/h1.md#d-kokeile-jotain-laineen-esimerkist%C3%A4-lainattua-tilaa-tai-tee-jostain-tilasta-oma-muunnelma-muista-testata-lopputuloksen-toimivuus-huomaa-ett%C3%A4-varastossa-on-my%C3%B6s-keskener%C3%A4isi%C3%A4-esimerkkej%C3%A4-kuten-battlenet-asennus-windowsille)
- [d) Test a salt-state example by Laine or modify some existing salt state configuration. Test the Salt-state functionality. Be aware that Laine has some unifinished examples on his repository (such as Battlenet installation on Windows)]()
- [e) Collect system information from Salt minion computers by using Salt grains interface.]()
- [f) Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).](https://github.com/Fincer/central-management-of-multiple-servers/blob/master/h1.md#f-oikeaa-el%C3%A4m%C3%A4%C3%A4-s%C3%A4%C3%A4d%C3%A4-saltilla-jotain-pient%C3%A4-mutta-oikeaa-esimerkiksi-omalta-koneeltasi-tai-omalta-virtuaalipalvelimelta-kannattaa-kokeilla-saltia-oikeassa-el%C3%A4m%C3%A4ss%C3%A4-mutta-jos-se-ei-onnistu-rakenna-jotain-oikeaa-konettasi-vastaava-virtuaaliymp%C3%A4rist%C3%B6-ja-tee-asetus-siin%C3%A4)
- [f) Real life test. Set up a real SaltStack configuration on your own computer or using your existing virtual server. (Note: It is recommended to test SaltStack in real life but if unsuccessful, configure a virtual environment for this assignment)][]
**c)** Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.
**c)** Install Salt master and minion using pull architecture (e.g. master takes server role). You can set up the master and the slave on the same computer. Test the configuration by issuing salt commands remotely.
--------------
--------------
**Vastaus:**
**Answer:**
Both `salt-master` and `salt-ssh` (+ SSH server daemon) should be installed on the host computer, `salt-minion` and SSH client on the client computer. We install both Salt minion and master to the same computer in this assignment.
Näistä salt-master ja salt-ssh (sekä ssh-palvelin) tulee asentaa isäntäkoneelle, salt-minion ja ssh-asiakasohjelma taas asiakaskoneelle. Tässä tapauksessa asennamme molemmat samalle koneelle.
Käynnistetään salt-master:
Start Salt master service:
```
```
sudo systemctl enable salt-master.service
sudo systemctl enable salt-master.service
sudo systemctl start salt-master.service
sudo systemctl start salt-master.service
```
```
Tarkistetaan salt-masterin status:
Check status of the Salt master service:
```
systemctl is-active salt-master.service
```
or
```
```
systemctl status salt-master.service
systemctl status salt-master.service
```
```
Käynnistetään salt-minion:
Start Salt minion service:
```
```
sudo systemctl enable salt-minion.service
sudo systemctl enable salt-minion.service
sudo systemctl start salt-minion.service
sudo systemctl start salt-minion.service
```
```
Tarkistetaan salt-minionin status:
Check status of the Salt minion service:
```
systemctl is-active salt-minion.service
```
or
```
```
systemctl status salt-minion.service
systemctl status salt-minion.service
```
```
Haetaan salt-masterin IP-osoite komennolla ifconfig*. IP-osoitetta indikoi tulosteen kohta inet.
Find out Salt master IP address by issuing `ifconfig` command*. IP address is the value of `inet` field in output.
*En käytä tässä Debian-pohjaisista jakeluista löytyvää [hostname -I](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562830) -komentoa, koska sitä ei ole muissa jakeluperheissä laajalti saatavilla oletuksena.
*On Debian-based Linux distributions, it is possible to find out IP addresses by issuing `hostname -I` command (see [hostname -I](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562830)) as this command is not widely available on other Linux distributions by default.
Kerrotaan salt-minionille salt-masterin IP-osoite (tai koneen nimi) luotuun salt-minionin konfiguraatiotiedostoon /etc/salt/minion.
Lisätään minionille ID-tunnus "orja".
We shall configure Salt master IP address (or hostname) for the Salt minion service by editing Salt minion configuration file `/etc/salt/minion`. In addition, we shall add an ID `slave` to the minion service.
Lisätään seuraavat kentät (/etc/salt/minion):
Issue command `sudo nano /etc/salt/minion` or `sudoedit /etc/salt/minion` and add the following entries:
```
```
master: 127.0.0.1
master: 127.0.0.1
id: orja
id: slave
```
```
Käynnistetään salt-minion uudelleen:
Restart Salt minion service:
```
```
sudo systemctl restart salt-minion.service
sudo systemctl restart salt-minion.service
```
```
Ajetaan master-koneella komennot:
Run the following commands in your Salt master:
```
```
sudo salt-key
sudo salt-key
sudo salt-key -A
sudo salt-key -A
```
```
Esimerkkituloste:
Sample output:
```
```
fincer@computer:~$ sudo salt-key
fincer@computer:~$ sudo salt-key
Accepted Keys:
Accepted Keys:
Denied Keys:
Denied Keys:
Unaccepted Keys:
Unaccepted Keys:
orja
slave
Rejected Keys:
Rejected Keys:
fincer@computer:~$ sudo salt-key -A
fincer@computer:~$ sudo salt-key -A
The following keys are going to be accepted:
The following keys are going to be accepted:
Unaccepted Keys:
Unaccepted Keys:
orja
slave
Proceed? [n/Y] y
Proceed? [n/Y] y
Key for minion orja accepted.
Key for minion slave accepted.
```
```
Käynnistetään vielä salt-minion uudelleen:
Restart Salt minion again (may not be necessary):
```
```
sudo systemctl restart salt-minion.service
sudo systemctl restart salt-minion.service
```
```
Ajetaan esimerkkikomento:
Run a sample command in order to test the Salt master/minion configuration:
```
```
fincer@computer:~$ sudo salt '*' cmd.run "ls /boot"
fincer@computer:~$ sudo salt '*' cmd.run "ls /boot"
orja:
slave:
System.map-4.15.0-13-generic
System.map-4.15.0-13-generic
abi-4.15.0-13-generic
abi-4.15.0-13-generic
config-4.15.0-13-generic
config-4.15.0-13-generic
@ -121,24 +132,24 @@ orja:
vmlinuz-4.15.0-13-generic
vmlinuz-4.15.0-13-generic
```
```
**d)** Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.
**d)** Test a salt-state example by Laine or modify some existing salt state configuration. Test the Salt-state functionality. Be aware that Laine has some unifinished examples on his repository (such as Battlenet installation on Windows)
--------------
--------------
**Vastaus:**
**Answer:**
Luodaan master-koneelle kansiopolku /srv/salt
Create folder path `/srv/salt` on the Salt master:
```
```
sudo mkdir -p /srv/salt
sudo mkdir -p /srv/salt
```
```
Lisätään tiedosto /srv/salt/top.sls ja /srv/salt/firewall.sls
Add new Salt state files `/srv/salt/top.sls` and `/srv/salt/firewall.sls`:
```
```
sudo touch /srv/salt/{top.sls,firewall.sls}
sudo touch /srv/salt/{top.sls,firewall.sls}
```
```
Lisätään firewall.sls:een seuraava sisältö (sudoedit /srv/salt/firewall.sls):
Add the following contents into the `/srv/salt/firewall.sls`:
Add the following contents into the `/srv/salt/top.sls`:
```
```
base:
base:
'orja':
'slave':
- firewall
- firewall
```
```
missä 'orja' on minionin (tai minioneiden, jos regex) ID-tunnus verkossa, ja 'firewall' viittaa masterin kansiossa /srv/salt olevaan tiedostoon firewall.sls, jonka sisältö orjalle ajetaan.
where `slave` refers to a minion ID* on the network, and `firewall` refers to the Salt state file `/srv/salt/firewall.sls` found on the Salt master. In this case, contents and configurations declared in `/srv/salt/firewall.sls` are supplied to the minion `slave`.
*Salt accepts regular expressions in minion ID field and, therefore, allows multiple minions to be matched. Any matching Salt minion on the network gets the configuration defined by Salt master. For instance, the following `/srv/salt/top.sls` configuration would match any minion ID starting with `slave` phrase (e.g. slave01, slavea, slave534, slave4 etc.)
Ajetaan masterilla komento:
```
base:
'slave*':
- firewall
```
Run the following command on Salt master:
```
```
sudo salt '*' state.highstate
sudo salt '*' state.highstate
```
```
jonka output on seuraavaa:
The previous command should print the following output:
```
```
fincer@computer:~$ sudo salt '*' state.highstate
fincer@computer:~$ sudo salt '*' state.highstate
orja:
slave:
----------
----------
ID: ufw
ID: ufw
Function: pkg.installed
Function: pkg.installed
@ -202,7 +222,7 @@ orja:
stdout:
stdout:
Firewall is active and enabled on system startup
Firewall is active and enabled on system startup
Summary for orja
Summary for slave
------------
------------
Succeeded: 2 (changed=1)
Succeeded: 2 (changed=1)
Failed: 0
Failed: 0
@ -212,20 +232,20 @@ Total run time: 1.718 s
```
```
UFW-palomuuri oli jo orjakoneelle asennettuna, mutta ei kytkettynä päälle. Täten suoritettiin vain yksi muutos, joskin ajettiin kaksi komentoa orjalle.
UFW firewall was already installed on the minion computer but it was not enabled properly. Therefore, only one modification was applied to the Salt minion computer configuration, although two commands were issued.
**e)** Collect system information from Salt minion computers by using Salt grains interface.
--------------
--------------
**Vastaus:**
**Answer:**
Kaikkien masterin hyväksymien minion-koneiden kaikki grains:t saa esille master-koneella ajettavalla komennolla:
Grains of every Salt minion (which have been accepted beforehand by the Salt master) can be printed out by issuing the following command on the Salt master:
```
```
sudo salt '*' grains.ls
sudo salt '*' grains.ls
```
```
Minioneiden salt:sta saa tietoja esimerkiksi seuraavasti (koskee kaikkia minion-koneita verkossa, ks. tähtimerkki):
Sample output, returned by a Salt minion (asterix (`*`) is a regex for matching any character, i.e. any Salt minion ID):
```
```
fincer@computer:~$ sudo salt '*' grains.items | grep saltversion -C 4
fincer@computer:~$ sudo salt '*' grains.items | grep saltversion -C 4
ja systemd:n pakettitietoja (flags) sekä versionumero:
Systemd information of a Salt minion (supported features and version number):
```
```
fincer@computer:~$ sudo salt '*' grains.item systemd
fincer@computer:~$ sudo salt '*' grains.item systemd
orja:
slave:
----------
----------
systemd:
systemd:
----------
----------
@ -256,31 +276,31 @@ orja:
237
237
```
```
Jne.
etc.
**f)** Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).
**f)** Real life test. Set up a real SaltStack configuration on your own computer or using your existing virtual server. (Note: It is recommended to test SaltStack in real life but if unsuccessful, configure a virtual environment for this assignment)
--------------
--------------
**Vastaus:**
**Answer:**
**HUOM!** Tehtävässä ei käytetty salt-ssh:ta!
**NOTE:** `salt-ssh` was not used in this assignment!
Asetetaan kaksi konetta samaan verkkoon. Toinen koneista on master, toinen minion.
Let's set up two Salt computers on the same network. One takes Salt master role, the other one takes Salt minion role.
- Master-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.101
- IP address of the Salt master is 10.11.11.101 (ifconfig)
- Minion-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.102
- IP address of the Salt minion is 10.11.11.102 (ifconfig)
Asennetaan Master ja Minion -konfiguraatiot kohdan c) -ohjeita mukaillen. Minion-koneella /etc/salt/minion -tiedostoon annetaan masterin IP-osoite ja orjakoneen ID muodossa
We shall set up Master and Minion system configurations by following instructions of the assignment c). On the Salt minion, add Salt master IP and Salt minion ID into `/etc/salt/minion` file:
```
```
master: 10.11.11.101
master: 10.11.11.101
id: orjakone
id: slave_computer
```
```
minkä jälkeen ajetaan master-koneella komennot (HUOM! minion-kone ei heti näy salt-key:n listauksessa):
after which you should run the following command on the Salt master (NOTE: Salt minion may not be immediately listed by `salt-key` command):
sudo sed -i '14,18d; s/salt\:\/\/webserver\//salt\:\/\//' /srv/salt/lamp.sls
sudo sed -i '14,18d; s/salt\:\/\/webserver\//salt\:\/\//' /srv/salt/lamp.sls
sudo salt 'orja*' state.apply lamp
sudo salt 'slave*' state.apply lamp
```
```
Wget:llä ladattu tiedosto sisältää määritykset myös index.html:lle, joita ei tässä laiteta. Siksi kys. tiedostoa koskevat rivit poistetaan em. sed-komennolla. Sed-komennolla poistetaan myös viittaus alihakemistoon webserver.
Salt state file `lamp.sls` includes definitions for `index.html` which are not defined in this assignment. We delete those definitions by issuing `sed` command above. In addition, references to subfolder `webserver` are also deleted with `sed` command.