presentation: minitest + demo
This commit is contained in:
parent
edd008af90
commit
720d2a23ff
@ -9,15 +9,17 @@ von Jörg Thalheim, (Gruppe 4, Matrikel 3749175)
|
|||||||
Dresden, 22 Januar #TODO aktualisieren
|
Dresden, 22 Januar #TODO aktualisieren
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Inhaltsübersicht
|
## Inhaltsübersicht
|
||||||
|
|
||||||
- Was ist Konfigurationsmanagement
|
- Was ist Konfigurationsmanagement
|
||||||
- Was ist Chef/Puppet
|
- Was ist Chef/Puppet
|
||||||
- Einführung in Chef
|
- Einführung in Chef
|
||||||
- Testing
|
- Tests
|
||||||
- Demo
|
- Demo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Was ist Konfigurationsmanagement?
|
## Was ist Konfigurationsmanagement?
|
||||||
|
|
||||||
- Konfigurationsmanagement
|
- Konfigurationsmanagement
|
||||||
@ -44,6 +46,7 @@ Note:
|
|||||||
eingehen.
|
eingehen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Was ist Chef/Puppet?
|
## Was ist Chef/Puppet?
|
||||||
|
|
||||||
<table class="reveal">
|
<table class="reveal">
|
||||||
@ -113,9 +116,11 @@ Note:
|
|||||||
Support anbieten und Hosting anbieten
|
Support anbieten und Hosting anbieten
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Einführung in Chef
|
## Einführung in Chef
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Chef-Einführung: Grundbegriffe
|
### Chef-Einführung: Grundbegriffe
|
||||||
- Node, z.B.: node100.tu-dresden.de
|
- Node, z.B.: node100.tu-dresden.de
|
||||||
- Role, z.B.: headnode, ldap
|
- Role, z.B.: headnode, ldap
|
||||||
@ -146,6 +151,7 @@ Note:
|
|||||||
- der Dienst slurmctld, welcher gestartet werden soll.
|
- der Dienst slurmctld, welcher gestartet werden soll.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Chef-Einführung: Aufbau eines Cookbook
|
### Chef-Einführung: Aufbau eines Cookbook
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -197,6 +203,7 @@ Note:
|
|||||||
vergleichbar mit erzeugen von Webseiten, gleich ein Beispiel dazu
|
vergleichbar mit erzeugen von Webseiten, gleich ein Beispiel dazu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Chef-Einführung: Code-Beispiel
|
### Chef-Einführung: Code-Beispiel
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
@ -251,15 +258,18 @@ Note:
|
|||||||
- Verzweigungen und Schleifen möglich
|
- Verzweigungen und Schleifen möglich
|
||||||
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
```
|
## Tests: Chef Spec
|
||||||
|
```ruby
|
||||||
|
# spec/cookbooks/ntp_spec.rb
|
||||||
require_relative '../spec_helper'
|
require_relative '../spec_helper'
|
||||||
|
|
||||||
describe 'ntp::default' do
|
describe 'ntp::default' do
|
||||||
let(:chef_run) do
|
let(:chef_run) do
|
||||||
ChefSpec::Runner.new do |node|
|
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.converge(described_recipe)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -274,5 +284,54 @@ Note:
|
|||||||
- Infrastruktur: schwierig zu testen, viele externe Abhängigkeiten, langsam
|
- Infrastruktur: schwierig zu testen, viele externe Abhängigkeiten, langsam
|
||||||
- Ruby: dynamische Programmiersprache -> Tippfehler, keine Compilerwarnung beim
|
- Ruby: dynamische Programmiersprache -> Tippfehler, keine Compilerwarnung beim
|
||||||
Refactoring
|
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
|
## 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?
|
||||||
|
Loading…
Reference in New Issue
Block a user