Seite 1 von 2
[Gelöst] neue Clients - Standard-Pakete
Verfasst: 06 Feb 2014, 14:40
von CreaB
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!
Re: neue Clients - Standard-Pakete
Verfasst: 07 Feb 2014, 10:31
von n.wenselowski
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
Re: neue Clients - Standard-Pakete
Verfasst: 07 Feb 2014, 11:02
von tobias
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
Verfasst: 07 Feb 2014, 12:56
von CreaB
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.
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.
Re: neue Clients - Standard-Pakete
Verfasst: 07 Feb 2014, 13:07
von tobias
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
Re: neue Clients - Standard-Pakete
Verfasst: 07 Feb 2014, 13:59
von CreaB
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
Verfasst: 07 Feb 2014, 14:13
von tobias
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.
Re: neue Clients - Standard-Pakete
Verfasst: 07 Feb 2014, 16:00
von n.wenselowski
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
Re: neue Clients - Standard-Pakete
Verfasst: 08 Feb 2014, 23:15
von CreaB
Ich hab mittlerweile mal etwas zusammen-gescripted, allerdings bekomme ich, mir unerklärliche, Fehler zurück:
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
gibt:
@{message=Bad fqdn: 'notes'; class=ValueError}
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
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 "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
Verfasst: 09 Feb 2014, 13:13
von tobias
Nice magst du das im WIKI posten?
Hier im Forum geht sowas wertvolles leider immer schnell verloren
