Environments vergleichen mit catalog_preview ohne Puppet Master

Ich habe pro Environment eine Branch im Git. Bei einer Änderung will ich vorab sehen wo sie konkret Auswirkungen hat. Dies kann man mit dem catalog_preview Modul von Puppet machen. Auch ohne Zugriff auf den Master - es lässt sich mit vertretbarem Aufwand erreichen.

Standardmässig kann man es auf dem Puppet Master ausführen. Es wäre aber schon vor grossem Vorteil, wenn man die Änderung schon bevor man einen Commit gemacht hat teste könnte.


Dazu musst du:
  • (einmalig) eine Kopie vom yamldir Ordner auf dem Puppet Master organisieren (puppet master --configprint yamldir)  und in einem Ordner (z.B. mock_yaml) speichern
    • in den yaml Dateien findest du die Node und Fact Daten. Diese werden benötigt für den Kompiliervorgang
    • einmalig ist untertrieben - die Daten sollten natürlich einigermassen den aktuelle Nodes entsprechen und somit auch regelmässig wieder aktualisiert werden
  • installiere dir das catalog_preview Modul: puppet module install puppetlabs-catalog_preview
    • das brauchst du nicht als root zu machen. Wenn du es als User ausführst landet es in deinem User-Verzeichnis (puppet module --configprint basemodulepath)
  • Mache einen Checkout der baseline (z.B. master Branch) and Kopiere deinen aktuellern Branch als preview (feature branch) in einen gemeinsamen Ordner z.B. environments damit das dann so etwa aussieht:
    • environments/production/... und
    • environments/feature/...
  • Lasse puppet preview mit den folgenden Parametern laufen:
    • --environmentpath $(pwd)/environments
    • --yamldir $(pwd)/mock_yaml
    • --node_terminus yaml
    • --baseline_environment=production
    • --preview_environment=feature
    • ... weiter Parameter sind nötig wenn du hieradaten hast (hiera_config param und eine entsprechende hiera.yaml) !
     
Natürlich kann man das ganze noch automatisieren, damit man z.B. nur noch "rake test_catalogs" oder ähnliches ausführen muss.

Beispiel

Ordner- und Dateistruktur für diesen kleinen Test:

./environments/feature/manifests/site.pp
./environments/production/manifests/site.pp
./mock_yaml
./mock_yaml/node/mock.node.yaml
./mock_yaml/node/mock1.node.yaml
./mock_yaml/facts/mock.node.yaml
./mock_yaml/facts/mock1.node.yaml

Preview:
#> /opt/puppetlabs/bin/puppet preview \
  --environmentpath $(pwd)/environments \
  --yamldir $(pwd)/mock_yaml \
  --baseline_environment=production \
  --preview_environment=feature \
  --view overview \
  mock.node mock1.node

Stats
  Total number of nodes: 2, 100.0%
  Conflicting..........: 2, 100.0%
  Compliant............: 0,   0.0%
  Equal................: 0,   0.0%

Changes per Resource Type
  Notify
    title: 'määääääh' (missing, conflicting) at: /home/mock/tmp/puppettest/environments/production/manifests/site.pp:1 on mock.node, mock1.node
    title: 'muhhh' (added, compliant) at: /home/mock/tmp/puppettest/environments/feature/manifests/site.pp:1 on mock.node, mock1.node

Changes of Edges
  added_edges
    Class[main] => Notify[muhhh] on nodes mock.node, mock1.node
  missing_edges
    Class[main] => Notify[määääääh] on nodes mock.node, mock1.node

Top ten nodes with most issues
  node name   errors  warnings   diffs
  ---------- -------- -------- --------
  mock.node         0        0        2
  mock1.node        0        0        2


Referenzen

Beliebte Posts aus diesem Blog