Tehtävänanto
- Home Work X – Read the chapters 4-6 from course book – Salt States
- Home Work XI – Implement Tero Karvinen’s home work in this link to your Ubuntu web-tier minion. (this configures ssh-server to port -8888 with salt.
- Complete the other tasks listed in the week46.zip included word-document.
- For your own sanity’s sake configure your editor of choise to support YAML and Jinja -syntax highlighting!
Vastaukset
Käyttäjät loin yhtä tilatiedostoa käyttäen sisältäen sekä end goal sliden käyttäjät että omanimi käyttäjän. Kaikkilla käyttäjillä on admin oikeudet heille relevantteihin koneisiin. users.sls tiedoston koodi:
olli:
user.present:
- password: salainen
- hash_password: true
- groups:
{% if grains['os_family'] == 'Debian' %}
- sudo
{% elif grains['os_family'] == 'RedHat' %}
- wheel
{% endif %}
{% if grains['role'] == 'Web_tier' %}
bob:
user.present:
- password: salainen
- hash_password: true
- groups:
- sudo
{% endif %}
{% if grains['role'] == 'DB_tier' %}
mary:
user.present:
- password: salainen
- hash_password: true
- groups:
- wheel
{% endif %}
kevin:
user.present:
- password: salainen
- hash_password: true
- groups:
{% if grains['os_family'] == 'Debian' %}
- sudo
{% elif grains['os_family'] == 'RedHat' %}
- wheel
{% endif %}
stuart:
user.present:
- password: salainen
- hash_password: true
- groups:
{% if grains['os_family'] == 'Debian' %}
- sudo
{% elif grains['os_family'] == 'RedHat' %}
- wheel
{% endif %}
En ole ihan varma minkä takia tehtävissä käsketään kasvattamaan CentOS asennuksen levykapasiteettia 20 gigaan, kun se selkeästi on jo 20 gigainen:
Useimpien palveluiden asentaminen onnistui yhdellä tilatiedostolla, lukuun ottamatta luonnollisesti WordPressiä. MariaDB:n konfiguroimisen menin kuitenkin hoitamaan manuaalisesti ssh:lla, koska saltin mysql moduulien toiminnan selvittäminen alkoi käydä hermoille.
endstate.sls:
{% if grains['role'] == 'Web_tier' %}
install_lamp:
pkg.installed:
- pkgs:
- apache2
- php
- mariadb-client
- php-mysql
- unzip
apache_is_running:
service.running:
- name: apache2
- enable: True
- require:
- pkg: install_lamp
{% endif %}
{% if grains['role'] == 'DB_tier' %}
install_mariaDB:
pkg.installed:
- pkgs:
- mariadb
- mariadb-server
{% endif %}
WordPressin asennus hoitui tilatiedostolla, jonka ensimmäinen osa on käytännössä bash-skripti ja toinen osa kopioi valmiit tietokanta konfiguroinnit palvelimelle. Konfigurointi-tiedosto on muokattu versio tämän valmiin Worpress asennuksen sample konfiguraatiosta. Asennuksen viimeistelyn tein perinteisesti selaimessa, vaikka kai saltin wordpress moduulia olisi pitänyt käyttää siihenkin.
wpinstall.sls:
install_WP:
cmd.run:
- name: |
cd /tmp
wget https://wordpress.org/latest.zip
unzip -d /var/www/html/ latest.zip
chown www-data:www-data -R /var/www/html/wordpress/
sync wp-config.php:
file.managed:
- name: /var/www/html/wordpress/wp-config.php
- source: salt://wp-config.php
- user: www-data
- group: www-data
- mode: 755
Se toimii:
Ssh-autentikaation toteutus kopio pillar-tiedostoon tallennetut ssh-avaimet (sekä julkisen että yksityisen) id_rsa ja authorized_keys tiedostoihin kaikkien koneiden olli käyttäjälle mahdollistaen olli-käyttäjän avainpohjaisen tunnistautumisen jokaiselta koneelta jokaiselle toiselle koneelle. Pieni ongelma tässä on, että tämä ratkaisu ylikirjoittaa authorized_keys-tiedoston, joten muita kirjautumisavaimia ei voi olla rinnalla.
manage_ssh.sls:
{% if 'ssh_key' in pillar %}
manage_ssh_key:
file.managed:
- name: /home/olli/.ssh/{{ pillar['ssh_key_name'] }}
- mode: 700
- contents_pillar: ssh_key
- show_diff: False
- makedirs: True
- user: olli
- group: olli
manage_pub_ssh_key:
file.managed:
- name: /home/olli/.ssh/{{ pillar['pub_ssh_key_name'] }}
- mode: 700
- contents_pillar: pub_ssh_key
- show_diff: False
- makedirs: True
- user: olli
- group: olli
{% endif %}
SSH palvelinten porttien muuttaminen 8888:aan oli enimmäkseen copy/paste tehtävä, mutta CentOS onnistui taas heittämään mutkan matkaan, koska CentOS:n käyttämä SELinux-järjestelmä oletuksena estää ssh:n portin muuttamisen mihinkään muuhun porttiin. (Huomasin vasta tehtävän jo tehtyäni että tarkoitus oli implementoida tämä vain Web minionille, eikä CentOS:lle). Tämä korjaantuu onneksi yhdellä komennolla:
salt -G 'os_family:RedHat' cmd.run 'semanage port -a -t ssh_port_t -p tcp 8888'
Ja kirjautuminen CentOS:llekkin portista 8888 toimii:
olli@UbuntuSaltMaster:~/.ssh$ ssh -p 8888 10.208.0.244
Last login: Mon Dec 30 00:52:22 2019
[olli@CentOS7Db1 ~]$