Skip to content

Commit 42781b4

Browse files
ymakedaqiSecloud
authored andcommitted
fix(backend): 迁移集群到其他业务时候,检查待迁移的集群的所有机器必须分布同一个业务下 TencentBlueKing#8636
1 parent 1330e84 commit 42781b4

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

dbm-ui/backend/flow/engine/bamboo/scene/common/transfer_cluster_to_other_biz.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
specific language governing permissions and limitations under the License.
1010
"""
1111

12-
from typing import Dict, Optional
12+
from typing import Dict, List, Optional, Set
1313

1414
from django.utils.translation import ugettext as _
1515

@@ -26,6 +26,24 @@
2626
)
2727

2828

29+
def find_other_relation_domains(immute_domains: List[str]) -> List[str]:
30+
qs_cluster = Cluster.objects.filter(immute_domain__in=immute_domains)
31+
fetch_cluster_ids: Set[int] = set()
32+
for c in qs_cluster.all():
33+
for s in c.storageinstance_set.all():
34+
fetch_cluster_ids |= set(list(s.machine.storageinstance_set.values_list("cluster", flat=True)))
35+
36+
for p in c.proxyinstance_set.all():
37+
fetch_cluster_ids |= set(list(p.machine.proxyinstance_set.values_list("cluster", flat=True)))
38+
39+
input_cluster_ids = list(qs_cluster.values_list("id", flat=True))
40+
if input_cluster_ids != list(fetch_cluster_ids):
41+
res = []
42+
for cluster_id in list(fetch_cluster_ids.difference(set(input_cluster_ids))):
43+
res.append(Cluster.objects.get(id=cluster_id).immute_domain)
44+
return res
45+
46+
2947
class TransferMySQLClusterToOtherBizFlow(object):
3048
"""
3149
将MySQL集群转移到其他业务
@@ -41,7 +59,9 @@ def __init__(self, root_id: str, data: Optional[Dict]) -> None:
4159
self.need_clone_priv_rules = data.get("need_clone_priv_rules")
4260

4361
def transfer_to_other_biz_flow(self):
44-
62+
other_domains = find_other_relation_domains(self.cluster_domain_list)
63+
if len(other_domains) > 0:
64+
raise Exception(_("以下域名与当前业务存在关联,请先处理关联关系:{}".format(other_domains)))
4565
clusters = Cluster.objects.filter(bk_biz_id=self.bk_biz_id, immute_domain__in=self.cluster_domain_list).all()
4666
bk_cloud_ids = []
4767
source_bk_biz_ids = []
@@ -63,10 +83,8 @@ def transfer_to_other_biz_flow(self):
6383
raise Exception(_("迁移的集群必须在同一个云区域"))
6484
if len(uniq_source_bk_biz_ids) != 1:
6585
raise Exception(_("迁移的集群必须在同一个业务"))
66-
6786
bk_cloud_id = uniq_bk_cloud_ids[0]
6887
source_bk_biz_id = uniq_source_bk_biz_ids[0]
69-
7088
p = Builder(root_id=self.root_id, data=self.data)
7189

7290
if self.need_clone_priv_rules:

0 commit comments

Comments
 (0)