Search in sources :

Example 6 with CloudbreakClient

use of com.sequenceiq.cloudbreak.client.CloudbreakClient in project cloudbreak by hortonworks.

the class UpdateFailedHandler method reportAmbariServerFailure.

private void reportAmbariServerFailure(Cluster cluster, StackResponse stackResponse, CloudbreakClient cbClient) {
    Optional<InstanceMetaDataJson> pgw = stackResponse.getInstanceGroups().stream().flatMap(ig -> ig.getMetadata().stream()).filter(im -> im.getInstanceType() == InstanceMetadataType.GATEWAY_PRIMARY && im.getInstanceStatus() != InstanceStatus.TERMINATED).findFirst();
    if (pgw.isPresent()) {
        FailureReport failureReport = new FailureReport();
        failureReport.setFailedNodes(Collections.singletonList(pgw.get().getDiscoveryFQDN()));
        try {
            cbClient.clusterEndpoint().failureReport(cluster.getStackId(), failureReport);
        } catch (Exception e) {
            LOGGER.warn("Exception during failure report", e);
        }
    }
}
Also used : Logger(org.slf4j.Logger) Cluster(com.sequenceiq.periscope.domain.Cluster) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) LoggerFactory(org.slf4j.LoggerFactory) CloudbreakClient(com.sequenceiq.cloudbreak.client.CloudbreakClient) ApplicationListener(org.springframework.context.ApplicationListener) UpdateFailedEvent(com.sequenceiq.periscope.monitor.event.UpdateFailedEvent) HashSet(java.util.HashSet) Inject(javax.inject.Inject) InstanceMetadataType(com.sequenceiq.cloudbreak.api.model.InstanceMetadataType) FailureReport(com.sequenceiq.cloudbreak.api.model.FailureReport) Component(org.springframework.stereotype.Component) Map(java.util.Map) InstanceStatus(com.sequenceiq.cloudbreak.api.model.InstanceStatus) MDCBuilder(com.sequenceiq.periscope.log.MDCBuilder) StackResponse(com.sequenceiq.cloudbreak.api.model.StackResponse) ClusterState(com.sequenceiq.periscope.api.model.ClusterState) Optional(java.util.Optional) InstanceMetaDataJson(com.sequenceiq.cloudbreak.api.model.InstanceMetaDataJson) Collections(java.util.Collections) CloudbreakClientConfiguration(com.sequenceiq.periscope.service.configuration.CloudbreakClientConfiguration) ClusterService(com.sequenceiq.periscope.service.ClusterService) FailureReport(com.sequenceiq.cloudbreak.api.model.FailureReport) InstanceMetaDataJson(com.sequenceiq.cloudbreak.api.model.InstanceMetaDataJson)

Example 7 with CloudbreakClient

use of com.sequenceiq.cloudbreak.client.CloudbreakClient in project cloudbreak by hortonworks.

the class UpdateFailedHandler method onApplicationEvent.

@Override
public void onApplicationEvent(UpdateFailedEvent event) {
    long id = event.getClusterId();
    Cluster cluster = clusterService.find(id);
    MDCBuilder.buildMdcContext(cluster);
    Integer failed = updateFailures.get(id);
    if (failed == null) {
        updateFailures.put(id, 1);
    } else if (RETRY_THRESHOLD - 1 == failed) {
        try {
            CloudbreakClient cloudbreakClient = cloudbreakClientConfiguration.cloudbreakClient();
            StackResponse stackResponse = cloudbreakClient.stackV1Endpoint().get(cluster.getStackId(), new HashSet<>());
            String stackStatus = stackResponse.getStatus().name();
            String clusterStatus = stackResponse.getCluster().getStatus().name();
            if (stackStatus.startsWith(DELETE_STATUSES_PREFIX)) {
                clusterService.removeById(id);
                LOGGER.info("Delete cluster due to failing update attempts and Cloudbreak stack status");
            } else if (stackStatus.equals(AVAILABLE) && clusterStatus.equals(AVAILABLE)) {
                // Ambari server is unreacheable but the stack and cluster statuses are "AVAILABLE"
                reportAmbariServerFailure(cluster, stackResponse, cloudbreakClient);
                suspendCluster(cluster);
            } else {
                suspendCluster(cluster);
            }
        } catch (Exception ex) {
            LOGGER.warn("Cluster status could not be verified by Cloudbreak for remove.", ex);
            suspendCluster(cluster);
        }
        updateFailures.remove(id);
    } else {
        updateFailures.put(id, failed + 1);
    }
}
Also used : CloudbreakClient(com.sequenceiq.cloudbreak.client.CloudbreakClient) Cluster(com.sequenceiq.periscope.domain.Cluster) StackResponse(com.sequenceiq.cloudbreak.api.model.StackResponse) HashSet(java.util.HashSet)

Example 8 with CloudbreakClient

use of com.sequenceiq.cloudbreak.client.CloudbreakClient in project cloudbreak by hortonworks.

the class MockSuiteInitializer method cleanUp.

@AfterSuite(alwaysRun = true)
@Parameters("cleanUp")
public void cleanUp(@Optional("true") boolean cleanUp) {
    if (isCleanUpNeeded(cleanUp)) {
        CloudbreakClient cloudbreakClient = itContext.getContextParam(CloudbreakITContextConstants.CLOUDBREAK_CLIENT, CloudbreakClient.class);
        cleanUpService.deleteImageCatalog(cloudbreakClient, MOCK_IMAGE_CATALOG_NAME);
    }
}
Also used : CloudbreakClient(com.sequenceiq.cloudbreak.client.CloudbreakClient) Parameters(org.testng.annotations.Parameters) AfterSuite(org.testng.annotations.AfterSuite)

Example 9 with CloudbreakClient

use of com.sequenceiq.cloudbreak.client.CloudbreakClient in project cloudbreak by hortonworks.

the class MockSuiteInitializer method initSuiteMap.

@BeforeSuite(dependsOnMethods = "initContext")
public void initSuiteMap(ITestContext testContext) {
    CloudbreakClient cloudbreakClient = itContext.getContextParam(CloudbreakITContextConstants.CLOUDBREAK_CLIENT, CloudbreakClient.class);
    if (cleanUpBeforeStart && isImageCatalogExists(cloudbreakClient.imageCatalogEndpoint(), MOCK_IMAGE_CATALOG_NAME)) {
        cleanUpService.deleteImageCatalog(cloudbreakClient, MOCK_IMAGE_CATALOG_NAME);
    }
    createMockImageCatalog(cloudbreakClient.imageCatalogEndpoint());
}
Also used : CloudbreakClient(com.sequenceiq.cloudbreak.client.CloudbreakClient) BeforeSuite(org.testng.annotations.BeforeSuite)

Example 10 with CloudbreakClient

use of com.sequenceiq.cloudbreak.client.CloudbreakClient in project cloudbreak by hortonworks.

the class CloudbreakTestSuiteInitializer method cleanUp.

@AfterSuite(alwaysRun = true)
@Parameters("cleanUp")
public void cleanUp(@Optional("true") boolean cleanUp) {
    if (isCleanUpNeeded(cleanUp)) {
        CloudbreakClient cloudbreakClient = itContext.getContextParam(CloudbreakITContextConstants.CLOUDBREAK_CLIENT, CloudbreakClient.class);
        String stackId = itContext.getCleanUpParameter(CloudbreakITContextConstants.STACK_ID);
        cleanUpService.deleteStackAndWait(cloudbreakClient, stackId);
        List<InstanceGroup> instanceGroups = itContext.getCleanUpParameter(CloudbreakITContextConstants.TEMPLATE_ID, List.class);
        if (instanceGroups != null && !instanceGroups.isEmpty()) {
            Collection<String> deletedTemplates = new HashSet<>();
            for (InstanceGroup ig : instanceGroups) {
                if (!deletedTemplates.contains(ig.getTemplateId())) {
                    cleanUpService.deleteTemplate(cloudbreakClient, ig.getTemplateId());
                    deletedTemplates.add(ig.getTemplateId());
                }
            }
        }
        Set<Long> recipeIds = itContext.getContextParam(CloudbreakITContextConstants.RECIPE_ID, Set.class);
        if (recipeIds != null) {
            for (Long recipeId : recipeIds) {
                cleanUpService.deleteRecipe(cloudbreakClient, recipeId);
            }
        }
        cleanUpService.deleteCredential(cloudbreakClient, itContext.getCleanUpParameter(CloudbreakITContextConstants.CREDENTIAL_ID));
        cleanUpService.deleteBlueprint(cloudbreakClient, itContext.getCleanUpParameter(CloudbreakITContextConstants.BLUEPRINT_ID));
        cleanUpService.deleteNetwork(cloudbreakClient, itContext.getCleanUpParameter(CloudbreakITContextConstants.NETWORK_ID));
        cleanUpService.deleteSecurityGroup(cloudbreakClient, itContext.getCleanUpParameter(CloudbreakITContextConstants.SECURITY_GROUP_ID));
        cleanUpService.deleteRdsConfigs(cloudbreakClient, itContext.getCleanUpParameter(CloudbreakITContextConstants.RDS_CONFIG_ID));
    }
}
Also used : CloudbreakClient(com.sequenceiq.cloudbreak.client.CloudbreakClient) HashSet(java.util.HashSet) Parameters(org.testng.annotations.Parameters) AfterSuite(org.testng.annotations.AfterSuite)

Aggregations

CloudbreakClient (com.sequenceiq.cloudbreak.client.CloudbreakClient)10 Cluster (com.sequenceiq.periscope.domain.Cluster)4 HashSet (java.util.HashSet)4 Map (java.util.Map)4 StackResponse (com.sequenceiq.cloudbreak.api.model.StackResponse)3 Collections (java.util.Collections)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 Component (org.springframework.stereotype.Component)3 AmbariClient (com.sequenceiq.ambari.client.AmbariClient)2 StackV1Endpoint (com.sequenceiq.cloudbreak.api.endpoint.v1.StackV1Endpoint)2 FailureReport (com.sequenceiq.cloudbreak.api.model.FailureReport)2 Status (com.sequenceiq.cloudbreak.api.model.Status)2 UpdateFailedEvent (com.sequenceiq.periscope.monitor.event.UpdateFailedEvent)2 ClusterService (com.sequenceiq.periscope.service.ClusterService)2 CloudbreakClientConfiguration (com.sequenceiq.periscope.service.configuration.CloudbreakClientConfiguration)2 List (java.util.List)2 Set (java.util.Set)2 AfterSuite (org.testng.annotations.AfterSuite)2 Parameters (org.testng.annotations.Parameters)2