Utilizzando i workflow di vRealize Orchestrator, è possibile integrare Cloud Assembly con ServiceNow per la conformità ITSM.
In genere gli utenti aziendali integrano la propria piattaforma di gestione del cloud con una piattaforma di gestione dei servizi IT (ITSM, IT Service Management) e un database di gestione della configurazione (CMDB, Configuration Management Database) a scopo di conformità. Seguendo questo esempio è possibile integrare
Cloud Assembly con ServiceNow per CMDB e ITSM utilizzando i workflow di
vRealize Orchestrator. Quando si utilizzano le integrazioni e i workflow di
vRealize Orchestrator, i tag di funzionalità sono particolarmente utili se si dispone di più istanze per ambienti diversi. Per ulteriori informazioni sui tag di funzionalità, vedere
Utilizzo di tag di funzionalità in Cloud Assembly.
In questo esempio, l'integrazione di ServiceNow è composta da tre workflow di livello principale. Ogni workflow dispone delle proprie sottoscrizioni in modo che sia possibile aggiornare e iterare ciascun componente singolarmente.
- Punto di ingresso della sottoscrizione dell'evento - Registrazione di base, identifica l'utente richiedente e la macchina virtuale di vCenter, se applicabile.
- Workflow di integrazione - Separa gli oggetti e inserisce gli input nel workflow tecnico, gestisce gli aggiornamenti della registrazione, delle proprietà e dell'output.
- Workflow tecnico - Integrazione di sistema a valle per l'API di ServiceNow per creare l'API di CI CMDB, CR e Cloud Assembly IaaS con altre proprietà della macchina virtuale esterne al payload.
Procedura
- Creare e salvare un file di configurazione in vRealize Orchestrator che contenga una configurazione comune utilizzata in più workflow.
- Salvare il token dell'API Cloud Assembly nella stessa posizione del file di configurazione del passaggio 1.
Nota: Il token dell'API
Cloud Assembly ha una scadenza.
- Creare un workflow in vRealize Orchestrator con l'elemento script specificato. Questo script fa riferimento a un host REST e lo individua. Inoltre, standardizza le azioni REST che utilizzano un parametro facoltativo di un token, aggiunto come ulteriore intestazione di autorizzazione.
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"];
Questo script invia l'output cpuCount e memoryMB al workflow principale e aggiorna le proprietà customProperties esistenti. Questi valori possono essere utilizzati nei workflow successivi durante la creazione di CMDB.
- Aggiungere l'elemento script Crea CI di CMDB ServiceNow al workflow. Questo elemento individua l'host REST ServiceNow utilizzando l'elemento di configurazione, crea un'operazione REST per la tabella cmdb_ci_vmware_instance, crea una stringa di oggetto contenuto in base agli input del workflow per i dati di pubblicazione e restituisce il valore sys_id.
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'];
- Mediante l'output del workflow secondario, creare un oggetto proprietà utilizzando il valore customProperties esistente e sovrascrivere la proprietà serviceNowSysId con il valore di ServiceNow. Questo ID univoco viene utilizzato in CMDB per contrassegnare un'istanza come ritirata dopo l'eliminazione.