가상 서버 응답 프로세서 예

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기5분
  • 클라우드 프로비저닝 및 거버넌스에서 기본적으로 사용할 수 있는 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번 줄은 CMDB 기록에 필요한 입력 중 하나인 하드웨어 ID를 처리합니다.

    
    var hardwareId = vmResponse.hardwareId;
    

    39번 줄은 시스템에서 새 가상 서버와 관련 CI를 식별하는 데 필요한 정보를 보여주며 CMDB에 정보를 넣을 수 있습니다. 이 경우 서비스 계정 개체 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 템플릿은 먼저 실제 OS 템플릿과 함께 서비스 계정의 개체 ID와 데이터센터를 식별하여 식별됩니다.

    
    "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
            }
          }
        },

    다음 코드 블록은 이 정보를 가상 서버 CMDB 기록으로 채울 수 있도록 OS 이미지의 개체 ID를 속성 목록에 추가합니다.

    
    "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);