vRealize Orchestrator でホストされたワークフローを使用して、ITSM のコンプライアンスのために Cloud Assembly を ServiceNow と統合することができます。

ServiceNow 統合フローは、いくつかの Cloud Assembly、vSphere、vRealize Orchestrator、ServiceNow サービスおよび API を経由します。

エンタープライズ ユーザーは、コンプライアンスを実現するために、一般的に Cloud Management Platform と IT サービス管理 (ITSM) および構成管理データベース (CMDB) プラットフォームを統合します。この例のとおりに、 vRealize Orchestrator がホストされているワークフローを使用して、 Cloud Assembly を CMDB と ITSM 用に ServiceNow と統合できます。 vRealize Orchestrator 統合とワークフローを使用する際に、環境ごとに複数のインスタンスがある場合は、機能タグが特に便利です。機能タグの詳細については、 Cloud Assembly での機能タグの使用を参照してください。
注: また、拡張性アクション スクリプトを使用して、ServiceNow と Cloud Assembly を統合することもできます。拡張性アクション スクリプトを使用した ServiceNow の統合の詳細については、 拡張アクションを使用して Cloud Assembly と ServiceNow を統合する方法を参照してください。

この例では、ServiceNow の統合は 3 つの最上位レベルのワークフローで構成されます。各ワークフローには独自のサブスクリプションがあるため、各コンポーネントを個別に更新および反復処理できます。

  • イベント サブスクリプション エントリ ポイント - 基本ログは、要求しているユーザーと vCenter Server 仮想マシン(該当する場合)を識別します。
  • 統合ワークフロー - オブジェクトを分離し、テクニカル ワークフローに入力を取り入れて、ログ、プロパティ、出力の更新を処理します。
  • テクニカル ワークフロー - ServiceNow API のダウンストリーム システム統合により、ペイロードの外部に仮想マシンのプロパティを追加して、CMDB CI、CR、および Cloud Assembly IaaS API を作成できます。

前提条件

  • スタンドアローンまたはクラスタ化された vRealize Orchestrator 環境。
  • Cloud Assembly での vRealize Orchestrator の統合。スタンドアローン vRealize OrchestratorCloud Assembly の統合の詳細については、Cloud Assembly での vRealize Orchestrator の統合の構成を参照してください。

手順

  1. vRealize Orchestrator で、複数のワークフローで使用される共通の構成を含む構成ファイルを作成して保存します。
  2. 手順 1 の構成ファイルと同じ場所に Cloud Assembly API トークンを保存します。
    注: Cloud Assembly API トークンには有効期限があります。
  3. 指定したスクリプト要素を使用して、vRealize Orchestrator にワークフローを作成します。このスクリプトは、REST ホストを参照して特定します。また、トークンのオプション パラメータを使用する REST アクションを標準化します。これは追加の認証ヘッダーとして追加されます。
    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"];

    このスクリプトは、出力 cpuCount および memoryMB を親ワークフローに送信し、既存の customProperties プロパティを更新します。これらの値は、CMDB を作成するときに後続のワークフローで使用できます。

  4. ServiceNow CMDB CI の作成スクリプトをワークフローに追加します。この要素は、構成アイテムを使用して ServiceNow REST ホストを特定し、cmdb_ci_vmware_instance テーブルの REST 操作を作成します。さらに、POST データのワークフロー入力に基づいてコンテンツ オブジェクトの文字列を作成して、返された 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'];
  5. 子ワークフローの出力を使用して、既存の customProperties を使用するプロパティ オブジェクトを作成し、serviceNowSysId プロパティを ServiceNow の値で上書きします。この一意の ID は、インスタンスが破棄されたときに使用中止としてマークするために CMDB で使用されます。

結果

Cloud Assembly は ITSM ServiceNow と正常に統合されました。Cloud Assembly で、ワークフローを使用して ServiceNow を統合する方法の詳細については、Extending Cloud Assembly with vRealize Orchestrator for ServiceNow Integrationを参照してください。