Пример #1
0
  /**
   * Terminate a container by member id
   *
   * @param memberId
   * @return
   * @throws MemberTerminationFailedException
   */
  public MemberContext terminateContainer(String memberId) throws MemberTerminationFailedException {
    Lock lock = null;
    try {
      lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
      handleNullObject(memberId, "Could not terminate container, member id is null");

      MemberContext memberContext =
          CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
      handleNullObject(
          memberContext,
          "Could not terminate container, member context not found: [member-id] " + memberId);

      String clusterId = memberContext.getClusterId();
      handleNullObject(
          clusterId, "Could not terminate container, cluster id is null: [member-id] " + memberId);

      ClusterContext clusterContext =
          CloudControllerContext.getInstance().getClusterContext(clusterId);
      handleNullObject(
          clusterContext,
          String.format(
              "Could not terminate container, cluster context not found: "
                  + "[cluster-id] %s [member-id] %s",
              clusterId, memberId));

      String kubernetesClusterId = clusterContext.getKubernetesClusterId();
      handleNullObject(
          kubernetesClusterId,
          String.format(
              "Could not terminate container, kubernetes cluster "
                  + "context id is null: [cluster-id] %s [member-id] %s",
              clusterId, memberId));

      KubernetesClusterContext kubernetesClusterContext =
          CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
      handleNullObject(
          kubernetesClusterContext,
          String.format(
              "Could not terminate container, kubernetes cluster "
                  + "context not found: [cluster-id] %s [member-id] %s",
              clusterId, memberId));
      KubernetesApiClient kubApi = kubernetesClusterContext.getKubApi();

      try {
        log.info(
            String.format(
                "Removing kubernetes pod: [application] %s [cartridge] %s [member] %s [pod] %s",
                memberContext.getApplicationId(),
                memberContext.getCartridgeType(),
                memberContext.getMemberId(),
                memberContext.getKubernetesPodId()));

        // Remove pod
        kubApi.deletePod(memberContext.getKubernetesPodId());
        // Persist changes
        CloudControllerContext.getInstance().persist();

        log.info(
            String.format(
                "Kubernetes pod removed successfully: [application] %s [cartridge] %s "
                    + "[member] %s [pod] %s",
                memberContext.getApplicationId(),
                memberContext.getCartridgeType(),
                memberContext.getMemberId(),
                memberContext.getKubernetesPodId()));
      } catch (KubernetesClientException ignore) {
        // we can't do nothing here
        log.warn(
            String.format("Could not delete pod: [pod-id] %s", memberContext.getKubernetesPodId()));
      }
      return memberContext;
    } finally {
      if (lock != null) {
        CloudControllerContext.getInstance().releaseWriteLock(lock);
      }
    }
  }