• kod wykonywany na
serwerze
• deklaratywny
• jawne zależności
• template’y ERB
• Puppet DSL
• kod wykonywany na
kliencie
• deklaratywny
• ukryte zależności
• kiepska obsługa
template’ów
• CFEngine syntax
Puppet vs CFEngine
Slide 11
Slide 11 text
• kod wykonywany na
serwerze
• deklaratywny
• jawne zależności
• template’y ERB
• Puppet DSL
• kod wykonywany na
kliencie
• deklaratywny
• ukryte zależności
• template’y ERB
• It’s Ruby!
Puppet vs Chef
Slide 12
Slide 12 text
Kompilacja
Kod
Katalog
Raport
Wykonanie
Slide 13
Slide 13 text
• Fakty
• Zasoby
• Klasy
• Węzły
Katalog
Slide 14
Slide 14 text
Node
Puppet
Master
Fakty
Slide 15
Slide 15 text
Node
Puppet
Master
Katalog
Slide 16
Slide 16 text
Node
Puppet
Master
Raport
Slide 17
Slide 17 text
Puppet DSL
Slide 18
Slide 18 text
• język deklaratywny
• projektowany pod administratorów
• wystarcza w większości zastosowań
Slide 19
Slide 19 text
• nie da się w nim zrobić wszystkiego
• ograniczone instrukcje sterujące
• specyficzna składnia “<|| ||>”
Slide 20
Slide 20 text
Ruby DSL
Slide 21
Slide 21 text
• dodany w ~2010
• lib/puppet/dsl/*.rb
• nie dodaje zbyt wiele abstrakcji
Slide 22
Slide 22 text
• gołe obiekty Puppet::Parser::*
• brak części funkcjonalności
• projekt GSoC 2012 – rozwój Ruby DSL
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
Przykłady
Slide 25
Slide 25 text
class foo {
notice("foo")
}
node "default" {
include foo
}
Klasy
Slide 26
Slide 26 text
hostclass :foo do
notice ["foo"]
end
node "default" do
create_resource :class, :foo
end
Klasy
Slide 27
Slide 27 text
hostclass :foo do
notice "foo"
end
node "default" do
use :foo
end
Klasy
Slide 28
Slide 28 text
class foo ($param = "value") {
notice($param)
}
node "default" {
class { "foo": param => "foo" }
}
Parametry
Slide 29
Slide 29 text
hostclass :foo, :arguments =>
{"param" => AST::String.new(:value => "value")} do
notice [scope.lookupvar("param")]
end
node "default" do
create_resource :class, :foo, :param => "foo"
end
Parametry
Slide 30
Slide 30 text
hostclass :foo, :arguments => {:param => "value"} do
notice params[:param]
end
node "default" do
use :foo, :param => "foo"
end
Parametry