Puppet-VCSRepo mit mehreren Deploykeys auf einem Server

Vor Kurzem stand ich vor dem Problem, dass ich auf einem Server via Puppet mehrere VCSRepos deployen wollte, die allerdings jeder einen Deploy-Key benoetigen. Sowohl Gitlab als auch Github unterstuetzen es nicht einen Deploy-Key mehrfach zu verwenden, so dass man nicht einfach in der SSH-Config einen generellen Key fuer den Gitlab-Server angeben und damit alle Projekte deployen kann.

Als Loesung habe ich mich fuer eine Variante entschieden, mit der ich via Puppet die Keys verteile und der jeweilige Checkout seinen eigenen Deploy-Key nutzt. Der Key ist dabei fuer alle Server identisch aber fuer jedes Repository unterschiedlich.

  1. Es wird das Modul "puppet-concat" benoetigt.
  2. Zur Nutzung muss das PluginSync von Puppet eingeschaltet werden, da das Concat-Modul auf dem Puppet-Client ausgefuehrt wird
  3. Man legt eine fuer alle Server geltende SSH-Config an, die vom Concat-Modul geschrieben wird (Im Gist: global.pp)
  4. In die Concat-Umgebung kann in jedem Modul, welches ein VCSRepo-Deploy benoetigt ein SSH-Key eingehakt werden, der dann exklusiv fuer dieses Repository da ist (Im Gist: local.pp)
  5. Das Git-Repository wird in dem Fall dann auf den neu angelegten Hostname der SSH-Config gesetzt anstatt die originale URL zu nutzen

Im Code-Beispiel habe ich den Key als Content-Anweisung im Manifest stehen. Das sollte natuerlich nicht so gemacht werden und dient nur der Veranschaulichung ohne noch externe Dateien einzubinden.