[Gelöst] neue Clients - Standard-Pakete
[Gelöst] neue Clients - Standard-Pakete
Hallo!
Ich suche derzeit eine Möglichkeit neuen Clients nach der Installation des opsi-client-agents automatisiert bestimmte Standard-Pakete zu installieren.
Ich habe dazu ein "dummy"-Paket samt Abhängigkeiten generiert und suche nun die Möglichkeit neuen Clients dieses Paket zu zu weisen.
Da die "pcproto.ini"-Methode ja als veraltet gilt, wollt ich hiermit erfragen ob eine andere Methode zur Realisierung dieses Anliegens bekannt ist.
Vielen Dank im Vorraus!
Ich suche derzeit eine Möglichkeit neuen Clients nach der Installation des opsi-client-agents automatisiert bestimmte Standard-Pakete zu installieren.
Ich habe dazu ein "dummy"-Paket samt Abhängigkeiten generiert und suche nun die Möglichkeit neuen Clients dieses Paket zu zu weisen.
Da die "pcproto.ini"-Methode ja als veraltet gilt, wollt ich hiermit erfragen ob eine andere Methode zur Realisierung dieses Anliegens bekannt ist.
Vielen Dank im Vorraus!
Zuletzt geändert von CreaB am 09 Feb 2014, 02:50, insgesamt 1-mal geändert.
- n.wenselowski
- Ex-uib-Team
- Beiträge: 3194
- Registriert: 04 Apr 2013, 12:15
Re: neue Clients - Standard-Pakete
Hallo CreaB,
mein Weg das anzugehen wäre das Überschreiben der Methode zum Client anlegen (bspw. createClient oder host_createObjects) im extend.d-Verzeichnis.
Ich bin gespannt, welche Lösung andere noch für dieses Problem haben!
Gruß
Niko
mein Weg das anzugehen wäre das Überschreiben der Methode zum Client anlegen (bspw. createClient oder host_createObjects) im extend.d-Verzeichnis.
Ich bin gespannt, welche Lösung andere noch für dieses Problem haben!
Gruß
Niko
Code: Alles auswählen
import OPSI
Re: neue Clients - Standard-Pakete
Wir legen unsere clients direkt aus unserer Hardware Datenbank an.
Dabei werden die entsprechenden Methoden per Webservice aufgerufen.
So wird dann Client angelegt, Windows Installation auf Setup gesetzt und die entsprechenden Localboot Produkte
Zusätzlich wird das Feld Beschreibung mit der Benutzerzuordnung aus der CMDB gefüllt.
Dabei werden die entsprechenden Methoden per Webservice aufgerufen.
So wird dann Client angelegt, Windows Installation auf Setup gesetzt und die entsprechenden Localboot Produkte

Zusätzlich wird das Feld Beschreibung mit der Benutzerzuordnung aus der CMDB gefüllt.
Re: neue Clients - Standard-Pakete
Wie genau sieht denn dieser Aufruf aus? Ich überlege gerade ob es möglich/sinnvoll ist via batch/Powershell einfach einen web-aufruf zu starten welcher ein dummy-/meta-paket zuweist und folglich dafür sorgt das alle gewünschten Pakete installiert werden.tobias hat geschrieben:Wir legen unsere clients direkt aus unserer Hardware Datenbank an.
Dabei werden die entsprechenden Methoden per Webservice aufgerufen.
So wird dann Client angelegt, Windows Installation auf Setup gesetzt und die entsprechenden Localboot Produkte
Zusätzlich wird das Feld Beschreibung mit der Benutzerzuordnung aus der CMDB gefüllt.
Re: neue Clients - Standard-Pakete
Hab dir mal nen Teil aus unserem Quellcode (PHP) kopiert. Du benötigst dazu http://jsonrpcphp.org/
Ob es ein JSON RPC Modul für Powershell gibt weis ich nicht.
Ob es ein JSON RPC Modul für Powershell gibt weis ich nicht.
Code: Alles auswählen
//OPSI
error_reporting(0);
$dom = $_SESSION[autofill_institut];
$name = $_SESSION[autofill_name];
$nameklein = strtolower($name);
$domklein = strtolower($dom);
if ($_POST[opsiclient] == ""){}
//OPSI new
if ($_POST[opsiclient] == "new"){
$dom = "BS";
$domklein = "bs";
$check = @fopen('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', "r");
$rpc = @new jsonRPCClient('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', false, true);
if($rpc) {
try {
$check = $rpc->authenticated();
if(!$check) {
$loginerror=true;
}
else{
$info = $rpc->getOpsiInformation_hash();
$newclient = $rpc->createClient("$_SESSION[autofill_name]", "$dom.domaene.de", "$_SESSION[autofill_benutzer]", "Erzeugt vom IT-Helpdesk.", "", "$_SESSION[autofill_mac]");
//OPSI Win7?!
if($_SESSION[autofill_os] == "W7" || $_SESSION[autofill_os] == "W7 EN"){
$SetOS = $rpc->setProductActionRequest("win7", "$nameklein.$domklein.domaene.de", 'setup');
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "flag_active", "on", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_expires", "never", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_groupmember", "Administratoren", "$_SESSION[autofill_name]" . "." . "$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_username", "localAdmin", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_userpasswd", "$_SESSION[autofill_passwort]", "$nameklein"."."."$domklein".".domaene.de");
$setlocalAdmin = $rpc->setProductActionRequest("localusermanagementsystem", "$nameklein"."."."$domklein".".domaene.de",'setup');
}
if($_SESSION[autofill_os] == "W7 64bit"){
$SetOS = $rpc->setProductActionRequest("win7-x64", "$nameklein.$domklein.domaene.de", 'setup');
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "flag_active", "on", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_expires", "never", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_groupmember", "Administratoren", "$_SESSION[autofill_name]" . "." . "$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_username", "localAdmin", "$nameklein"."."."$domklein".".domaene.de");
$setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_userpasswd", "$_SESSION[autofill_passwort]", "$nameklein"."."."$domklein".".domaene.de");
$setlocalAdmin = $rpc->setProductActionRequest("localusermanagementsystem", "$nameklein"."."."$domklein".".domaene.de",'setup');
}
if($_SESSION[autofill_office] == "2010"){
$SetSoftware = $rpc->setProductActionRequest("office_2010", "$_SESSION[autofill_name]"."."."$domklein".".domaene.de",'setup');
}
//OPSI defaultProducts
if($_SESSION[autofill_defaultprod] == "1"){
$SetDefaultProducts = $rpc->setProductActionRequestWithDependencies("defaultproducts", "$_SESSION[autofill_name]"."."."$domklein".".domaene.de", "setup");
if($_SESSION[autofill_typ]== "NB"){
$setAnyConnect = $rpc->setProductActionRequest("anyconnect", "$nameklein"."."."$domklein".".domaene.de", 'setup');
}
}
}
}
catch (Exception $e) {
$loginerror = true;
}
}
}
//OPSI del
if ($_POST[opsiclient] == "del"){
$check = @fopen('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', "r");
$rpc = @new jsonRPCClient('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', false, true);
if($rpc) {
try {
$check = $rpc->authenticated();
if(!$check) {
$loginerror=true;
}
else{
$info = $rpc->getOpsiInformation_hash();
$newclient = $rpc->deleteClient("$_SESSION[autofill_name].$domklein.domaene.de");
}
}
catch (Exception $e) {
$loginerror = true;
}
}
}
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//OPSI end
Re: neue Clients - Standard-Pakete
tobias hat geschrieben:Hab dir mal nen Teil aus unserem Quellcode (PHP) kopiert. Du benötigst dazu http://jsonrpcphp.org/
Ob es ein JSON RPC Modul für Powershell gibt weis ich nicht.Code: Alles auswählen
//OPSI error_reporting(0); $dom = $_SESSION[autofill_institut]; $name = $_SESSION[autofill_name]; $nameklein = strtolower($name); $domklein = strtolower($dom); if ($_POST[opsiclient] == ""){} //OPSI new if ($_POST[opsiclient] == "new"){ $dom = "BS"; $domklein = "bs"; $check = @fopen('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', "r"); $rpc = @new jsonRPCClient('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', false, true); if($rpc) { try { $check = $rpc->authenticated(); if(!$check) { $loginerror=true; } else{ $info = $rpc->getOpsiInformation_hash(); $newclient = $rpc->createClient("$_SESSION[autofill_name]", "$dom.domaene.de", "$_SESSION[autofill_benutzer]", "Erzeugt vom IT-Helpdesk.", "", "$_SESSION[autofill_mac]"); //OPSI Win7?! if($_SESSION[autofill_os] == "W7" || $_SESSION[autofill_os] == "W7 EN"){ $SetOS = $rpc->setProductActionRequest("win7", "$nameklein.$domklein.domaene.de", 'setup'); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "flag_active", "on", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_expires", "never", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_groupmember", "Administratoren", "$_SESSION[autofill_name]" . "." . "$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_username", "localAdmin", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_userpasswd", "$_SESSION[autofill_passwort]", "$nameklein"."."."$domklein".".domaene.de"); $setlocalAdmin = $rpc->setProductActionRequest("localusermanagementsystem", "$nameklein"."."."$domklein".".domaene.de",'setup'); } if($_SESSION[autofill_os] == "W7 64bit"){ $SetOS = $rpc->setProductActionRequest("win7-x64", "$nameklein.$domklein.domaene.de", 'setup'); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "flag_active", "on", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_expires", "never", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_groupmember", "Administratoren", "$_SESSION[autofill_name]" . "." . "$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_username", "localAdmin", "$nameklein"."."."$domklein".".domaene.de"); $setHostParameter = $rpc->setProductProperty("localusermanagementsystem", "val_userpasswd", "$_SESSION[autofill_passwort]", "$nameklein"."."."$domklein".".domaene.de"); $setlocalAdmin = $rpc->setProductActionRequest("localusermanagementsystem", "$nameklein"."."."$domklein".".domaene.de",'setup'); } if($_SESSION[autofill_office] == "2010"){ $SetSoftware = $rpc->setProductActionRequest("office_2010", "$_SESSION[autofill_name]"."."."$domklein".".domaene.de",'setup'); } //OPSI defaultProducts if($_SESSION[autofill_defaultprod] == "1"){ $SetDefaultProducts = $rpc->setProductActionRequestWithDependencies("defaultproducts", "$_SESSION[autofill_name]"."."."$domklein".".domaene.de", "setup"); if($_SESSION[autofill_typ]== "NB"){ $setAnyConnect = $rpc->setProductActionRequest("anyconnect", "$nameklein"."."."$domklein".".domaene.de", 'setup'); } } } } catch (Exception $e) { $loginerror = true; } } } //OPSI del if ($_POST[opsiclient] == "del"){ $check = @fopen('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', "r"); $rpc = @new jsonRPCClient('https://administrator:<PASSWORD>@opsiserver.domaene.de:4447/rpc', false, true); if($rpc) { try { $check = $rpc->authenticated(); if(!$check) { $loginerror=true; } else{ $info = $rpc->getOpsiInformation_hash(); $newclient = $rpc->deleteClient("$_SESSION[autofill_name].$domklein.domaene.de"); } } catch (Exception $e) { $loginerror = true; } } } error_reporting(E_ERROR | E_WARNING | E_PARSE); //OPSI end
Ok, vielen Dank!
ich glaube das ist nicht so recht was ich suche, ich bräuchte eher die Möglichkeit das via batch/powershell mit einem kleinen script, oder aber via config auf dem Server selbst default-pakete fest zu legen und samt Abhängigkeiten zu installieren.
Re: neue Clients - Standard-Pakete
du könntest dir das auch auf dem server zurecht stricken.
auch in VBS oder sonstigen sprachen kannst du das einbauen - musst du natürlich schauen das JSON-RPC von dieser sprache unterstützt wird.
Oder eben die entsprechende Methode Serverseitig anpassen - so das automatisch die Software auf Setup gesetzt wird wenn ein Client angelegt wird.
auch in VBS oder sonstigen sprachen kannst du das einbauen - musst du natürlich schauen das JSON-RPC von dieser sprache unterstützt wird.
Oder eben die entsprechende Methode Serverseitig anpassen - so das automatisch die Software auf Setup gesetzt wird wenn ein Client angelegt wird.
- n.wenselowski
- Ex-uib-Team
- Beiträge: 3194
- Registriert: 04 Apr 2013, 12:15
Re: neue Clients - Standard-Pakete
Hallo zusammen,
PowerShell kann direkt mit JSON-RPC arbeiten.
Wie das geht steht bspw. hier: https://powertoe.wordpress.com/2011/01/ ... owershell/
Wer keine Custom-Methoden für den Webservice selbst schreiben will, der kann das auch im Rahmen eines bestehenden Support-Vertrags umsetzen lassen
Ein schönes Wochenende wünscht
Niko
PowerShell kann direkt mit JSON-RPC arbeiten.
Wie das geht steht bspw. hier: https://powertoe.wordpress.com/2011/01/ ... owershell/
Wer keine Custom-Methoden für den Webservice selbst schreiben will, der kann das auch im Rahmen eines bestehenden Support-Vertrags umsetzen lassen

Ein schönes Wochenende wünscht
Niko
Code: Alles auswählen
import OPSI
Re: neue Clients - Standard-Pakete
Ich hab mittlerweile mal etwas zusammen-gescripted, allerdings bekomme ich, mir unerklärliche, Fehler zurück:
gibt: @{message=Bad fqdn: 'notes'; class=ValueError}
gibt: @{message=u'[server].domain.tld'; class=KeyError}
Vielleicht kennt jemand das Problem?
[EDIT]
so funktioniert es:
Code: Alles auswählen
$urlJSON = 'https://xxx.xxx.xxx.xxx:4447/rpc'
Function CallJSON($url,$object) {
$authUser = "[username]"
$authPass = "[password]"
$cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass
$bytes = [System.Text.Encoding]::ASCII.GetBytes($object)
$web = [System.Net.WebRequest]::Create($url)
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$web.Credentials = $cred
$web.Method = "POST"
$web.ContentLength = $bytes.Length
$web.ContentType = "application/json"
$stream = $web.GetRequestStream()
$stream.Write($bytes,0,$bytes.Length)
$stream.close()
$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()
return $reader.ReadToEnd()| ConvertFrom-Json
$reader.Close()
}
#Create the JSON object to call the user.get function and parameter extend
$data = (New-Object PSObject |
Add-Member -PassThru NoteProperty method "setHostNotes" |
Add-Member -PassThru NoteProperty params @{hostId="[server].domain.tld";notes="testnote"} |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
$request = CallJSON $urlJSON $data
$request
Code: Alles auswählen
$urlJSON = 'https://xxx.xxx.xxx.xxx:4447/rpc'
Function CallJSON($url,$object) {
$authUser = "[username]"
$authPass = "[password]"
$cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass
$bytes = [System.Text.Encoding]::ASCII.GetBytes($object)
$web = [System.Net.WebRequest]::Create($url)
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$web.Credentials = $cred
$web.Method = "POST"
$web.ContentLength = $bytes.Length
$web.ContentType = "application/json"
$stream = $web.GetRequestStream()
$stream.Write($bytes,0,$bytes.Length)
$stream.close()
$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()
return $reader.ReadToEnd()| ConvertFrom-Json
$reader.Close()
}
#Create the JSON object to call the user.get function and parameter extend
$data = (New-Object PSObject |
Add-Member -PassThru NoteProperty method "setProductActionRequestWithDependencies" |
Add-Member -PassThru NoteProperty params @{productId="[paket_id]";clientId="[server].domain.tld";actionRequest="setup"} |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
$request = CallJSON $urlJSON $data
$request
Vielleicht kennt jemand das Problem?
[EDIT]
so funktioniert es:
Code: Alles auswählen
$urlJSON = 'https://xxx.xxx.xxx.xxx:4447/rpc'
Function CallJSON($url,$object) {
$authUser = "[username]"
$authPass = "[password]"
$cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass
$bytes = [System.Text.Encoding]::ASCII.GetBytes($object)
$web = [System.Net.WebRequest]::Create($url)
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$web.Credentials = $cred
$web.Method = "POST"
$web.ContentLength = $bytes.Length
$web.ContentType = "application/json"
$stream = $web.GetRequestStream()
$stream.Write($bytes,0,$bytes.Length)
$stream.close()
$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()
return $reader.ReadToEnd()| ConvertFrom-Json
$reader.Close()
}
#Create the JSON object to call the user.get function and parameter extend
$data = (New-Object PSObject |
Add-Member -PassThru NoteProperty method "setProductActionRequestWithDependencies" |
Add-Member -PassThru NoteProperty params @("[paket_id]";"[server].domain.tld";"setup") |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
$request = CallJSON $urlJSON $data
$request
Re: [Gelöst] neue Clients - Standard-Pakete
Nice magst du das im WIKI posten?
Hier im Forum geht sowas wertvolles leider immer schnell verloren
Hier im Forum geht sowas wertvolles leider immer schnell verloren
