From 720d2a23ff09dbf82a3e2096e17ccb9eb6b22915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 18 Feb 2014 20:10:16 +0100 Subject: [PATCH] presentation: minitest + demo --- presentation/presentation.md | 67 +++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/presentation/presentation.md b/presentation/presentation.md index 86a36e7..047d674 100644 --- a/presentation/presentation.md +++ b/presentation/presentation.md @@ -9,15 +9,17 @@ von Jörg Thalheim, (Gruppe 4, Matrikel 3749175) Dresden, 22 Januar #TODO aktualisieren + ## Inhaltsübersicht - Was ist Konfigurationsmanagement - Was ist Chef/Puppet - Einführung in Chef -- Testing +- Tests - Demo + ## Was ist Konfigurationsmanagement? - Konfigurationsmanagement @@ -44,6 +46,7 @@ Note: eingehen. + ## Was ist Chef/Puppet? @@ -113,9 +116,11 @@ Note: Support anbieten und Hosting anbieten + ## Einführung in Chef + ### Chef-Einführung: Grundbegriffe - Node, z.B.: node100.tu-dresden.de - Role, z.B.: headnode, ldap @@ -146,6 +151,7 @@ Note: - der Dienst slurmctld, welcher gestartet werden soll. + ### Chef-Einführung: Aufbau eines Cookbook ```bash @@ -197,6 +203,7 @@ Note: vergleichbar mit erzeugen von Webseiten, gleich ein Beispiel dazu + ### Chef-Einführung: Code-Beispiel ```ruby @@ -251,15 +258,18 @@ Note: - Verzweigungen und Schleifen möglich -## Testing -``` +## Tests: Chef Spec +```ruby +# spec/cookbooks/ntp_spec.rb require_relative '../spec_helper' describe 'ntp::default' do let(:chef_run) do ChefSpec::Runner.new do |node| - node.set["ntp"]["subnets"] = ["::1", "127.0.0.1", "172.28.128.0 mask 255.255.255.0 nomodify notrap nopeer"] + subnets = ["::1", "127.0.0.1", + "172.28.128.0 mask 255.255.255.0 nomodify notrap nopeer"] + node.set["ntp"]["subnets"] = subnets end.converge(described_recipe) end @@ -274,5 +284,54 @@ Note: - Infrastruktur: schwierig zu testen, viele externe Abhängigkeiten, langsam - Ruby: dynamische Programmiersprache -> Tippfehler, keine Compilerwarnung beim Refactoring +- Chef: 2 Phasen der Ausführung: Converging und eigentliche Ausführungsphase +- Converging: Einlesen aller Resourcen -> Abhängigkeitsbaum +- Chefspec: Nur Convergingphase + -> Vorteil: sehr schnell (1s), keine Abhängigkeiten beim Testen außer Chef + -> Nachteil: es wird nichts ausgeführt + - gut für schnelle Validierung, Testen vom Zusammenspiel verschiedener + Module, einfache Logik testen, Tippfehler +- chef\_run: Attribute des Nodes +- it-block: Eigentliche Assertions + + + +## Tests: Minitest Chef Handler + +```ruby +# ntp/files/default/test/default_test.rb +require 'minitest/spec' + +describe_recipe 'ntp::default' do + it "starts the ntp daemon" do + assert_sh("service ntp status") + end + it "should sync the time" do + assert_sh("ntpq -p") + end +end +``` + +Note: +- Minitest: werden nach jedem Deployment gestartet +-> Integrationstests +- Ähnliche Healtschecks wie bei Monitoringsystemen oder unserem Test während des Praktikum +-> Benachrichtung via Chefhandler möglich z.B. per Email, Jabber, ... + + ## Demo + +Note: +- Abschlussaufgabe: Einrichten von 2 beliebigen Netzwerksdiensten wie im Praktikum +- In meinen Fall: NTP, Dns mit Bind, DHCP +- Vagrant: Starten einer Headnode: mehre Computenodes bekommen über das interne + Netzwerk per DHCP eine IP, nutzen das DNS und NTP des Headnode, Headnode als + Router +Ablauf: +- Headnode: Schon provisioniert +- 1. Computenode: provisioniert +- 2. Computenode: neu provisionieren +- Headnode verkonfigurieren -> erneutes Provisioning + +- Fragen?