Exemplo de processador de resposta do servidor virtual
O script Create_Virtual_Server_Response_Processor, que está disponível por padrão em Cloud Provisioning and Governance, é o processador de resposta que trata a criação de ICs de máquina virtual da AWS.
Criar servidor virtual
O script do processador de recursos Create_Virtual_Server_Response_Processor está disponível por padrão no bloco de recursos do Servidor Virtual. Seu trabalho é criar um registro de servidor virtual na tabela Instância de máquina virtual [cmdb_ci_vm_instance] quando um novo servidor virtual é provisionado.
function processResponse(response, cloudServiceAccountId, ldc, correlationId,step, requestorContext) {
Isso traz a resposta do provedor de nuvem e as informações importantes, como o ID da conta, que são necessárias para o novo IC que o sistema pode criar. Todos esses parâmetros são necessários para todos os processadores de resposta.
A linha 10 analisa a resposta em JSON para que o sistema possa processá-la. As informações são mantidas na variável vmResponse:
var vmResponse = global.JSON.parse(response);
Sempre que você cria ou edita um processador de resposta, é preciso saber quais entradas são necessárias para o tipo de IC. A linha 11 trata uma das entradas necessárias, o ID de hardware, que o registro CMDB requer:
var hardwareId = vmResponse.hardwareId;
A linha 39 mostra as informações necessárias para o sistema identificar o novo servidor virtual e os ICs relacionados, para que as informações possam ser colocadas no CMDB. Nesse caso, o ID do objeto da conta de serviço identifica a conta associada ao servidor virtual, o ID do objeto do datacenter identifica o datacenter no qual o servidor virtual reside e o ID do objeto da instância da máquina virtual identifica o próprio servidor virtual. Este bloco de código de identificação evita a criação de ICs duplicados.
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
}
}
},Os atributos são preenchidos nos campos na tabela cmdb_ci_vm_instance. Esses atributos são definidos na linha 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
},
Referências a outros ICs também podem ser incluídas no processador de resposta. Nesse caso, o modelo de SO no qual o servidor virtual se baseia é identificado primeiro pela identificação do ID de objeto da conta de serviço e o datacenter junto com o modelo de SO real.
"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
}
}
},O bloco de código a seguir adiciona o ID do objeto da imagem do SO à lista de atributos para que essas informações possam ser preenchidas no registro do CMDB do servidor virtual.
"attributes": {
"object_id": imageIdTrim
}
Este bloco de código executa identificação adicional no modelo de computação (o tipo de hardware) e, em seguida, a adiciona aos atributos:
"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
}
}Seções de código adicionais fazem o relacionamento com as interfaces de rede e identificam qualquer armazenamento anexado ao servidor virtual.
Este bloco de código obrigatório envia os dados por push para o CMDB e retorna a cadeia de caracteres JSON:
cloudModelString.push(vmInfo);
return global.JSON.stringify(cloudModelString);