Puppet: Hiera und Defined Types

puppetlabs apache vhost hiera howto

Das waren in etwa die Stichworte in der Suche als ich versucht habe meine mit dem puppetlabs/apache Modul definierten Apache vhosts aus der site.pp nach hiera zu migrieren. Es wollte nämlich einfach nicht klappen. Nach einiger Zeit bin ich dann darauf gestoßen, dass es sich bei dem apache::vhost um einen sogenannten Defined Type handelt. Diese sind sehr ähnlich zu Klassen, lassen sich aber im Gegensatz zu diesen mehrfach auf einem Node definieren.

Das automatische Parameter-Lookup wie bei den Klassen funktioniert bei Defined Types hingegen nicht. Lösung ist die create_resources() Funktion. Aber damit ich das später auch noch verstehe wenn ich hier in den Blogeintrag hineingucke schreibe ich ein praktisches Beispiel auf.

Ein Apache vhost in der site.pp:

node 'www.example.org' inherits default {
apache::vhost {'www.example.org':
  servername    => 'www.example.org',
  serveraliases => [ 'example.org' ],
  serveradmin   => 'webmaster@example.org',
  port          => '80',
  docroot       => '/var/www/example.org/www/',
}

wird in hiera zu:

---
apache::vhost:
  'www.example.org':
    servername: 'www.example.org'
    serveraliases:
      - 'example.org'
    serveradmin: 'webmaster@example.org'
    port: '80'
    docroot: '/var/www/example.org/www/'

und damit dieser Eintrag auch ausgewertet und der vhost erzeugt wird sieht die site.pp danach wie folgt aus:

node 'www.example.org' inherits default {
  $myApacheVhosts = hiera('apache::vhost', {})
  create_resources('apache::vhost', $myApacheVhosts)
}

Ich empfehle hier wärmstens das Chapter 3 – Using Hiera von Puppet Lunch. Ich habe lange im Netz gesucht und bin schließlich dort fündig geworden.

Howto: Clone LDAP Server

Alles Zeugs mit slapcat und slapadd hat bei mir nicht funktioniert. Nur zum festhalten:

$ slapcat -l ldapdump-$(date -I).ldif
$ slapadd -l ldapdump-$(date -I).ldif

Hier hat jemand wohl erfolg gehabt…

Was bei mir gut funktioniert hat war den neuen LDAP erst einmal mehr oder weniger so aufzusetzen wie den alten, also gleiche DN und schemas drin (dpkg-reconfigure slapd). Anschliessend habe ich mit ldapsearch auf dem alten Server alles exportiert und mit ldapadd auf dem neuen Server importiert:

$ ldapsearch -x -LLL > ldapdump-$(date -I).ldif
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -W -f ldapdump-$(date -I).ldif

Der entscheidene Hinweis kam von hier.

— UPDATE 2013-07-31 —

Bei dem Export mittels ldapsearch sicherstellen, dass auch die userPassword: Eintraege mit exportiert werden. Ansonsten muss man sich gegebenenfalls authentifizieren zum Beispiel mit:

$ ldapsearch -x -LLL -H ldap://127.0.0.1:389 -D "cn=admin,dc=example,dc=org" -W | gzip > $(date -I)-ldapdump.ldif.gz

Howto: Apache mit SVN sowie ACL + Migration

Im folgenden ist beschrieben, wie man einen SVN-Server mit HTTP-Zugang einrichtet und anschliessend ein vorhandenes Repository auf diesen neuen Server umzieht. Die Anleitung bezieht sich auf einen Ubuntu Server, es sollte sich jedoch auf Debian Systemen alles analog verhalten.

Zuerst wird die benoetigte Software installiert:

apt-get install subversion libapache2-svn

Danach werden die erforderlichen Ordnerstrukturen angelegt:

mkdir /srv/svn
mkdir /srv/svn/repository
 
chown www-data:www-data /srv/svn/repository
chmod 770 /srv/svn/repository

Als naechstes wird die Datei /etc/apache2/mods-available/dav_svn.conf entsprechend konfiguriert. Hier werden verschiedene Dinge eingestellt, unter anderem fuer die Zugangsbeschraenkungen und ACLs:

<Location /svn>
  DAV svn
  SVNParentPath /srv/svn/repository
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /srv/svn/dav_svn.passwd
  AuthzSVNAccessFile /srv/svn/dav_svn.authz
  Require valid-user
</Location>

Nun wird in der /srv/svn/dav_svn.passwd ein neuer Benutzeraccount angelegt, der Zugriff auf das Repository bekommen soll:

htpasswd -c /srv/svn/dav_svn.passwd USERNAME

Und in der /srv/svn/dav_svn.authz die entsprechenden ACL-Rechte gesetzt:

[example:/]
USERNAME = rw

Zum Schluss wird das Repository migriert. Dafuer muss auf dem alten Server ein entsprechender Repository-Dump erzeugt, und auf den neuen Server kopiert werden:

svnadmin dump /path/to/repository/foobar > foobar.dump
scp foobar.dump user@example.net:

Auf dem neuen Server wird nun ein neues Repository angelegt und mit dem vorher erstellten und kopierten Dump befuellt. Damit es die richtigen Rechte hat, wird es als Benutzer www-data gemacht

cd /srv/svn/repository
su www-data
svnadmin create foobar
svnadmin load foobar < foobar.dump

Das wars! Ab nun kann man auf das Repository auf den neuen Server schwenken und damit arbeiten. In diesem Beispielfall koennte es das folgende sein:

http://example.net/svn/foobar