Skip to content

Commit 2a45202

Browse files
committed
add release plan instance code
Signed-off-by: Patrick Zhao <[email protected]>
1 parent 0344b0c commit 2a45202

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

pkg/microservice/aslan/core/common/repository/models/release_plan.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type ReleasePlan struct {
5151
ExecutingTime int64 `bson:"executing_time" yaml:"executing_time" json:"executing_time"`
5252
SuccessTime int64 `bson:"success_time" yaml:"success_time" json:"success_time"`
5353

54+
InstanceCode string `bson:"instance_code" yaml:"instance_code" json:"instance_code"`
5455
HookSettings *HookSettings `bson:"hook_settings" yaml:"hook_settings" json:"hook_settings"`
5556

5657
WaitForApproveExternalCheckTime int64 `bson:"wait_for_approve_external_check_time" yaml:"wait_for_approve_external_check_time" json:"wait_for_approve_external_check_time"`

pkg/microservice/aslan/core/common/repository/models/workflow_v4.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ type Approval struct {
158158
type NativeApproval struct {
159159
Timeout int `bson:"timeout" yaml:"timeout" json:"timeout"`
160160
ApproveUsers []*User `bson:"approve_users" yaml:"approve_users" json:"approve_users"`
161-
FloatApproveUsers []*User `bson:"-" yaml:"flat_approve_users" json:"flat_approve_users"`
161+
FloatApproveUsers []*User `bson:"-" yaml:"flat_approve_users" json:"flat_approve_users"`
162162
NeededApprovers int `bson:"needed_approvers" yaml:"needed_approvers" json:"needed_approvers"`
163163
RejectOrApprove config.ApprovalStatus `bson:"reject_or_approve" yaml:"-" json:"reject_or_approve"`
164164
// InstanceCode: native approval instance code, save for working after restart aslan

pkg/microservice/aslan/core/common/service/webhooknotify/types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ type ReleasePlanHookBody struct {
156156
UpdatedBy string `json:"updated_by"`
157157
// 更新时间
158158
UpdateTime int64 `json:"update_time"`
159+
// 实例代码
160+
InstanceCode string `json:"instance_code"`
159161

160162
// 发布任务列表
161163
Jobs []*ReleasePlanHookJob `json:"jobs"`

pkg/microservice/aslan/core/release_plan/service/release_plan.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package service
1818

1919
import (
2020
"context"
21+
"crypto/sha256"
22+
"encoding/hex"
2123
"encoding/json"
2224
"fmt"
2325
"strconv"
@@ -31,6 +33,7 @@ import (
3133
"github.com/koderover/zadig/v2/pkg/types"
3234
"github.com/pkg/errors"
3335
"github.com/samber/lo"
36+
"go.mongodb.org/mongo-driver/bson"
3437
"go.mongodb.org/mongo-driver/bson/primitive"
3538
"go.mongodb.org/mongo-driver/mongo"
3639

@@ -400,6 +403,14 @@ func UpdateReleasePlan(c *handler.Context, planID string, args *UpdateReleasePla
400403
}
401404
plan.HookSettings = hookSetting.ToHookSettings()
402405

406+
instanceCode, err := generateInstanceCode(plan)
407+
if err != nil {
408+
fmtErr := fmt.Errorf("failed generate instance code, err: %v", err)
409+
log.Error(fmtErr)
410+
return fmtErr
411+
}
412+
plan.InstanceCode = instanceCode
413+
403414
if err = mongodb.NewReleasePlanColl().UpdateByID(ctx, planID, plan); err != nil {
404415
return errors.Wrap(err, "update plan")
405416
}
@@ -881,6 +892,12 @@ func UpdateReleasePlanStatus(c *handler.Context, planID, targetStatus string, is
881892
plan.WaitForExecuteExternalCheckTime = 0
882893
plan.WaitForAllDoneExternalCheckTime = 0
883894
plan.ExternalCheckFailedReason = ""
895+
plan.InstanceCode, err = generateInstanceCode(plan)
896+
if err != nil {
897+
fmtErr := fmt.Errorf("failed generate instance code, err: %v", err)
898+
log.Error(fmtErr)
899+
return fmtErr
900+
}
884901
case config.ReleasePlanStatusExecuting:
885902
if plan.Approval != nil && plan.Approval.Enabled == true && plan.Approval.Status != config.StatusPassed {
886903
return errors.Errorf("approval status is %s, can not execute", plan.Approval.Status)
@@ -1293,13 +1310,14 @@ func UpdateReleasePlanHookSetting(c *handler.Context, req *models.ReleasePlanHoo
12931310

12941311
type ReleasePlanCallBackBody struct {
12951312
ReleasePlanID string `json:"release_plan_id"`
1313+
InstanceCode string `json:"instance_code"`
12961314
HookEvent models.ReleasePlanHookEvent `json:"hook_event"`
12971315
Result setting.ReleasePlanCallBackResultType `json:"result"`
12981316
FailedReason string `json:"failed_reason"`
12991317
}
13001318

13011319
func ReleasePlanHookCallback(c *handler.Context, callback *ReleasePlanCallBackBody) error {
1302-
log.Infof("release plan hook callback, id: %s, hook event: %s, result: %s, failed reason: %s", callback.ReleasePlanID, callback.HookEvent, callback.Result, callback.FailedReason)
1320+
log.Infof("release plan hook callback, id: %s, instance code: %s, hook event: %s, result: %s, failed reason: %s", callback.ReleasePlanID, callback.InstanceCode, callback.HookEvent, callback.Result, callback.FailedReason)
13031321

13041322
hookSetting, err := mongodb.NewSystemSettingColl().GetReleasePlanHookSetting()
13051323
if err != nil {
@@ -1335,6 +1353,12 @@ func ReleasePlanHookCallback(c *handler.Context, callback *ReleasePlanCallBackBo
13351353
return fmtErr
13361354
}
13371355

1356+
if releasePlan.InstanceCode != callback.InstanceCode {
1357+
fmtErr := fmt.Errorf("release plan instance code is not correct, name: %s, instance code: %s, expected: %s", releasePlan.Name, callback.InstanceCode, releasePlan.InstanceCode)
1358+
log.Error(fmtErr)
1359+
return fmtErr
1360+
}
1361+
13381362
if !hookEventStatusMap[releasePlan.Status] {
13391363
fmtErr := fmt.Errorf("release plan's status is not correct, status: %s", releasePlan.Status)
13401364
log.Error(fmtErr)
@@ -1512,6 +1536,7 @@ func convertReleasePlanToHookBody(plan *models.ReleasePlan, hookEvent commonmode
15121536
Name: plan.Name,
15131537
Manager: plan.Manager,
15141538
ManagerID: plan.ManagerID,
1539+
InstanceCode: plan.InstanceCode,
15151540
StartTime: plan.StartTime,
15161541
EndTime: plan.EndTime,
15171542
ScheduleExecuteTime: plan.ScheduleExecuteTime,
@@ -2056,3 +2081,37 @@ func waitForExternalCheck(plan *models.ReleasePlan, systemHookSetting *commonmod
20562081

20572082
return &nextStatus, shouldWait
20582083
}
2084+
2085+
func generateInstanceCode(plan *models.ReleasePlan) (string, error) {
2086+
newPlan := new(models.ReleasePlan)
2087+
err := util.DeepCopy(newPlan, plan)
2088+
if err != nil {
2089+
err := fmt.Errorf("failed deep copy plan, err: %v", err)
2090+
log.Error(err)
2091+
return "", err
2092+
}
2093+
newPlan.UpdateTime = 0
2094+
newPlan.UpdatedBy = ""
2095+
newPlan.InstanceCode = ""
2096+
newPlan.Status = ""
2097+
newPlan.PlanningTime = 0
2098+
newPlan.ApprovalTime = 0
2099+
newPlan.ExecutingTime = 0
2100+
newPlan.SuccessTime = 0
2101+
newPlan.WaitForApproveExternalCheckTime = 0
2102+
newPlan.WaitForExecuteExternalCheckTime = 0
2103+
newPlan.WaitForAllDoneExternalCheckTime = 0
2104+
newPlan.ExternalCheckFailedReason = ""
2105+
2106+
newPlanBytes, err := bson.Marshal(newPlan)
2107+
if err != nil {
2108+
err := fmt.Errorf("failed marshal plan, err: %v", err)
2109+
log.Error(err)
2110+
return "", err
2111+
}
2112+
2113+
log.Debugf("new plan bytes: %s", string(newPlanBytes))
2114+
2115+
sum := sha256.Sum256([]byte(newPlanBytes))
2116+
return hex.EncodeToString(sum[:])[:16], nil
2117+
}

0 commit comments

Comments
 (0)