Procházet zdrojové kódy

fix: 修复pod未自动更新的问题

fanyanpeng před 1 rokem
rodič
revize
e4854e2878

+ 30 - 0
src/main/java/cn/seecoder/paas/service/impl/EnvironmentServiceImpl.java

@@ -278,6 +278,34 @@ public class EnvironmentServiceImpl implements EnvironmentService {
         return EnvironmentConverter.convertToVO(environmentDAO.save(result));
     }
 
+    private void deleteAllPods(Integer environmentId) throws ServiceException {
+        // 查找环境
+        Environment environment = environmentDAO.findById(environmentId).orElse(null);
+
+        // 生成用于过滤 Pod 的标签键和值
+        String labelKey = ResourceLabel.RESOURCE.getCode();
+        String labelValue = ResourceLabel.RESOURCE.getGenerator().gen("environment", String.valueOf(environment.getAppId()), String.valueOf(environment.getId()));
+
+        // 构造请求,按照命名空间和标签获取所有相关的 Pod
+        K8sObjectRequest request = K8sObjectRequest.builder()
+                .namespace(applicationProperties.getDeploymentNamespace())
+                .labels(Collections.singletonMap(labelKey, labelValue))
+                .build();
+
+        // 获取与此环境相关的 Pod 列表
+        List<Pod> pods = podApi.getByCondition(request);
+        if (CollectionUtils.isEmpty(pods)) {
+            logger.error("环境下没有pod");
+            return;
+        }
+
+        // 删除所有找到的 Pod
+        for (Pod pod : pods) {
+            podApi.delete(pod);
+        }
+
+    }
+
     @Override
     @Transactional
     public void checkDeployStatus() {
@@ -537,6 +565,8 @@ public class EnvironmentServiceImpl implements EnvironmentService {
                 deploymentApi.create(deployment);
             } else {
                 deploymentApi.update(deployment);
+                // 保证pod被删除
+                deleteAllPods(id);
             }
         } catch (Exception e) {
             if (result.getBuildStatus() == BuildStatus.BUILDING) {