def test_instance_status_invalid_instance_type(mock_kubernetes_status, mock_cr_status): kwargs = instance_status_kwargs() with pytest.raises(RuntimeError) as excinfo: pik.instance_status(**kwargs) assert "Unknown instance type" in str(excinfo.value) assert len(mock_cr_status.mock_calls) == 0 assert len(mock_kubernetes_status.mock_calls) == 0
def test_instance_status_kubernetes_only(mock_kubernetes_status, mock_cr_status): kwargs = instance_status_kwargs() kwargs.update(instance_type="kubernetes") pik.instance_status(**kwargs) assert len(mock_cr_status.mock_calls) == 0 assert len(mock_kubernetes_status.mock_calls) == 1
def test_instance_status_cr_and_kubernetes(mock_kubernetes_status, mock_cr_status): kwargs = instance_status_kwargs() kwargs.update(instance_type="cassandracluster") pik.instance_status(**kwargs) assert len(mock_cr_status.mock_calls) == 1 assert len(mock_kubernetes_status.mock_calls) == 1
def instance_status(request): service = request.swagger_data.get("service") instance = request.swagger_data.get("instance") verbose = request.swagger_data.get("verbose") or 0 use_new = request.swagger_data.get("new") or False include_smartstack = request.swagger_data.get("include_smartstack") if include_smartstack is None: include_smartstack = True include_envoy = request.swagger_data.get("include_envoy") if include_envoy is None: include_envoy = True include_mesos = request.swagger_data.get("include_mesos") if include_mesos is None: include_mesos = True instance_status: Dict[str, Any] = {} instance_status["service"] = service instance_status["instance"] = instance try: instance_type = validate_service_instance(service, instance, settings.cluster, settings.soa_dir) except NoConfigurationForServiceError: error_message = no_configuration_for_service_message( settings.cluster, service, instance, ) raise ApiFailure(error_message, 404) except Exception: error_message = traceback.format_exc() raise ApiFailure(error_message, 500) if instance_type != "tron": try: actual_deployments = get_actual_deployments( service, settings.soa_dir) except Exception: error_message = traceback.format_exc() raise ApiFailure(error_message, 500) version = get_deployment_version(actual_deployments, settings.cluster, instance) # exit if the deployment key is not found if not version: error_message = ( "Deployment key %s not found. Try to execute the corresponding pipeline if it's a fresh instance" % ".".join([settings.cluster, instance])) raise ApiFailure(error_message, 404) instance_status["git_sha"] = version else: instance_status["git_sha"] = "" try: if instance_type == "marathon": instance_status["marathon"] = marathon_instance_status( instance_status, service, instance, verbose, include_smartstack=include_smartstack, include_envoy=include_envoy, include_mesos=include_mesos, ) elif instance_type == "adhoc": instance_status["adhoc"] = adhoc_instance_status( instance_status, service, instance, verbose) elif pik.can_handle(instance_type): instance_status.update( pik.instance_status( service=service, instance=instance, verbose=verbose, include_smartstack=include_smartstack, include_envoy=include_envoy, use_new=use_new, instance_type=instance_type, settings=settings, )) elif instance_type == "tron": instance_status["tron"] = tron_instance_status( instance_status, service, instance, verbose) else: error_message = ( f"Unknown instance_type {instance_type} of {service}.{instance}" ) raise ApiFailure(error_message, 404) except Exception: error_message = traceback.format_exc() raise ApiFailure(error_message, 500) return instance_status