V tomto příkladu si ukážeme založení záznamu serveru v CMDB ObjectGears z Powershell. Možností, jak dostávat data do ObjectGears máme několik. Pro okamžité založení ze skriptu se nabízí online komunikace pomocí webových služeb, které mají různé metody pro práci s daty, nebo spuštění Skriptu uloženého v ObjectGears. Spuštění skriptu nám nabízí nejširší možnosti a využijeme ho zvláště v případech, kdy potřebujeme udělat něco zvláštního, co nám například webové služby samy o sobě neumožňují.
PowerShell script
V první části skriptu přiřazujeme do proměnných hodnoty, které chceme přenést do CMDB. Ve skutečnosti tyto hodnoty budeme ve skriptu zjišťovat dle vaší potřeby. Následně hodnoty vložíme do body webového požadavku, který pak odesíláme s credentialy uživatele, který skript spouští.
[string]$ServerName = "DB09"
[string]$ServerFQDN = "DB09.qa.int"
[string]$ServerStatus = "Created"
[string]$ServerContact = "qa\lee.cooper,qa\jan.smith"
[string]$ServerManualUpdate = "T"
[string]$ServerDescription = "Database server"
[string]$ServerCPU = "2"
[string]$ServerRAM = "8"
[string]$ServerCluster = "DB-Cluster-1"
[string]$ServerRunningOn = ""
[string]$ServerIP = "192.101.101.103"
[string]$OS = "W2019 Std"
[string]$ServerWU = "3 - Production"
[string]$ServerMachineType = "Server"
[string]$ServerDNS = "DB09.qa.int"
[string]$ServerEnvironment = "Production"
$body = @{
"ServerName" = "$ServerName"
"ServerFQDN" = "$ServerFQDN"
"ServerStatus" = "$ServerStatus"
"ServerContact" = "$ServerContact"
"ServerManualUpdate" = "$ServerManualUpdate"
"ServerDescription" = "$ServerDescription"
"ServerCPU" = "$ServerCPU"
"ServerRAM" = "$ServerRAM"
"ServerCluster" = "$ServerCluster"
"ServerRunningOn" = "$ServerRunningOn"
"ServerIP" = "$ServerIP"
"OS" = "$OS"
"ServerWU" = "$ServerWU"
"ServerMachineType" = "$ServerMachineType"
"DNS" = "$ServerDNS"
"ServerEnvironment" = "$ServerEnvironment"
}
Invoke-WebRequest -Uri "http://localhost:85/RunScript.aspx?code=import-new-server"-UseDefaultCredential -Method POST -Body $body
ObjectGears Script for execution
Na straně ObjectGears musíme mít odpovídající Spouštěný skript s nastaveným oprávněním pro spuštění pro uživatele, který webový požadavek posílá (tedy ten, který spouští výše uvedený Powershell skript).
V první části skriptu přiřadíme do proměnných hodnoty z body webového požadavku, následně založíme záznam a následně ho aktualizujeme o hodnoty Kontaktů, které jsou v násobném sloupci odkazujícím na uživatele. Na konci skriptu jsou pomocné funkce.
/* codes */
var clImport = 'machine';
var clStatus = 'machine-status';
var clStatusCol = 'name';
var clVirtual = 'machine';
var clVirtualCol = 'name';
var clRunning = 'device';
var clRunningCol = 'serial-number';
var clOs = 'os';
var clOsCol = 'name';
var clMachine = 'machine-type';
var clMachineCol = 'name';
var clPatch = 'patch-category';
var clPatchCol = 'name';
var clEnvironment = 'environment';
var clEnvironmentCol = 'code';
/* create record */
var cl = OGModel.ClassDefs[clImport];
var dr = OG.DataRow.CreateNew(cl.Id);
OG.Log.WriteVariableInfo('name', OGParameters['$f_ServerName']);
/* fill in with data */
dr['name'] = OGParameters['$f_ServerName'];
dr['fqdn'] = OGParameters['$f_ServerFQDN'];
dr['status'] = GetClassLinkValue('$f_ServerStatus', clStatus, clStatusCol);
dr['server_contacts_x'] = OGParameters['$f_ServerContact'];
dr['manual_update'] = ConvertToBool(OGParameters['$f_ServerManualUpdate']);
dr['description'] = OGParameters['$f_ServerDescription'];
dr['vcpu'] = OGParameters['$f_ServerCPU'] * 1;
dr['vram'] = OGParameters['$f_ServerRAM'] * 1;
dr['virtual-on'] = GetClassLinkValue('$f_ServerCluster', clVirtual, clVirtualCol);
dr['running-on'] = GetClassLinkValue('$f_ServerRunningOn', clRunning, clRunningCol);
dr['ip'] = OGParameters['$f_ServerIP'];
dr['os'] = GetClassLinkValue('$f_OS', clOs, clOsCol);
dr['machine-type'] = GetClassLinkValue('$f_ServerMachineType', clMachine, clMachineCol);
dr['patch-category'] = GetClassLinkValue('$f_ServerWU', clPatch, clPatchCol);
dr['dns-name'] = OGParameters['$f_DNS'];
dr['environment'] = GetClassLinkValue('$f_ServerEnvironment', clEnvironment, clEnvironmentCol);
OG.DataRow.SaveData(dr);
/* add contacts */
var contact = dr['server_contacts_x'];
OG.Log.WriteVariableInfo('contact', contact);
if (!OG.IsNull(contact))
{
var colContacts = cl.Columns['machine_contacts'];
//delete current references to person
var sql = OG.TextUtils.Format('delete from DataRow{0}LinkPerson where ColumnClassDefId = {1} and ReferentionId = {2}',
colContacts.ParentId, colContacts.Id, dr.Id);
OG.Sql.RunSql(sql);
//parse contacts
var contacts = contact.split(',');
for( var i = 0; i < contacts.length; i++)
{
OG.Log.WriteVariableInfo('contact[' + i + ']', contacts[i]);
//insert new contacts
var sql = OG.TextUtils.Format('insert into DataRow{0}LinkPerson(ColumnClassDefId, ReferentionId, LinkReferentionId) select {1}, {2}, Id from Person where Code = @personCode and Deleted is null',
colContacts.ParentId, colContacts.Id, dr.Id);
OG.Log.WriteVariableInfo('sql', sql);
var pars = OG.Sql.CreateParameterList();
pars.AddNvarchar('personCode', contacts[i]);
OG.Sql.RunSql(null, sql, pars);
}
}
function GetClassLinkValue(parameterName, clName, colName)
{
var value = OGParameters[parameterName];
if (!OG.IsNull(value))
{
var dr1 = OG.DataRow.GetDataRowByCode(null, OGModel.ClassDefs[clName], value, colName);
if ( dr1 != null)
{
return dr1.Id;
}
}
return null;
}
function ConvertToBool(value)
{
if (value == 'T') return true;
else if (value == 'F') return false;
return null;
}
Založený záznam pak vypadá takto.