ISPconfig API: Objekte "pro Client" filtern

Frank77

New Member
Hallo,
ich versuche ISPconfig in unsere existierende Umgebung einzubinden und das Erstellen von Clients, Sites, Domains etc. zu automatisieren.
Hierzu benötige ich u.a. für jedes Objekt (Domain, Maildomain, Web, Datenbank, etc) eine API-Funktion "get_xxx_by_client()", z.B. "get_domains_by_client".
Diese Funktionen existieren (offenbar) aber noch nicht alle, also versuche ich mir meine eigenen Funktionen als Wrapper zu schreiben, indem ich einfach alle Domains (als Beispiel) abrufe - das geht, wenn auch ineffizient, indem man dem entsprechenden API-Aufruf "get_xxx()" eine -1 als Parameter übergibt) und danach nach Client filtere.

Das scheitert aber derzeit daran, dass Domains, Websites usw. gar keine "client_id" als Parameter zurückgeben, es gibt nur eine "sys_userid" und "sys_groupid".
Ich habe bemerkt, dass bei Domains `domain.sys_groupid` == `client.client_id`-1 gilt. Bei Sites gilt das aber schon nicht mehr.

Frage:
Ist das Absicht, Zufall oder soll tatsächlich so die gewollte Verknüpfung zwischen Domain und Client erzeugt werden?
Wenn nicht, wie kann ich sonst alle Sites pro Client, alle DB User pro Site, alle Mailaccounts pro Maildomain, usw. per API abrufen?

Danke :)
 

Till

Administrator
Ich habe bemerkt, dass bei Domains `domain.sys_groupid` == `client.client_id`-1 gilt.
Das ist Zufall dass es für einige von Dir geprüften clients so ist. Wenn Du die sys_groupid für einen Client wissen möchtest, dann gibt es dafür eine API Funktion:

PHP:
$sys_groupid = $remote->client_get_groupid($session_id, $client_id)

und anders herum:

PHP:
$client_id = $remote->client_get_by_groupid($session_id, $sys_groupid)

Wenn nicht, wie kann ich sonst alle Sites pro Client, alle DB User pro Site, alle Mailaccounts pro Maildomain, usw. per API abrufen?

Naja, entweder Du hast die passende sys_groupid schon von einem vorherigen API request und falls nicht, bekommst Du sie per client_get_groupid Funktion. Beispiel für alle sites per client:

PHP:
$sys_groupid = $remote->client_get_groupid($session_id, $client_id);
$sites_per_client = $remote->sites_web_domain_get($session_id, array('sys_groupid' => $sys_groupid));

PHP:
$website = $remote->sites_web_domain_get($session_id, array('domain' => 'example.com'));
$databases = $remote->sites_database_get($session_id, array('parent_domain_id' => $website['domain_id'}));
foreach ($databases as $db) {
 $db_user = $remote->sites_database_user_get($session_id, array('database_user_id' =>$db['database_user_id']));
}


PHP:
$mailboxes = $remote->mail_user_get($session,array('email' => '%@example.com'));
 

Frank77

New Member
Hall Till,

danke für deine Antwort und die Beispiele, wie API-Rückgabelisten gefiltert werden können. Das war mir nicht bekannt (und ist auch glaube ich nirgendwo dokumentiert)!

Gibt es einen Grund, weswegen die "group_id" jedes Clients nicht bereits bei `client_get` und `client_get_by_login` mit zurückgegeben wird? So würde man sich einen Aufruf der API sparen und hätte gleich den foreign key für die Verknüpfung.
 

Till

Administrator
danke für deine Antwort und die Beispiele, wie API-Rückgabelisten gefiltert werden können. Das war mir nicht bekannt (und ist auch glaube ich nirgendwo dokumentiert)!
Ist glaube ich in ein paar Threads im englisvhen dev Forum erläutert, aber sonst gibt es da wenig Doku.

Gibt es einen Grund, weswegen die "group_id" jedes Clients nicht bereits bei `client_get` und `client_get_by_login` mit zurückgegeben wird? So würde man sich einen Aufruf der API sparen und hätte gleich den foreign key für die Verknüpfung.
Das hat sich so ergeben da das API an sich ursprünglich überall mit client_id's arbeiten sollte, lässt sich jetzt aber auch nicht ändern ohne das API inkompatibel zu machen. Es gibt ja Funkzionen um die jeweils andere ID abzufragen.
 

Frank77

New Member
Hallo Till,
danke für deine Erklärungen. Zwei letzte Fragen:

1. `client_update` benötigt eine `reseller_id` als Parameter, ich verwende aber gar keine Reseller. Welche ID gebe ich dort an (0 scheint ja reserviert zu sein für die Fälle, wenn der Client selber ein Reseller sein soll)?

2. Ich rufe `client_update(session_id, client_id, reseller_id, data)` auf, und bekomme auch einen Rückgabewert von "1" zurück, aber ein darauf folgendes `client_get()` auf denselben User zeigt, dass nur einige Parameter (z.B. "language") geändert wurden, aber andere (z.B. "limit_web_quota") nicht änderbar sind. Sind einige dieser Parameter readonly oder mache ich etwas falsch?

Danke!
 
Zuletzt bearbeitet:

Frank77

New Member
Frage 2 habe ich inzwischen selber beantwortet: Ich verwende für den betroffenen Client eine Master Template, dann werden wohl alle in dieser Template festgelegten Werte bei `client_update` ignoriert.
 

Werbung

Top