Door vRealize Orchestrator gehoste werkstromen stellen u in staat om Cloud Assembly met ServiceNow te integreren voor ITSM-compliance.
Zakelijke gebruikers integreren voor compliance doorgaans hun cloudbeheerplatform met een IT Service Management- (ITSM) en Configuration Management Database-platform (CMDB). Overeenkomstig dit voorbeeld kunt u
Cloud Assembly met ServiceNow voor CMDB en ITSM integreren met door
vRealize Orchestrator gehoste werkstromen. Wanneer u met
vRealize Orchestrator-integraties en -werkstromen werkt, zijn capaciteitstags vooral handig als u meerdere instanties voor verschillende omgevingen hebt. Zie
Capaciteitstags in Cloud Assembly gebruiken voor meer informatie over capaciteitstags.
In dit voorbeeld is de ServiceNow-integratie samengesteld uit drie werkstromen op het hoogste niveau. Elke werkstroom heeft eigen abonnementen, zodat u elk onderdeel afzonderlijk kunt bijwerken en herhalen.
- Toegangspunt van gebeurtenisabonnement - Basislogboekregistratie identificeert de aanvrager en vCenter VM, indien van toepassing.
- Integratiewerkstroom - Scheidt objecten en levert invoer voor de technische werkstroom, zorgt voor updates van de logboekregistratie, eigenschappen en uitvoer.
- Technische werkstroom - Voer systeemintegratie voor ServiceNow API verderop in het proces uit om de CMDB CI, CR en Cloud Assembly IaaS API te maken met aanvullende eigenschappen voor de virtuele machine buiten de lading.
Procedure
- Maak een configuratiebestand dat een algemene configuratie bevat die in meerdere werkstromen wordt gebruikt, en sla het in vRealize Orchestrator op.
- Sla uw Cloud Assembly API-token op dezelfde locatie op als het configuratiebestand uit stap 1.
Opmerking: Het
Cloud Assembly API-token heeft een vervaldatum.
- Maak een werkstroom in vRealize Orchestrator met het opgegeven scriptelement. Dit script verwijst naar een REST-host en zoekt ernaar. Ook worden er REST-acties gestandaardiseerd die gebruikmaken van een optionele parameter van een token, dat als extra autorisatiekoptekst is toegevoegd.
var configPath = "CS"
var configName = "environmentConfig"
var attributeName = "CASRestHost"
//get REST Host from configuration element
var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
var ConfigurationElement = System.getModule("au.com.cs.example").getConfigurationElementByName(configName,configPath);
System.debug("ConfigurationElement:" + ConfigurationElement);
var casToken = ConfigurationElement.getAttributeWithKey("CASToken")["value"]
if(!casToken){
throw "no CAS Token";
}
//REST Template
var opName = "casLogin";
var opTemplate = "/iaas/login";
var opMethod = "POST";
// create the REST operation:
var opLogin = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
//cas API Token
var contentObject = {"refreshToken":casToken}
postContent = JSON.stringify(contentObject);
var loginResponse = System.getModule("au.com.cs.example").executeOp(opLogin,null,postContent,null) ;
try{
var tokenResponse = JSON.parse(loginResponse)['token']
System.debug("token: " + tokenResponse);
} catch (ex) {
throw ex + " No valid token";
}
//REST Template Machine Details
var opName = "machineDetails";
var opTemplate = "/iaas/machines/" + resourceId;
var opMethod = "GET";
var bearer = "Bearer " + tokenResponse;
var opMachine = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
// (Rest Operation, Params, Content, Auth Token)
var vmResponse = System.getModule("au.com.cs.example").executeOp(opMachine,null,"",bearer) ;
try{
var vm = JSON.parse(vmResponse);
} catch (ex) {
throw ex + " failed to parse vm details"
}
System.log("cpuCount: " + vm["customProperties"]["cpuCount"]);
System.log("memoryInMB: " + vm["customProperties"]["memoryInMB"]);
cpuCount = vm["customProperties"]["cpuCount"];
memoryMB = vm["customProperties"]["memoryInMB"];
Dit script verzendt de uitvoer cpuCount en memoryMB naar de bovenliggende werkstroom en werkt de bestaande customProperties-eigenschappen bij. Deze waarden kunnen worden gebruikt in volgende werkstromen wanneer de CMDB wordt gemaakt.
- Voeg het ServiceNow CMDB-scriptelement 'CI maken' toe aan uw werkstroom. Dit element zoekt de ServiceNow REST-host met behulp van het configuratie-item, maakt een REST-bewerking voor de tabel cmdb_ci_vmware_instance, maakt een tekenreeks met een inhoudsobject gebaseerd op de werkstroominvoer voor post-gegevens en voert de uitvoer van de geretourneerde sys_id uit.
var configPath = "CS"
var configName = "environmentConfig"
var attributeName = "serviceNowRestHost"
var tableName = "cmdb_ci_vmware_instance"
//get REST Host from configuration element
var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
//REST Template
var opName = "serviceNowCreatCI";
var opTemplate = "/api/now/table/" + tableName;
var opMethod = "POST";
// create the REST operation:
var opCI = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
//cmdb_ci_vm_vmware table content to post;
var contentObject = {};
contentObject["name"] = hostname;
contentObject["cpus"] = cpuTotalCount;
contentObject["memory"] = MemoryInMB;
contentObject["correlation_id"]= deploymentId
contentObject["disks_size"]= diskProvisionGB
contentObject["location"] = "Sydney";
contentObject["vcenter_uuid"] = vcUuid;
contentObject["state"] = "On";
contentObject["owned_by"] = owner;
postContent = JSON.stringify(contentObject);
System.log("JSON: " + postContent);
// (Rest Operation, Params, Content, Auth Token)
var ciResponse = System.getModule("au.com.cs.example").executeOp(opCI,null,postContent,null) ;
try{
var cmdbCI = JSON.parse(ciResponse);
} catch (ex) {
throw ex + " failed to parse ServiceNow CMDB response";
}
serviceNowSysId = cmdbCI['result']['sys_id'];
- Maak met behulp van de uitvoer van de onderliggende werkstroom een eigenschappenobject met behulp van de bestaande customProperties en vervang de eigenschap serviceNowSysId door de waarde van ServiceNow. Deze unieke id wordt in de CMDB gebruikt om een instantie als buiten gebruik gesteld te markeren bij vernietiging.