Skip to content
Merged
Show file tree
Hide file tree
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
46 changes: 24 additions & 22 deletions dbm-ui/backend/ticket/builders/redis/redis_cluster_ins_migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,20 @@
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
"""
from collections import defaultdict

from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers

from backend.db_meta.models import Cluster
from backend.db_services.dbbase.constants import IpSource
from backend.flow.engine.controller.redis import RedisController
from backend.ticket import builders
from backend.ticket.builders.common.base import DisplayInfoSerializer, SkipToRepresentationMixin
from backend.ticket.builders.common.base import (
BaseOperateResourceParamBuilder,
DisplayInfoSerializer,
SkipToRepresentationMixin,
)
from backend.ticket.builders.redis.base import BaseRedisInstanceTicketFlowBuilder
from backend.ticket.constants import TicketType

Expand All @@ -39,45 +45,41 @@ class RedisClusterInsMigrateBuilder(builders.FlowParamBuilder):
controller = RedisController.redis_cluster_ins_migrate

def format_ticket_data(self):
cluster_id = self.ticket_data["infos"][0]["cluster_id"]
cluster = Cluster.objects.get(id=cluster_id)
self.ticket_data.update(
cluster_id=cluster.id,
bk_cloud_id=cluster.bk_cloud_id,
resource_spec=self.ticket_data["infos"][0]["resource_spec"],
)
# 任取一个集群,补充云区域ID
cluster = Cluster.objects.get(id=self.ticket_data["infos"][0]["cluster_id"])
self.ticket_data.update(bk_cloud_id=cluster.bk_cloud_id)


class RedisClusterInstanceApplyResourceParamBuilder(builders.ResourceApplyParamBuilder):
class RedisClusterInstanceApplyResourceParamBuilder(BaseOperateResourceParamBuilder):
def format(self):
# 资源申请的一些参数补充
cluster_id = self.ticket_data["infos"][0]["cluster_id"]
cluster = Cluster.objects.get(id=cluster_id)
self.ticket_data.update(
cluster_id=cluster.id,
bk_cloud_id=cluster.bk_cloud_id,
resource_spec=self.ticket_data["infos"][0]["resource_spec"],
)
self.patch_info_affinity_location(roles=["backend_group"])

def post_callback(self):
next_flow = self.ticket.next_flow()
ticket_data = next_flow.details["ticket_data"]
cluster__migrate_list_map = defaultdict(list)
# 按照集群ID进行聚合
for info in ticket_data["infos"]:
migrate_list = {
migrate_info = {
"resource_spec": info["resource_spec"],
"src_master": f'{info["old_nodes"]["master"][0]["ip"]}:{info["old_nodes"]["master"][0]["port"]}',
"src_slave": f'{info["old_nodes"]["slave"][0]["ip"]}:{info["old_nodes"]["slave"][0]["port"]}',
"dest_master": f'{ticket_data["nodes"]["backend_group"][0]["master"]["ip"]}',
"dest_slave": f'{ticket_data["nodes"]["backend_group"][0]["slave"]["ip"]}',
"resource_spec": ticket_data["resource_spec"],
"dest_master": f'{info["backend_group"][0]["master"]["ip"]}',
"dest_slave": f'{info["backend_group"][0]["slave"]["ip"]}',
}
info["migrate_list"] = [migrate_list]
cluster__migrate_list_map[info["cluster_id"]].append(migrate_info)
# 平铺聚合信息
ticket_data["infos"] = [
{"cluster_id": cluster_id, "migrate_list": migrate_list}
for cluster_id, migrate_list in cluster__migrate_list_map.items()
]
next_flow.save(update_fields=["details"])


@builders.BuilderFactory.register(TicketType.REDIS_CLUSTER_INS_MIGRATE)
class RedisClusterInsMigrateBuilder(BaseRedisInstanceTicketFlowBuilder):
serializer = RedisClusterInsMigrateDetailSerializer
inner_flow_builder = RedisClusterInsMigrateBuilder
resource_apply_builder = RedisClusterInstanceApplyResourceParamBuilder
resource_batch_apply_builder = RedisClusterInstanceApplyResourceParamBuilder
inner_flow_name = _("Redis 集群指定实例迁移")
41 changes: 14 additions & 27 deletions dbm-ui/backend/ticket/builders/redis/redis_single_ins_migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,19 @@
from backend.db_services.dbbase.constants import IpSource
from backend.flow.engine.controller.redis import RedisController
from backend.ticket import builders
from backend.ticket.builders.common.base import DisplayInfoSerializer, SkipToRepresentationMixin, fetch_cluster_ids
from backend.ticket.builders.common.base import (
BaseOperateResourceParamBuilder,
DisplayInfoSerializer,
SkipToRepresentationMixin,
fetch_cluster_ids,
)
from backend.ticket.builders.redis.base import BaseRedisInstanceTicketFlowBuilder
from backend.ticket.constants import TicketType


class RedisSingleInsMigrateDetailSerializer(SkipToRepresentationMixin, serializers.Serializer):
class RedisSingleInsMigrateItemSerializer(DisplayInfoSerializer):
db_version = serializers.CharField(help_text=_("Redis版本"), required=False)
db_version = serializers.CharField(help_text=_("Redis版本"))
cluster_id = serializers.IntegerField(help_text=_("集群ID"))
resource_spec = serializers.JSONField(help_text=_("资源规格"))
old_nodes = serializers.JSONField(help_text=_("旧节点信息集合"))
Expand Down Expand Up @@ -52,27 +57,14 @@ class RedisSingleInsMigrateBuilder(builders.FlowParamBuilder):
controller = RedisController.redis_single_ins_migrate

def format_ticket_data(self):
cluster_id = self.ticket_data["infos"][0]["cluster_id"]
cluster = Cluster.objects.get(id=cluster_id)
self.ticket_data.update(
cluster_id=cluster.id,
bk_cloud_id=cluster.bk_cloud_id,
db_version=cluster.major_version,
resource_spec=self.ticket_data["infos"][0]["resource_spec"],
)
# 任取一个集群,补充云区域ID
cluster = Cluster.objects.get(id=self.ticket_data["infos"][0]["cluster_id"])
self.ticket_data.update(bk_cloud_id=cluster.bk_cloud_id)


class RedisSingleInstanceApplyResourceParamBuilder(builders.ResourceApplyParamBuilder):
class RedisSingleInstanceApplyResourceParamBuilder(BaseOperateResourceParamBuilder):
def format(self):
# 资源申请的一些参数补充
cluster_id = self.ticket_data["infos"][0]["cluster_id"]
cluster = Cluster.objects.get(id=cluster_id)
self.ticket_data.update(
cluster_id=cluster.id,
bk_cloud_id=cluster.bk_cloud_id,
db_version=cluster.major_version,
resource_spec=self.ticket_data["infos"][0]["resource_spec"],
)
self.patch_info_affinity_location(roles=["backend_group"])

def fetch_cluster_map(self, ticket_data):
Expand All @@ -83,17 +75,12 @@ def fetch_cluster_map(self, ticket_data):

def patch_instance_migrate_info(self, ticket_data):
"""补充实例迁移的信息"""
cluster_id__cluster = self.fetch_cluster_map(ticket_data)
for index, info in enumerate(ticket_data["infos"]):
cluster = cluster_id__cluster[info["cluster_id"]]
info.update(
cluster_id=cluster.id,
db_version=cluster.major_version,
src_master=f'{info["old_nodes"]["master"][0]["ip"]}:{info["old_nodes"]["master"][0]["port"]}',
src_slave=f'{info["old_nodes"]["slave"][0]["ip"]}:{info["old_nodes"]["slave"][0]["port"]}',
dest_master=f'{ticket_data["nodes"]["backend_group"][0]["master"]["ip"]}',
dest_slave=f'{ticket_data["nodes"]["backend_group"][0]["slave"]["ip"]}',
resource_spec=ticket_data["resource_spec"],
dest_master=f'{info["backend_group"][0]["master"]["ip"]}',
dest_slave=f'{info["backend_group"][0]["slave"]["ip"]}',
)

def post_callback(self):
Expand All @@ -106,5 +93,5 @@ def post_callback(self):
class RedisSingleInsMigrateBuilder(BaseRedisInstanceTicketFlowBuilder):
serializer = RedisSingleInsMigrateDetailSerializer
inner_flow_builder = RedisSingleInsMigrateBuilder
resource_apply_builder = RedisSingleInstanceApplyResourceParamBuilder
resource_batch_apply_builder = RedisSingleInstanceApplyResourceParamBuilder
inner_flow_name = _("Redis 主从指定实例迁移")
Loading