仮想サーバーの応答プロセッサーの例
デフォルトにより クラウドプロビジョニングとガバナンス で使用可能な Create_Virtual_Server_Response_Processor スクリプトは、AWS 仮想マシン CI の作成を処理する応答プロセッサーです。
仮想サーバーの作成
Create_Virtual_Server_Response_Processor リソースプロセッサースクリプトは、デフォルトにより仮想サーバーリソースブロックで使用できます。そのジョブは、新しい仮想サーバーがプロビジョニングされるときに、仮想マシンインスタンス [cmdb_ci_vm_instance] テーブルに仮想サーバーレコードを作成することです。
function processResponse(response, cloudServiceAccountId, ldc, correlationId,step, requestorContext) {
これにより、クラウドプロバイダからの応答と、システムが作成できる新しい CI に必要な重要な情報 (アカウント ID など) が表示されます。これらのパラメーターはすべて、すべての応答プロセッサーに必要です。
10 行目は、応答を JSON に解析して、システムが処理できるようにしています。この情報は、vmResponse 変数に保持されます。
var vmResponse = global.JSON.parse(response);
応答プロセッサーを作成または編集する場合は常に、CI タイプに必要な入力を把握しておく必要があります。11 行目は、必要な入力の 1 つであるハードウェア ID を処理します。この入力は CMDB レコードに必要です。
var hardwareId = vmResponse.hardwareId;
39 行目は、情報を CMDB に入れることができるように、システムが新しい仮想サーバーおよび関連する CI を識別するために必要な情報を示しています。この場合、サービスアカウントオブジェクト ID は仮想サーバーに関連付けられたアカウントを識別し、データセンターオブジェクト ID は仮想サーバーが配置されているデータセンターを識別し、仮想マシンインスタンスオブジェクト ID は仮想サーバー自体を識別します。この識別コードブロックは、重複する CI の作成を防止します。
var vmInfo = {
"cmdb_ci_vm_instance": {
"validator": "virtual_machine_create_update_validator",
"validator_overrides": {},
"identification": {
"cmdb_ci_cloud_service_account": {
"criterion": {
"object_id": cloudServiceAccountId
}
},
"cmdb_ci_aws_datacenter": {
"criterion": {
"object_id": ldc
}
},
"cmdb_ci_vm_instance": {
"criterion": {
"object_id": vmResponse.nodeId
}
}
},属性は、cmdb_ci_vm_instance テーブル上のフィールドに入力されます。これらの属性は、61 行目で定義されています。
"attributes": {
"name": vmResponse.nodeName,
"object_id": vmResponse.nodeId,
"state": status_map[vmResponse.state],
"dns_suffix": vmResponse.dnsSuffix,
"cpus": vmCPUs,
"memory": vmMemory,
"disks": vmResponse.volumes.length,
"disks_size": "",
"nics": vmResponse.networkInterfaces.length,
"terminated_on": "",
"termination_protection": "",
"ip_address": vmPubIPAddr,
"assigned_to": reqContext.userId,
"assignment_group": reqContext.groupId
},
他の CI への参照も応答プロセッサーに含めることができます。この場合、仮想サーバーの基になっている OS テンプレートは、まずサービスアカウントとデータセンターのオブジェクト ID、および実際の OS テンプレートを識別することで識別されます。
"references": {
"cmdb_ci_os_template": {
"identification": {
"cmdb_ci_cloud_service_account": {
"criterion": {
"object_id": cloudServiceAccountId
}
},
"cmdb_ci_aws_datacenter": {
"criterion": {
"object_id": ldc
}
},
"cmdb_ci_os_template": {
"criterion": {
"object_id": imageIdTrim
}
}
},次のコードブロックは、OS イメージのオブジェクト ID を属性リストに追加して、この情報を仮想サーバーの CMDB レコードに入力できるようにします。
"attributes": {
"object_id": imageIdTrim
}
このコードブロックは、計算テンプレート (ハードウェアタイプ) で追加の識別を実行し、それを属性に追加します。
"cmdb_ci_compute_template": {
"identification": {
"cmdb_ci_cloud_service_account": {
"criterion": {
"object_id": cloudServiceAccountId
}
},
"cmdb_ci_aws_datacenter": {
"criterion": {
"object_id": ldc
}
},
"cmdb_ci_compute_template": {
"criterion": {
"object_id": vmResponse.hardwareId
}
}
},
"attributes": {
"object_id": vmResponse.hardwareId,
"name": vmResponse.hardwareId
}
}追加のコードセクションでは、ネットワークインターフェイスとの関係を作成し、仮想サーバーに接続されているストレージを識別します。
この必須コードブロックは、データを CMDB にプッシュして、JSON 文字列を返します。
cloudModelString.push(vmInfo);
return global.JSON.stringify(cloudModelString);