Search in sources :

Example 1 with CloudOperationNotSupportedException

use of com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException in project cloudbreak by hortonworks.

the class AwsInstanceConnector method getConsoleOutput.

@Override
public String getConsoleOutput(AuthenticatedContext authenticatedContext, CloudInstance vm) {
    if (!verifyHostKey) {
        throw new CloudOperationNotSupportedException("Host key verification is disabled on AWS");
    }
    AmazonEC2Client amazonEC2Client = awsClient.createAccess(new AwsCredentialView(authenticatedContext.getCloudCredential()), authenticatedContext.getCloudContext().getLocation().getRegion().value());
    GetConsoleOutputRequest getConsoleOutputRequest = new GetConsoleOutputRequest().withInstanceId(vm.getInstanceId());
    GetConsoleOutputResult getConsoleOutputResult = amazonEC2Client.getConsoleOutput(getConsoleOutputRequest);
    try {
        return getConsoleOutputResult.getOutput() == null ? "" : getConsoleOutputResult.getDecodedOutput();
    } catch (Exception ex) {
        LOGGER.debug(ex.getMessage(), ex);
        return "";
    }
}
Also used : AmazonEC2Client(com.amazonaws.services.ec2.AmazonEC2Client) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView) CloudOperationNotSupportedException(com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException) GetConsoleOutputResult(com.amazonaws.services.ec2.model.GetConsoleOutputResult) GetConsoleOutputRequest(com.amazonaws.services.ec2.model.GetConsoleOutputRequest) AmazonEC2Exception(com.amazonaws.services.ec2.model.AmazonEC2Exception) CloudOperationNotSupportedException(com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException)

Example 2 with CloudOperationNotSupportedException

use of com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException in project cloudbreak by hortonworks.

the class GetSSHFingerprintsHandler method accept.

@Override
public void accept(Event<GetSSHFingerprintsRequest> getSSHFingerprintsRequestEvent) {
    LOGGER.info("Received event: {}", getSSHFingerprintsRequestEvent);
    GetSSHFingerprintsRequest fingerprintsRequest = getSSHFingerprintsRequestEvent.getData();
    try {
        CloudContext cloudContext = fingerprintsRequest.getCloudContext();
        CloudInstance cloudInstance = fingerprintsRequest.getCloudInstance();
        CloudConnector connector = cloudPlatformConnectors.get(cloudContext.getPlatformVariant());
        AuthenticatedContext ac = connector.authentication().authenticate(cloudContext, fingerprintsRequest.getCloudCredential());
        GetSSHFingerprintsResult fingerprintsResult;
        try {
            String initialConsoleOutput = connector.instances().getConsoleOutput(ac, cloudInstance);
            InstanceConsoleOutputResult consoleOutputResult = new InstanceConsoleOutputResult(cloudContext, cloudInstance, initialConsoleOutput);
            PollTask<InstanceConsoleOutputResult> outputPollerTask = statusCheckFactory.newPollConsoleOutputTask(connector.instances(), ac, cloudInstance);
            if (!outputPollerTask.completed(consoleOutputResult)) {
                consoleOutputResult = syncPollingScheduler.schedule(outputPollerTask);
            }
            Set<String> sshFingerprints = FingerprintParserUtil.parseFingerprints(consoleOutputResult.getConsoleOutput());
            if (sshFingerprints.isEmpty()) {
                throw new RuntimeException("Failed to get SSH fingerprints from the specified VM instance.");
            } else {
                fingerprintsResult = new GetSSHFingerprintsResult(fingerprintsRequest, sshFingerprints);
            }
        } catch (CloudOperationNotSupportedException ignored) {
            fingerprintsResult = new GetSSHFingerprintsResult(fingerprintsRequest, new HashSet<>());
        }
        fingerprintsRequest.getResult().onNext(fingerprintsResult);
        eventBus.notify(fingerprintsResult.selector(), new Event<>(getSSHFingerprintsRequestEvent.getHeaders(), fingerprintsResult));
        LOGGER.info("GetSSHFingerprintsHandler finished");
    } catch (Exception e) {
        GetSSHFingerprintsResult failure = new GetSSHFingerprintsResult("Failed to get ssh fingerprints!", e, fingerprintsRequest);
        fingerprintsRequest.getResult().onNext(failure);
        eventBus.notify(failure.selector(), new Event<>(getSSHFingerprintsRequestEvent.getHeaders(), failure));
    }
}
Also used : CloudConnector(com.sequenceiq.cloudbreak.cloud.CloudConnector) CloudContext(com.sequenceiq.cloudbreak.cloud.context.CloudContext) CloudInstance(com.sequenceiq.cloudbreak.cloud.model.CloudInstance) InstanceConsoleOutputResult(com.sequenceiq.cloudbreak.cloud.event.instance.InstanceConsoleOutputResult) AuthenticatedContext(com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext) CloudOperationNotSupportedException(com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException) GetSSHFingerprintsResult(com.sequenceiq.cloudbreak.cloud.event.instance.GetSSHFingerprintsResult) GetSSHFingerprintsRequest(com.sequenceiq.cloudbreak.cloud.event.instance.GetSSHFingerprintsRequest) CloudOperationNotSupportedException(com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException) Event(reactor.bus.Event)

Aggregations

CloudOperationNotSupportedException (com.sequenceiq.cloudbreak.cloud.exception.CloudOperationNotSupportedException)2 AmazonEC2Client (com.amazonaws.services.ec2.AmazonEC2Client)1 AmazonEC2Exception (com.amazonaws.services.ec2.model.AmazonEC2Exception)1 GetConsoleOutputRequest (com.amazonaws.services.ec2.model.GetConsoleOutputRequest)1 GetConsoleOutputResult (com.amazonaws.services.ec2.model.GetConsoleOutputResult)1 CloudConnector (com.sequenceiq.cloudbreak.cloud.CloudConnector)1 AwsCredentialView (com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView)1 AuthenticatedContext (com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext)1 CloudContext (com.sequenceiq.cloudbreak.cloud.context.CloudContext)1 GetSSHFingerprintsRequest (com.sequenceiq.cloudbreak.cloud.event.instance.GetSSHFingerprintsRequest)1 GetSSHFingerprintsResult (com.sequenceiq.cloudbreak.cloud.event.instance.GetSSHFingerprintsResult)1 InstanceConsoleOutputResult (com.sequenceiq.cloudbreak.cloud.event.instance.InstanceConsoleOutputResult)1 CloudInstance (com.sequenceiq.cloudbreak.cloud.model.CloudInstance)1 Event (reactor.bus.Event)1