Ich habe mir seit langer Zeit vorgenommen, die Nitro API des Netscalers unter die Lupe zu nehmen und nun hat es tatsächlich geklappt. Befassen möchte ich mich mit der CSharp Variante der API und im folgenden die grundlegenden Schritte zur Installation und zum initialen Verbindungsaufbau zum Netscaler beschreiben, da dies oft die erste Hürde darstellt.

Der Nitro Webservice ist standardmaäßig auf jeder Netscaler Appliance aktiv und kann über drei Wege angesprochen werden: C Sharp, Java oder REST (REpresentational State Transfer)

Netscaler-Nito

 

Ich werde mich in diesem Beitrag auf die C Sharp Variante konzentrieren.

1. Download des Netscaler SDKs von citrix.com

Der erste Schritt ist der Download des SDKs in der passenden Version. In meinem Fall ist das die Version 10.1.x

Netscaler-SDK-Download

2. Installation und bereitstellen der API

Die Datei ns-10.1-124.13-nitro-csharp.tgz entpacken und nach Wunsch im lokalen Filesystem ablegen. Ich habe mich für die folgende Ordnerstruktur entschieden:

Netscaler-Nitro-Folder

Für das weitere Vorgehen sind vor allem die beiden Files im Ordner /lib von Relevanz, da diese unsere Schnittstelle zum SDK bilden.

3. Der erste Verbindungsaufbau

Einbinden der Runtime in unser erstes Skript.

$path1 = Resolve-Path C:NitrolibNewtonsoft.Json.dll
[System.Reflection.Assembly]::LoadFile($path1)
$path = Resolve-Path C:Nitrolibnitro.dll
[System.Reflection.Assembly]::LoadFile($path)

Globale Verbindungsvariablen erstellen:

$nsip = '192.168.101.200'
$user = 'nsroot'
$pass = 'nsroot'

Session-Objekt anlegen und Login initiieren:

$nitrosession = new-object com.citrix.netscaler.nitro.service.nitro_service($nsip,"http")
$session = $nitrosession.login($user,$pass)

Die Datei kann nun in einem beliebigen Ordner als *.ps1 ablegt werden.

4. Die ersten Aktionen am Netsclaer

Da nun der Logon durchgeführt ist, haben wir Zugriff auf alle Funktionen des Netscalers und können diese über die definierten Klassen bzw. Objekte ansprechen.

Als erstes einfaches Beispiel möchte ich einen Server hinterlegen. Dazu benötigen wir wiederum ein Objekt der com.citrix.netscaler.nitro Klasse. Alle Befehle sind nach diesem Schema aufgebaut. Ein Blick ins Filesystem zeigt, wie man bei der Vielzahl von Befehlen den Überblick behalten kann.

Alle Objekte starten wie beschrieben mit com.citrix.netscaler.nitro., gefolgt vom Konfigurations-Item, welches bearbeitet werden soll.

Zu finden sind diese Items auch in der Filestruktur:

Netscaler-Nitro-Folder-StructureInteressant für unsere Konfigurationen ist, im ersten Schritt v.a. der Ordner „config“ und der Ordner „Basic“. Hier finden wir eine Datei „server.cs“. Öffnen wir diese mit Visual Studio (alternativ auch Notepad++) finden wir eine Section „public class server“. In diesem Bereich ist zu erkennen, mit welchen Parametern ein Objekt vom Typ „Server“ adressiert werden kann.

Netscaler-Nitro-server-cs

Mit diesen Informationen kann also ein erstes neuen Objekt „server1“ erstellt werden.

$server1 = New-Object com.citrix.netscaler.nitro.resource.config.basic.server

 

Dieses Objekt müssen wir nun mit den entsprechenden Attributen befüllen, welche man der Datei server.cs entnehmen können:

$server1.name = "WebServer01";
$server1.ipaddress = "192.168.88.100";

 

Abschließend wird dieses Objekt an die bestehende Session übergeben.

$set_config=[com.citrix.netscaler.nitro.resource.config.basic.server]::add($nitrosession,$server1)

 

Analog dazu kann auch Service erstellt werden

$service1 = New-Object com.citrix.netscaler.nitro.resource.config.basic.service
$service1.name = "SVC_IIS";
$service1.servicetype = "HTTP";
$service1.monitor_name_svc ="http";
$service1.port="80";
$service1.servername="WebServer01";
$set_config=[com.citrix.netscaler.nitro.resource.config.basic.service]::add($nitrosession,$service1)

 

Auch ein Load Balancer kann auf diese Weise erzeugt werden

$lb1 = New-Object com.citrix.netscaler.nitro.resource.config.lb.lbvserver
$lb1.name="vSRV_LB01";
$lb1.servicetype="http"; 
$ret_value=[com.citrix.netscaler.nitro.resource.config.lb.lbvserver]::add($nitrosession,$lb1)
$lb1.name="vSRV_LB01";
$lb1.lbmethod="ROUNDROBIN"; 
$set_config=[com.citrix.netscaler.nitro.resource.config.lb.lbvserver]::update($nitrosession,$lb1)
$lb_service = New-object com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding
$lb_service.name = "vSRV_LB01";
$lb_service.servicename = "SVC_IIS";
$set_config=[com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding]::add($nitrosession,$lb_service)

 

Abschließend die Änderungen noch in die saved config übernehmen

$session = $nitrosession.save_config()

 

Session beenden

$session = $nitrosession.logout()

 

Ich hoffe, dass ich so einen kurzen Einblick in die große Welt der NITRO API geben konnte und den Einstieg etwas erleichert habe.

 

Leave a Comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.