Categories
Linux

Puppet: MySQL user management

Kleines Puppet Rezept um zu überprüfen ob ein MySQL User bereits existiert und falls nicht, diesen anzulegen:

class mysql-management {

    $mysql_password = "verysecure"

    exec { "mysql-password_nms" :
        path => ["/bin", "/usr/bin", "/usr/sbin"],
        unless => "bash -c \"if [ `mysql -B -N -u admin -p$mysql_password -e \\"SELECT COUNT(*) FROM mysql.user WHERE user='manager' AND host='localhost'\\"`  == \\"1\\" ]; then exit 0; else exit 1; fi;\"",
        command => "mysql -u admin -p$mysql_password -e \"GRANT ALL ON *.* TO manager@'localhost' IDENTIFIED BY 'superpassword' WITH GRANT OPTION;\""
    }
}

Das Kommando bei “unless” finde ich etwas umständlich – aber mir ist nichts eleganteres eingefallen um auf einen User zu prüfen… Nachtrag: Das vorgesetzte Bash-Kommando ist notwendig damit das IF-Konstrukt auch auf allen Systemen funktioniert. Puppet setzt anscheinend je nach Distribution auf einen anderen Interpreter. Damit wird die Escape-Orgie aber nur noch schöner.

One reply on “Puppet: MySQL user management”

Hi!
Stand gerade vor dem gleichen Problem wie Du, doch die von Dir vorgeschlagene Escape-Orgie missfällt mir. Und nach einigen Überlegen und Testen bin ich zu folgender Lösung gekommen:


unless => "test 1 -le `mysql -NB \
-u root -p'${mysql::rootPassword}' mysql \
-e \"SELECT count(User) FROM user \
WHERE user='${user}' \
AND password=${pwdUnlessSnippet} \
AND host='${host}';\"`",

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.