仮想サーバーの応答プロセッサーの例

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:5分
  • デフォルトにより クラウドプロビジョニングとガバナンス で使用可能な Create_Virtual_Server_Response_Processor スクリプトは、AWS 仮想マシン CI の作成を処理する応答プロセッサーです。

    仮想サーバーの作成

    Create_Virtual_Server_Response_Processor リソースプロセッサースクリプトは、デフォルトにより仮想サーバーリソースブロックで使用できます。そのジョブは、新しい仮想サーバーがプロビジョニングされるときに、仮想マシンインスタンス [cmdb_ci_vm_instance] テーブルに仮想サーバーレコードを作成することです。

    すべての応答プロセッサーには、共通パラメーターを含む次の 1 行目があります。
    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);