À l'aide de workflows vRealize Orchestrator hébergés, vous pouvez intégrer Cloud Assembly à ServiceNow à des fins de conformité du système ITSM.
Les utilisateurs en entreprise intègrent généralement leur plate-forme Gestion du cloud à une plate-forme de gestion des services informatiques (ITSM) et de base de données de gestion des configurations (CMDB) à des fins de conformité. Dans cet exemple, vous pouvez intégrer
Cloud Assembly à ServiceNow pour CMDB et ITSM à l'aide de workflows
vRealize Orchestratorhébergés. Lors de l'utilisation d'intégrations et de workflows
vRealize Orchestrator, les balises de capacité sont particulièrement utiles si vous disposez de plusieurs instances pour différents environnements. Pour plus d'informations sur les balises de capacité, reportez-vous à la section
Utilisation de balises de capacité dans Cloud Assembly.
Dans cet exemple, l'intégration de ServiceNow est composée de trois workflows de niveau supérieur. Chaque workflow dispose de ses propres abonnements afin que vous puissiez mettre à jour et itérer chaque composant individuellement.
- Point d'entrée de l'abonnement aux événements - Journalisation de base, identifie l'utilisateur demandeur et la machine virtuelle vCenter, le cas échéant.
- Workflow d'intégration - Répartit les entrées d'objets et de flux dans des workflows techniques, et gère la journalisation, les propriétés et les mises à jour de sortie.
- Workflow technique - Intégration du système en aval pour l'API ServiceNow afin de créer l'API IaaS de la CMDB, de la CI, des CR et de Cloud Assembly avec des propriétés de machine virtuelle supplémentaires, exclues de la charge utile.
Procédure
- Créez et enregistrez un fichier de configuration dans vRealize Orchestrator, qui contient une configuration commune utilisée dans plusieurs workflows.
- Enregistrez le jeton de l'API de Cloud Assembly dans le même emplacement que le fichier de configuration de l'étape 1.
Note : Le jeton de l'API de
Cloud Assembly a une date d'expiration.
- Créez un workflow dans vRealize Orchestrator, avec l'élément de script fourni. Ce script fait référence à un hôte REST et le localise. Il normalise également les actions REST qui utilisent un paramètre facultatif d'un jeton, ajouté sous la forme d'un en-tête d'autorisation supplémentaire.
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"];
Ce script envoie la sortie cpuCount et memoryMB au workflow parent et met à jour les propriétés customProperties existantes. Ces valeurs peuvent être utilisées dans les workflows suivants lors de la création de la CMDB.
- Ajoutez l'élément de script Créer une CI de CMDB ServiceNow à votre workflow. Cet élément localise l'hôte REST ServiceNow à l'aide de l'élément de configuration, crée une opération REST pour la table cmdb_ci_vmware_instance, crée une chaîne d'objet de contenu basée sur les entrées de workflow pour les données de publication et génère le paramètre sys_id renvoyé.
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'];
- En utilisant le résultat du workflow enfant, créez un objet de propriétés à l'aide de l'élément customProperties existant et remplacez la propriété serviceNowSysId par la valeur obtenue de ServiceNow. Cet ID unique est utilisé dans la CMDB pour marquer une instance comme ayant été supprimée lors de la destruction.