Skip to content

Commit 58f4926

Browse files
authored
feat: add host agent version drift flag in privateKey list (#4589)
* feat: add host agent version drift flag in privateKey list Signed-off-by: YuTang Song <2313186065@qq.com> * delete: remove duplicate function getCurrentZadigAgentVersion Signed-off-by: YuTang Song <2313186065@qq.com> * refactor: improve config using viper package Signed-off-by: YuTang Song <2313186065@qq.com> * fix: fix the value name Signed-off-by: YuTang Song <2313186065@qq.com> * feat(user): add last login time field to user brief information Signed-off-by: YuTang Song <2313186065@qq.com> * fix(kube): add container termination state checks to prevent nil pointer panics Signed-off-by: YuTang Song <2313186065@qq.com> --------- Signed-off-by: YuTang Song <2313186065@qq.com>
1 parent cd00457 commit 58f4926

10 files changed

Lines changed: 82 additions & 64 deletions

File tree

pkg/microservice/aslan/config/config.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@ import (
2222
"strconv"
2323
"strings"
2424

25-
"github.com/spf13/viper"
26-
2725
configbase "github.com/koderover/zadig/v2/pkg/config"
2826
"github.com/koderover/zadig/v2/pkg/setting"
27+
"github.com/spf13/viper"
2928
)
3029

3130
func DefaultIngressClass() string {
@@ -246,3 +245,19 @@ func DindImage() string {
246245
func Features() string {
247246
return viper.GetString(setting.FeatureFlag)
248247
}
248+
249+
func GetZadigAgentVersion() (string, error) {
250+
version := viper.GetString(setting.ZadigAgentVersion)
251+
if version != "" {
252+
return strings.TrimPrefix(version, "v"), nil
253+
}
254+
return "", fmt.Errorf("zadig-agent version not found")
255+
}
256+
257+
func GetRepoURL() (string, error) {
258+
url := viper.GetString(setting.ZadigAgentRepoURL)
259+
if url != "" {
260+
return url, nil
261+
}
262+
return "", fmt.Errorf("zadig-agent repo URL not found")
263+
}

pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_general_hook.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,14 @@ func (c *WorkflowV4GeneralHookColl) Get(ctx *internalhandler.Context, workflowNa
127127
}
128128

129129
func (c *WorkflowV4GeneralHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) {
130-
return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}))
130+
if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil {
131+
if err.Err() == mongo.ErrNoDocuments {
132+
return false, nil
133+
}
134+
return false, err.Err()
135+
}
136+
137+
return true, nil
131138
}
132139

133140
func (c *WorkflowV4GeneralHookColl) Update(ctx *internalhandler.Context, id string, obj *models.WorkflowV4GeneralHook) error {

pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_git_hook.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,17 +127,13 @@ func (c *WorkflowV4GitHookColl) Get(ctx *internalhandler.Context, workflowName,
127127
}
128128

129129
func (c *WorkflowV4GitHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) {
130-
return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}))
131-
}
132-
133-
func singleResultExists(result *mongo.SingleResult) (bool, error) {
134-
err := result.Err()
135-
if err == mongo.ErrNoDocuments {
136-
return false, nil
137-
}
138-
if err != nil {
139-
return false, err
130+
if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil {
131+
if err.Err() == mongo.ErrNoDocuments {
132+
return false, nil
133+
}
134+
return false, err.Err()
140135
}
136+
141137
return true, nil
142138
}
143139

pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_jira_hook.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,14 @@ func (c *WorkflowV4JiraHookColl) Create(ctx *internalhandler.Context, obj *model
9999
}
100100

101101
func (c *WorkflowV4JiraHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) {
102-
return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}))
102+
if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil {
103+
if err.Err() == mongo.ErrNoDocuments {
104+
return false, nil
105+
}
106+
return false, err.Err()
107+
}
108+
109+
return true, nil
103110
}
104111

105112
func (c *WorkflowV4JiraHookColl) List(ctx *internalhandler.Context, workflowName string) ([]*models.WorkflowV4JiraHook, error) {

pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_meego_hook.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,14 @@ func (c *WorkflowV4MeegoHookColl) Create(ctx *internalhandler.Context, obj *mode
9999
}
100100

101101
func (c *WorkflowV4MeegoHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) {
102-
return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}))
102+
if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil {
103+
if err.Err() == mongo.ErrNoDocuments {
104+
return false, nil
105+
}
106+
return false, err.Err()
107+
}
108+
109+
return true, nil
103110
}
104111

105112
func (c *WorkflowV4MeegoHookColl) List(ctx *internalhandler.Context, workflowName string) ([]*models.WorkflowV4MeegoHook, error) {

pkg/microservice/aslan/core/system/service/private_key.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ import (
4242
func ListPrivateKeys(encryptedKey, projectName, keyword string, systemOnly bool, log *zap.SugaredLogger) ([]*commonmodels.PrivateKey, error) {
4343
var resp []*commonmodels.PrivateKey
4444
var err error
45+
latestAgentVersion, versionErr := config.GetZadigAgentVersion()
46+
if versionErr != nil {
47+
log.Warnf("failed to get current zadig-agent version: %v", versionErr)
48+
}
4549
privateKeys, err := commonrepo.NewPrivateKeyColl().List(&commonrepo.PrivateKeyArgs{ProjectName: projectName, SystemOnly: systemOnly})
4650
if err != nil {
4751
log.Errorf("PrivateKey.List error: %s", err)
@@ -70,10 +74,24 @@ func ListPrivateKeys(encryptedKey, projectName, keyword string, systemOnly bool,
7074
if err != nil {
7175
return nil, err
7276
}
77+
if key.Agent != nil && key.ScheduleWorkflow {
78+
key.Agent.ZadigVersion = latestAgentVersion
79+
key.Agent.NeedUpdate = isAgentVersionOutdated(key.Agent.AgentVersion, latestAgentVersion)
80+
}
7381
}
7482
return resp, nil
7583
}
7684

85+
// check agent version
86+
func isAgentVersionOutdated(currentVersion, latestVersion string) bool {
87+
normalizedLatestVersion := strings.TrimPrefix(latestVersion, "v")
88+
if normalizedLatestVersion == "" {
89+
return false
90+
}
91+
normalizedCurrentVersion := strings.TrimPrefix(currentVersion, "v")
92+
return normalizedCurrentVersion != normalizedLatestVersion
93+
}
94+
7795
func ListPrivateKeysInternal(log *zap.SugaredLogger) ([]*commonmodels.PrivateKey, error) {
7896
resp, err := commonrepo.NewPrivateKeyColl().List(&commonrepo.PrivateKeyArgs{})
7997
if err != nil {

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

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
"go.uber.org/zap"
3030
"k8s.io/apimachinery/pkg/util/sets"
3131

32-
commonconfig "github.com/koderover/zadig/v2/pkg/config"
3332
"github.com/koderover/zadig/v2/pkg/microservice/aslan/config"
3433
commonmodels "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models"
3534
vmmodel "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models/vm"
@@ -39,8 +38,6 @@ import (
3938
systemservice "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/system/service"
4039
"github.com/koderover/zadig/v2/pkg/setting"
4140
e "github.com/koderover/zadig/v2/pkg/tool/errors"
42-
krkubeclient "github.com/koderover/zadig/v2/pkg/tool/kube/client"
43-
"github.com/koderover/zadig/v2/pkg/tool/kube/getter"
4441
commonjob "github.com/koderover/zadig/v2/pkg/types/job"
4542
)
4643

@@ -122,11 +119,11 @@ func RecoveryVM(idString, user string, logger *zap.SugaredLogger) (*RecoveryAgen
122119
func generateAgentRecoveryCmd(vm *commonmodels.PrivateKey) (*RecoveryAgentCmd, error) {
123120
cmd := new(RecoveryAgentCmd)
124121

125-
baseURL, err := getRepoURL()
122+
baseURL, err := config.GetRepoURL()
126123
if err != nil {
127124
return nil, fmt.Errorf("failed to get agent repo url, err: %w", err)
128125
}
129-
version, err := getZadigAgentVersion()
126+
version, err := config.GetZadigAgentVersion()
130127
if err != nil {
131128
return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err)
132129
}
@@ -230,11 +227,11 @@ func UpgradeAgent(idString, user string, logger *zap.SugaredLogger) (*UpgradeAge
230227
func generateAgentUpgradeCmd(vm *commonmodels.PrivateKey, logger *zap.SugaredLogger) (*UpgradeAgentCmd, error) {
231228
cmd := new(UpgradeAgentCmd)
232229

233-
baseURL, err := getRepoURL()
230+
baseURL, err := config.GetRepoURL()
234231
if err != nil {
235232
return nil, fmt.Errorf("failed to get agent repo url, err: %w", err)
236233
}
237-
version, err := getZadigAgentVersion()
234+
version, err := config.GetZadigAgentVersion()
238235
if err != nil {
239236
return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err)
240237
}
@@ -676,11 +673,11 @@ func GenerateAgentAccessCmds(vm *commonmodels.PrivateKey) (*AgentAccessCmds, err
676673
if vm.Agent != nil {
677674
token = vm.Agent.Token
678675
}
679-
baseURL, err := getRepoURL()
676+
baseURL, err := config.GetRepoURL()
680677
if err != nil {
681678
return nil, fmt.Errorf("failed to get agent repo url, err: %w", err)
682679
}
683-
version, err := getZadigAgentVersion()
680+
version, err := config.GetZadigAgentVersion()
684681
if err != nil {
685682
return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err)
686683
}
@@ -755,38 +752,6 @@ func GenerateAgentAccessCmds(vm *commonmodels.PrivateKey) (*AgentAccessCmds, err
755752
return resp, nil
756753
}
757754

758-
func getZadigAgentVersion() (string, error) {
759-
ns := commonconfig.Namespace()
760-
kubeClient := krkubeclient.Client()
761-
configMap, found, err := getter.GetConfigMap(ns, "aslan-config", kubeClient)
762-
if err != nil || !found {
763-
return "", fmt.Errorf("failed to get aslan configmap, error: %s", err)
764-
}
765-
if found {
766-
version := configMap.Data["ZADIG_AGENT_VERSION"]
767-
if version != "" {
768-
return strings.TrimPrefix(version, "v"), nil
769-
}
770-
}
771-
return "", fmt.Errorf("zadig-agent version not found")
772-
}
773-
774-
func getRepoURL() (string, error) {
775-
ns := commonconfig.Namespace()
776-
kubeClient := krkubeclient.Client()
777-
configMap, found, err := getter.GetConfigMap(ns, "aslan-config", kubeClient)
778-
if err != nil || !found {
779-
return "", fmt.Errorf("failed to get aslan configmap, error: %s", err)
780-
}
781-
if found {
782-
version := configMap.Data["ZADIG_AGENT_REPO_URL"]
783-
if version != "" {
784-
return version, nil
785-
}
786-
}
787-
return "", fmt.Errorf("zadig-agent repo URL not found")
788-
}
789-
790755
func DownloadTemporaryFile(fileID, token string, c *gin.Context, logger *zap.SugaredLogger) error {
791756
_, err := commonrepo.NewPrivateKeyColl().Find(commonrepo.FindPrivateKeyOption{
792757
Token: token,

pkg/microservice/user/core/handler/user/user.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -341,10 +341,10 @@ func OpenAPIListUsersBrief(c *gin.Context) {
341341
for _, userInfo := range resp.Users {
342342
briefUserList = append(briefUserList, &types.UserBriefInfo{
343343
LastLoginTime: userInfo.LastLoginTime,
344-
UID: userInfo.Uid,
345-
Account: userInfo.Account,
346-
IdentityType: userInfo.IdentityType,
347-
Name: userInfo.Name,
344+
UID: userInfo.Uid,
345+
Account: userInfo.Account,
346+
IdentityType: userInfo.IdentityType,
347+
Name: userInfo.Name,
348348
})
349349
}
350350

@@ -401,10 +401,10 @@ func ListUsersBrief(c *gin.Context) {
401401
for _, userInfo := range resp.Users {
402402
briefUserList = append(briefUserList, &types.UserBriefInfo{
403403
LastLoginTime: userInfo.LastLoginTime,
404-
UID: userInfo.Uid,
405-
Account: userInfo.Account,
406-
IdentityType: userInfo.IdentityType,
407-
Name: userInfo.Name,
404+
UID: userInfo.Uid,
405+
Account: userInfo.Account,
406+
IdentityType: userInfo.IdentityType,
407+
Name: userInfo.Name,
408408
})
409409
}
410410

pkg/setting/consts.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ const (
5858
ENVLarkPluginID = "LARK_PLUGIN_ID"
5959
ENVLarkPluginSecret = "LARK_PLUGIN_SECRET"
6060
ENVLarkPluginAccessTokenType = "LARK_PLUGIN_ACCESS_TOKEN_TYPE"
61+
ZadigAgentVersion = "ZADIG_AGENT_VERSION"
62+
ZadigAgentRepoURL = "ZADIG_AGENT_REPO_URL"
6163

6264
ENVBuildBaseImage = "BUILD_BASE_IMAGE"
6365

pkg/tool/kube/containerlog/log.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func GetContainerLogs(namespace, podName, containerName string, follow bool, tai
4747
if len(pod.Status.ContainerStatuses) == 0 {
4848
return fmt.Errorf("length of container statuses is 0 for pod %s in ns %s", podName, namespace)
4949
}
50+
5051
if pod.Status.ContainerStatuses[0].State.Terminated == nil {
5152
return fmt.Errorf("failed to get pod status' terminated message")
5253
}

0 commit comments

Comments
 (0)