Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(backend): 迁移集群到其他业务时候,检查待迁移的集群的所有机器必须分布同一个业务下 #8636 #8637

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
specific language governing permissions and limitations under the License.
"""

from typing import Dict, Optional
from typing import Dict, List, Optional, Set

from django.utils.translation import ugettext as _

Expand All @@ -26,6 +26,24 @@
)


def find_other_relation_domains(immute_domains: List[str]) -> List[str]:
qs_cluster = Cluster.objects.filter(immute_domain__in=immute_domains)
fetch_cluster_ids: Set[int] = set()
for c in qs_cluster.all():
for s in c.storageinstance_set.all():
fetch_cluster_ids |= set(list(s.machine.storageinstance_set.values_list("cluster", flat=True)))

for p in c.proxyinstance_set.all():
fetch_cluster_ids |= set(list(p.machine.proxyinstance_set.values_list("cluster", flat=True)))

input_cluster_ids = list(qs_cluster.values_list("id", flat=True))
if input_cluster_ids != list(fetch_cluster_ids):
res = []
for cluster_id in list(fetch_cluster_ids.difference(set(input_cluster_ids))):
res.append(Cluster.objects.get(id=cluster_id).immute_domain)
return res


class TransferMySQLClusterToOtherBizFlow(object):
"""
将MySQL集群转移到其他业务
Expand All @@ -41,7 +59,9 @@ def __init__(self, root_id: str, data: Optional[Dict]) -> None:
self.need_clone_priv_rules = data.get("need_clone_priv_rules")

def transfer_to_other_biz_flow(self):

other_domains = find_other_relation_domains(self.cluster_domain_list)
if len(other_domains) > 0:
raise Exception(_("以下域名与当前业务存在关联,请先处理关联关系:{}".format(other_domains)))
clusters = Cluster.objects.filter(bk_biz_id=self.bk_biz_id, immute_domain__in=self.cluster_domain_list).all()
bk_cloud_ids = []
source_bk_biz_ids = []
Expand All @@ -63,10 +83,8 @@ def transfer_to_other_biz_flow(self):
raise Exception(_("迁移的集群必须在同一个云区域"))
if len(uniq_source_bk_biz_ids) != 1:
raise Exception(_("迁移的集群必须在同一个业务"))

bk_cloud_id = uniq_bk_cloud_ids[0]
source_bk_biz_id = uniq_source_bk_biz_ids[0]

p = Builder(root_id=self.root_id, data=self.data)

if self.need_clone_priv_rules:
Expand Down
Loading