diff --git a/pkg/microservice/aslan/config/config.go b/pkg/microservice/aslan/config/config.go index be13fc484d..5671484419 100644 --- a/pkg/microservice/aslan/config/config.go +++ b/pkg/microservice/aslan/config/config.go @@ -22,10 +22,9 @@ import ( "strconv" "strings" - "github.com/spf13/viper" - configbase "github.com/koderover/zadig/v2/pkg/config" "github.com/koderover/zadig/v2/pkg/setting" + "github.com/spf13/viper" ) func DefaultIngressClass() string { @@ -246,3 +245,19 @@ func DindImage() string { func Features() string { return viper.GetString(setting.FeatureFlag) } + +func GetZadigAgentVersion() (string, error) { + version := viper.GetString(setting.ZadigAgentVersion) + if version != "" { + return strings.TrimPrefix(version, "v"), nil + } + return "", fmt.Errorf("zadig-agent version not found") +} + +func GetRepoURL() (string, error) { + url := viper.GetString(setting.ZadigAgentRepoURL) + if url != "" { + return url, nil + } + return "", fmt.Errorf("zadig-agent repo URL not found") +} diff --git a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_general_hook.go b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_general_hook.go index add7d24bd0..32bbdb1821 100644 --- a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_general_hook.go +++ b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_general_hook.go @@ -127,7 +127,14 @@ func (c *WorkflowV4GeneralHookColl) Get(ctx *internalhandler.Context, workflowNa } func (c *WorkflowV4GeneralHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) { - return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName})) + if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil { + if err.Err() == mongo.ErrNoDocuments { + return false, nil + } + return false, err.Err() + } + + return true, nil } func (c *WorkflowV4GeneralHookColl) Update(ctx *internalhandler.Context, id string, obj *models.WorkflowV4GeneralHook) error { diff --git a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_git_hook.go b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_git_hook.go index 50cf2d4e2a..8121f2ce9d 100644 --- a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_git_hook.go +++ b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_git_hook.go @@ -127,17 +127,13 @@ func (c *WorkflowV4GitHookColl) Get(ctx *internalhandler.Context, workflowName, } func (c *WorkflowV4GitHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) { - return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName})) -} - -func singleResultExists(result *mongo.SingleResult) (bool, error) { - err := result.Err() - if err == mongo.ErrNoDocuments { - return false, nil - } - if err != nil { - return false, err + if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil { + if err.Err() == mongo.ErrNoDocuments { + return false, nil + } + return false, err.Err() } + return true, nil } diff --git a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_jira_hook.go b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_jira_hook.go index 883f6fbad1..6ad4e73192 100644 --- a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_jira_hook.go +++ b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_jira_hook.go @@ -99,7 +99,14 @@ func (c *WorkflowV4JiraHookColl) Create(ctx *internalhandler.Context, obj *model } func (c *WorkflowV4JiraHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) { - return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName})) + if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil { + if err.Err() == mongo.ErrNoDocuments { + return false, nil + } + return false, err.Err() + } + + return true, nil } func (c *WorkflowV4JiraHookColl) List(ctx *internalhandler.Context, workflowName string) ([]*models.WorkflowV4JiraHook, error) { diff --git a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_meego_hook.go b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_meego_hook.go index 615dd8c8e3..c47a93e80b 100644 --- a/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_meego_hook.go +++ b/pkg/microservice/aslan/core/common/repository/mongodb/workflow_v4_meego_hook.go @@ -99,7 +99,14 @@ func (c *WorkflowV4MeegoHookColl) Create(ctx *internalhandler.Context, obj *mode } func (c *WorkflowV4MeegoHookColl) Exists(ctx *internalhandler.Context, workflowName, hookName string) (bool, error) { - return singleResultExists(c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName})) + if err := c.Collection.FindOne(ctx, bson.M{"workflow_name": workflowName, "name": hookName}); err != nil { + if err.Err() == mongo.ErrNoDocuments { + return false, nil + } + return false, err.Err() + } + + return true, nil } func (c *WorkflowV4MeegoHookColl) List(ctx *internalhandler.Context, workflowName string) ([]*models.WorkflowV4MeegoHook, error) { diff --git a/pkg/microservice/aslan/core/system/service/private_key.go b/pkg/microservice/aslan/core/system/service/private_key.go index 5e81904b59..be98723184 100644 --- a/pkg/microservice/aslan/core/system/service/private_key.go +++ b/pkg/microservice/aslan/core/system/service/private_key.go @@ -42,6 +42,10 @@ import ( func ListPrivateKeys(encryptedKey, projectName, keyword string, systemOnly bool, log *zap.SugaredLogger) ([]*commonmodels.PrivateKey, error) { var resp []*commonmodels.PrivateKey var err error + latestAgentVersion, versionErr := config.GetZadigAgentVersion() + if versionErr != nil { + log.Warnf("failed to get current zadig-agent version: %v", versionErr) + } privateKeys, err := commonrepo.NewPrivateKeyColl().List(&commonrepo.PrivateKeyArgs{ProjectName: projectName, SystemOnly: systemOnly}) if err != nil { log.Errorf("PrivateKey.List error: %s", err) @@ -70,10 +74,24 @@ func ListPrivateKeys(encryptedKey, projectName, keyword string, systemOnly bool, if err != nil { return nil, err } + if key.Agent != nil && key.ScheduleWorkflow { + key.Agent.ZadigVersion = latestAgentVersion + key.Agent.NeedUpdate = isAgentVersionOutdated(key.Agent.AgentVersion, latestAgentVersion) + } } return resp, nil } +// check agent version +func isAgentVersionOutdated(currentVersion, latestVersion string) bool { + normalizedLatestVersion := strings.TrimPrefix(latestVersion, "v") + if normalizedLatestVersion == "" { + return false + } + normalizedCurrentVersion := strings.TrimPrefix(currentVersion, "v") + return normalizedCurrentVersion != normalizedLatestVersion +} + func ListPrivateKeysInternal(log *zap.SugaredLogger) ([]*commonmodels.PrivateKey, error) { resp, err := commonrepo.NewPrivateKeyColl().List(&commonrepo.PrivateKeyArgs{}) if err != nil { diff --git a/pkg/microservice/aslan/core/vm/service/vm.go b/pkg/microservice/aslan/core/vm/service/vm.go index b010d789d4..bb333e6972 100644 --- a/pkg/microservice/aslan/core/vm/service/vm.go +++ b/pkg/microservice/aslan/core/vm/service/vm.go @@ -29,7 +29,6 @@ import ( "go.uber.org/zap" "k8s.io/apimachinery/pkg/util/sets" - commonconfig "github.com/koderover/zadig/v2/pkg/config" "github.com/koderover/zadig/v2/pkg/microservice/aslan/config" commonmodels "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models" vmmodel "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models/vm" @@ -39,8 +38,6 @@ import ( systemservice "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/system/service" "github.com/koderover/zadig/v2/pkg/setting" e "github.com/koderover/zadig/v2/pkg/tool/errors" - krkubeclient "github.com/koderover/zadig/v2/pkg/tool/kube/client" - "github.com/koderover/zadig/v2/pkg/tool/kube/getter" commonjob "github.com/koderover/zadig/v2/pkg/types/job" ) @@ -122,11 +119,11 @@ func RecoveryVM(idString, user string, logger *zap.SugaredLogger) (*RecoveryAgen func generateAgentRecoveryCmd(vm *commonmodels.PrivateKey) (*RecoveryAgentCmd, error) { cmd := new(RecoveryAgentCmd) - baseURL, err := getRepoURL() + baseURL, err := config.GetRepoURL() if err != nil { return nil, fmt.Errorf("failed to get agent repo url, err: %w", err) } - version, err := getZadigAgentVersion() + version, err := config.GetZadigAgentVersion() if err != nil { return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err) } @@ -230,11 +227,11 @@ func UpgradeAgent(idString, user string, logger *zap.SugaredLogger) (*UpgradeAge func generateAgentUpgradeCmd(vm *commonmodels.PrivateKey, logger *zap.SugaredLogger) (*UpgradeAgentCmd, error) { cmd := new(UpgradeAgentCmd) - baseURL, err := getRepoURL() + baseURL, err := config.GetRepoURL() if err != nil { return nil, fmt.Errorf("failed to get agent repo url, err: %w", err) } - version, err := getZadigAgentVersion() + version, err := config.GetZadigAgentVersion() if err != nil { return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err) } @@ -676,11 +673,11 @@ func GenerateAgentAccessCmds(vm *commonmodels.PrivateKey) (*AgentAccessCmds, err if vm.Agent != nil { token = vm.Agent.Token } - baseURL, err := getRepoURL() + baseURL, err := config.GetRepoURL() if err != nil { return nil, fmt.Errorf("failed to get agent repo url, err: %w", err) } - version, err := getZadigAgentVersion() + version, err := config.GetZadigAgentVersion() if err != nil { return nil, fmt.Errorf("failed to get zadig-agent version, error: %s", err) } @@ -755,38 +752,6 @@ func GenerateAgentAccessCmds(vm *commonmodels.PrivateKey) (*AgentAccessCmds, err return resp, nil } -func getZadigAgentVersion() (string, error) { - ns := commonconfig.Namespace() - kubeClient := krkubeclient.Client() - configMap, found, err := getter.GetConfigMap(ns, "aslan-config", kubeClient) - if err != nil || !found { - return "", fmt.Errorf("failed to get aslan configmap, error: %s", err) - } - if found { - version := configMap.Data["ZADIG_AGENT_VERSION"] - if version != "" { - return strings.TrimPrefix(version, "v"), nil - } - } - return "", fmt.Errorf("zadig-agent version not found") -} - -func getRepoURL() (string, error) { - ns := commonconfig.Namespace() - kubeClient := krkubeclient.Client() - configMap, found, err := getter.GetConfigMap(ns, "aslan-config", kubeClient) - if err != nil || !found { - return "", fmt.Errorf("failed to get aslan configmap, error: %s", err) - } - if found { - version := configMap.Data["ZADIG_AGENT_REPO_URL"] - if version != "" { - return version, nil - } - } - return "", fmt.Errorf("zadig-agent repo URL not found") -} - func DownloadTemporaryFile(fileID, token string, c *gin.Context, logger *zap.SugaredLogger) error { _, err := commonrepo.NewPrivateKeyColl().Find(commonrepo.FindPrivateKeyOption{ Token: token, diff --git a/pkg/microservice/user/core/handler/user/user.go b/pkg/microservice/user/core/handler/user/user.go index afed2a444c..c5c3cc8b71 100644 --- a/pkg/microservice/user/core/handler/user/user.go +++ b/pkg/microservice/user/core/handler/user/user.go @@ -335,10 +335,10 @@ func OpenAPIListUsersBrief(c *gin.Context) { for _, userInfo := range resp.Users { briefUserList = append(briefUserList, &types.UserBriefInfo{ LastLoginTime: userInfo.LastLoginTime, - UID: userInfo.Uid, - Account: userInfo.Account, - IdentityType: userInfo.IdentityType, - Name: userInfo.Name, + UID: userInfo.Uid, + Account: userInfo.Account, + IdentityType: userInfo.IdentityType, + Name: userInfo.Name, }) } @@ -395,10 +395,10 @@ func ListUsersBrief(c *gin.Context) { for _, userInfo := range resp.Users { briefUserList = append(briefUserList, &types.UserBriefInfo{ LastLoginTime: userInfo.LastLoginTime, - UID: userInfo.Uid, - Account: userInfo.Account, - IdentityType: userInfo.IdentityType, - Name: userInfo.Name, + UID: userInfo.Uid, + Account: userInfo.Account, + IdentityType: userInfo.IdentityType, + Name: userInfo.Name, }) } diff --git a/pkg/setting/consts.go b/pkg/setting/consts.go index bb10a7324e..5df8446a73 100644 --- a/pkg/setting/consts.go +++ b/pkg/setting/consts.go @@ -58,6 +58,8 @@ const ( ENVLarkPluginID = "LARK_PLUGIN_ID" ENVLarkPluginSecret = "LARK_PLUGIN_SECRET" ENVLarkPluginAccessTokenType = "LARK_PLUGIN_ACCESS_TOKEN_TYPE" + ZadigAgentVersion = "ZADIG_AGENT_VERSION" + ZadigAgentRepoURL = "ZADIG_AGENT_REPO_URL" ENVBuildBaseImage = "BUILD_BASE_IMAGE" diff --git a/pkg/tool/kube/containerlog/log.go b/pkg/tool/kube/containerlog/log.go index 3018d42a55..a11e2d2ecc 100644 --- a/pkg/tool/kube/containerlog/log.go +++ b/pkg/tool/kube/containerlog/log.go @@ -47,6 +47,7 @@ func GetContainerLogs(namespace, podName, containerName string, follow bool, tai if len(pod.Status.ContainerStatuses) == 0 { return fmt.Errorf("length of container statuses is 0 for pod %s in ns %s", podName, namespace) } + if pod.Status.ContainerStatuses[0].State.Terminated == nil { return fmt.Errorf("failed to get pod status' terminated message") }