Jan Ulrich Hasecke
2019-11-21 47bc28d554b0c474b06cdd291d6e7b8c942af359
Skript läuft, Parameter für Paket, Domain, Projekt-ID und Einbindung von pass
2 files modified
69 ■■■■ changed files
source/referenz/hsadmin/createall.py 29 ●●●●● patch | view | raw | blame | history
source/referenz/hsadmin/skript.rst 40 ●●●● patch | view | raw | blame | history
source/referenz/hsadmin/createall.py
@@ -2,11 +2,18 @@
import string
import sys
from hs.admin.api import API
from subprocess import check_output
paketadmin = sys.argv[1]
domainname = sys.argv[2]
projektid = sys.argv[3]
pw = check_output(["pass", "hostsharing/"+paketadmin]).decode("utf-8").strip("\n")
api = API(cas=dict(
    uri='https://login.hostsharing.net/cas/v1/tickets',
    service='https://config.hostsharing.net:443/hsar/backend'),
    credentials=dict(username='xyz00', password='Y2kbZb)d*GQF%q1~m?7d8,]+'),
    credentials=dict(username=paketadmin, password=pw),
    backends=[
        'https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin',
        'https://config2.hostsharing.net:443/hsar/xmlrpc/hsadmin'])
@@ -19,16 +26,16 @@
pw_dadmin = pwGen()
pw_dbuser = pwGen()
dadmin = paketadmin+'-'+domainname.replace("-", "_")
dbuser = paketadmin+'_'+projektid
dbname = paketadmin+'_'+projektid
domainname = sys.argv[1]
dbname = domainname.replace(".", "_")
api.user.add(set={'name': 'xyz00-'+domainname, 'password': pw_dadmin, 'shell': '/bin/bash'})
api.domain.add(set={'name': domainname, 'user': 'xyz00-'+domainname})
api.mysqluser.add(set={'name': 'xyz00_'+dbname, 'password': pw_dbuser})
api.mysqldb.add(set={'name': 'xyz00_'+dbname, 'owner': 'xyz00_'+dbname})
api.user.add(set={'name': dadmin, 'password': pw_dadmin, 'shell': '/bin/bash'})
api.domain.add(set={'name': domainname, 'user': dadmin})
api.mysqluser.add(set={'name': dbuser, 'password': pw_dbuser})
api.mysqldb.add(set={'name': dbname, 'owner': dbuser})
print("Domainname:" +domainname)
print("Domain-Admin: xyz00-"+domainname + "Passwort:" +pw_dadmin)
print("Datenbank-Nutzer: " +dbname + "Passwort:" +pw_dbuser)
print("Datenbank: " +dbname)
print("Domain-Admin: " + dadmin + " mit dem Passwort:" +pw_dadmin)
print("Datenbank-Nutzer: " +dbuser + " Passwort:" +pw_dbuser)
print("Datenbankname: " +dbname)
source/referenz/hsadmin/skript.rst
@@ -177,16 +177,46 @@
   :lines: 11-12
Das vollständige Skript, mit dem man eine Domain mit Domain-Admin sowie eine Datenbank mit einem Datenbank-Nutzer erzeugt, sähe dann so aus:
Nun wollen wir diese Befehle in ein Skript einbauen, das noch einige andere nützliche Dinge für uns erledigt.
Reseller und Webmaster, die viele Anwendungen betreuen, buchen häufig mehrere Pakete bei Hostsharing, sodass sie gerne ein Skript hätten, dem sie auch das Kürzel für das Paket übergeben können, in dem sie eine Domain mit Datenbank einrichten möchten.
Außerdem wäre es hilfreich, wenn das Skript dafür sorgt, dass Benutzernamen und Datenbankenname immer nach einem einheitlichen Schema erzeugt werden, sodass die Orientierung leichter fällt.
In unserem Beispielskript übergeben wir daher dem Skript drei Argumente:
1. das Kürzel für das Paket
2. den Domainnamen
3. eine Projekt-ID
Die Projekt-ID darf nicht mehr als 10 Zeichen umfassen, da sie zusammen mit dem fünfstelligen Paketkürzel in den Namen für Datenbank und Datenbank-Nutzer verwendet wird. Diese dürfen aber nicht länger als 16 Zeichen sein.
Als Schema für eine Projekt-ID kommt also beispielsweise eine Kombination aus einer Kundennummer und einer Abkürzung in Frage.
Wir verwenden in unserem Beispiel dafür eine dreistellige Kundennummer und die Abkürzung ``wp`` für Wordpress.
Die Elemente trennen wir mit dem Unterstrich, da nur dieser als Namensbestandteil erlaubt ist.
Wenn wir für den Kunden mit der Kundennummer 23 im Paket ``xyz00`` eine Domain für einen Wordpress-Blog einrichten möchten, lautet der Aufruf des Skripts folgendermaßen:
.. code-block:: console
   $ python createall.py xyz00 hs-example.de 023_wp
Der Code des Skripts sieht so aus:
.. literalinclude:: createall.py
   :linenos: 
.. todo:: Skript läuft noch nicht.
In den ersten fünf Zeilen importieren wir einige Module bzw. Funktionen, die wir benötigen.
In den Zeilen 7 bis 9 lesen wir die übergebenen Argumente aus und speichern die Werte in entsprechenden Variablen.
Beim Aufruf des Skripts muss man nur noch den gewünschten Domainnamen übergeben:
Um das API-Objekt zu erzeugen, benötigen wir das Passwort für den übergebenen Paket-Admin.
Wir lesen in Zeile 11 das Passwort aus dem verschlüsselten Passwort-Tresor des Kommandozeilenprogramms :command:`pass` aus und speichern es in der Variablen ``pw``.
.. code-block:: console
Anschließend erzeugen wir das API-Objekt, wobei wir als Credentials den Namen des Paket-Admin und sein Passwort übergeben.
Der Namen des Paket-Admin ist identisch mit dem Paket, in dem wir die Domain anlegen wollen.
   $ python createall.py meine-domain.de
Danach definieren wir einen Zufallsgenerator, mit dem wir die Passworte erzeugen, die wir später benötigen.
In Zeile 27 und 28 werden die Passworte für den Domain-Admin und  den Datenbank-Nutzer erzeugt und in Variablen gespeichert.
Direkt anschließend erzeugen wir aus den beim Aufruf übergebenen Werten die Namen für den Domain-Admin, den Datenbank-Nutzer und die Datenbank.
In den Zeilen 33 bis 36 legen wir den Domain-Admin, die Domain, den Datenbank-Nutzer und die Datenbank an.
Und zum Schluss geben wir alle Daten aus.
Idealerweise würde ein solches Skript die neuen Benutzernamen mit den jeweiligen Passworten in den Passwort-Tresor eintragen, sodass wir dies nicht mit der Hand erledigen müssen.