Categories
Uncategorized

Augeas und Reihenfolge

Problem: mit HIlfe von Augeas einen Eintrag zur /etc/hosts Datei hinzufügen.

Erste Lösung:

augeas { "${title}" : 
    context => '/files/etc/hosts', 
    changes => [
        "rm *[canonical = '${host}']", 
        "set 02/canonical ${host}",
        "set 02/ipaddr ${ip}", 
    ]
}

Funktioniert nicht. Warum? Trotz Aufruf von “save” am Ende einer jeden Sitzung im augtool ist die Reihenfolge der Anweisungen durchaus entscheidend – die Daten werden offenbar nicht erst am Ende zusammengesetzt. Hier z.B. gilt: In der gleichen Reihenfolge vorgehen, wie es auch in die Datei geschrieben werden würde. Und da steht nun mal am Anfang die IP Adresse. Daher also eine einfache kleine Änderung machen und schon gehts:

augeas { "${title}" : 
    context => '/files/etc/hosts', 
    changes => [
        "rm *[canonical = '${host}']", 
        "set 02/ipaddr ${ip}", 
        "set 02/canonical ${host}",
    ]
}

(Ganz davon abgesehen dass man einfach den host{} Typen von Puppet verwenden sollte)

Categories
Uncategorized

Puppet & Augeas & Pulp

Ach Augeas ist schon genial. Wenn nur nicht … (jaja, immer was zu meckern). Anlass diesmal: /etc/pulp/admin/admin.conf. Das ist eine in Augeas nicht vorgesehene Datei, und die Augeas-Doku ist … nun ja. Analyse: Die Datei besteht aus Sektionen (“[blablubb]”), und Einträgen (“hallo = welt”). Da sollte sich doch was finden lassen.

Tut es auch: Die IniFile-Lens. Preisfrage: Wie testet man das? Beim Ausprobieren stieß ich auch auf die Information, dass die IniFile-Lens nicht für direkte Nutzung gedacht ist, sondern nur für die Nutzung in … abgeleiteten Lenses. Wie z.B. der Puppet-Lens. Die angeblich gut passt. Dann testet man das auf der Konsole folgendermaßen:

augtool> set /augeas/load/IniFile/lens Puppet.lns
augtool> set /augeas/load/IniFile/incl /etc/pulp/admin/admin.conf
augtool> load
augtool> match /files/etc/pulp/admin/admin.conf/server/host
/files/etc/pulp/admin/admin.conf/server/host = localhost.localdomain

Schee. Total intuitiv, oder? 🙂

Ich möchte also den Wert von “host” unter “[server]” ändern, wie man sieht. Die dafür notwendige Puppet-Regel sieht so aus:

augeas { "admin.conf/${key}":
    incl    => '/etc/pulp/admin/admin.conf',
    lens    => 'Puppet.lns',
    onlyif  => "get /files/etc/pulp/admin/admin.conf/server/host != ${hostname}",
    changes => [
        "set /files/etc/pulp/admin/admin.conf/server/host ${hostname}",
    ],
}

So wird ein Schuh draus. Man beachte, dass in der onlyif-Abfrage vor und hinter “!=” ein Leerzeichen stehen muss.