diff --git a/docs/apidoc/swagger.json b/docs/apidoc/swagger.json index 568c97151..de295c40b 100644 --- a/docs/apidoc/swagger.json +++ b/docs/apidoc/swagger.json @@ -284,6 +284,12 @@ "name": "name", "in": "path", "required": true + }, + { + "type": "boolean", + "description": "force disable an addon", + "name": "force", + "in": "query" } ], "responses": { @@ -6211,8 +6217,8 @@ }, "v1.AddonStatusResponse": { "required": [ - "name", "phase", + "name", "args" ], "properties": { @@ -6359,12 +6365,12 @@ }, "v1.ApplicationDeployResponse": { "required": [ - "status", "createTime", "version", + "status", "envName", - "triggerType", - "note" + "note", + "triggerType" ], "properties": { "codeInfo": { @@ -6806,7 +6812,6 @@ "componentType", "main", "dependsOn", - "deployVersion", "createTime", "updateTime", "traits" @@ -6831,9 +6836,6 @@ "type": "string" } }, - "deployVersion": { - "type": "string" - }, "description": { "type": "string" }, @@ -7421,9 +7423,9 @@ "v1.DetailAddonResponse": { "required": [ "name", + "description", "invisible", "version", - "description", "icon", "schema", "uiSchema", @@ -7497,16 +7499,15 @@ }, "v1.DetailApplicationResponse": { "required": [ - "alias", - "project", + "name", "description", "icon", - "name", + "alias", + "project", "createTime", "updateTime", "policies", "envBindings", - "status", "applicationType", "resourceInfo" ], @@ -7557,9 +7558,6 @@ "resourceInfo": { "$ref": "#/definitions/v1.ApplicationResourceInfo" }, - "status": { - "type": "string" - }, "updateTime": { "type": "string", "format": "date-time" @@ -7568,20 +7566,20 @@ }, "v1.DetailClusterResponse": { "required": [ - "createTime", - "description", - "status", - "apiServerURL", - "updateTime", - "alias", "reason", - "name", - "icon", - "labels", - "provider", "dashboardURL", "kubeConfig", + "name", + "status", + "description", + "icon", + "createTime", + "alias", + "provider", + "apiServerURL", "kubeConfigSecret", + "updateTime", + "labels", "resourceInfo" ], "properties": { @@ -7639,14 +7637,14 @@ }, "v1.DetailComponentResponse": { "required": [ + "type", "creator", "name", - "alias", - "type", "createTime", + "alias", + "updateTime", "appPrimaryKey", "main", - "updateTime", "definition" ], "properties": { @@ -7748,13 +7746,13 @@ }, "v1.DetailPolicyResponse": { "required": [ - "name", - "type", - "description", "creator", "properties", "createTime", - "updateTime" + "updateTime", + "name", + "type", + "description" ], "properties": { "createTime": { @@ -7784,17 +7782,17 @@ }, "v1.DetailRevisionResponse": { "required": [ - "appPrimaryKey", - "version", + "createTime", "status", - "workflowName", - "updateTime", + "reason", "deployUser", + "envName", + "appPrimaryKey", + "updateTime", + "version", "note", "triggerType", - "createTime", - "envName", - "reason" + "workflowName" ], "properties": { "appPrimaryKey": { @@ -7848,8 +7846,8 @@ }, "v1.DetailTargetResponse": { "required": [ - "createTime", "updateTime", + "createTime", "name" ], "properties": { @@ -7887,11 +7885,11 @@ }, "v1.DetailUserResponse": { "required": [ + "name", "email", "disabled", "createTime", "lastLoginTime", - "name", "projects" ], "properties": { @@ -7984,12 +7982,12 @@ "required": [ "default", "envName", + "createTime", "updateTime", "name", "alias", "description", - "enable", - "createTime" + "enable" ], "properties": { "alias": { @@ -8672,11 +8670,11 @@ }, "v1.SystemInfoResponse": { "required": [ - "createTime", - "updateTime", "installID", "enableCollection", "loginType", + "createTime", + "updateTime", "systemVersion" ], "properties": { diff --git a/pkg/apiserver/model/application.go b/pkg/apiserver/model/application.go index 67812a47d..072782d86 100644 --- a/pkg/apiserver/model/application.go +++ b/pkg/apiserver/model/application.go @@ -81,6 +81,14 @@ func (a *Application) GetAppNameForSynced() string { return strings.TrimSuffix(a.Name, "-"+namespace) } +// GetAppNamespaceForSynced will return the namespace of synced CR +func (a *Application) GetAppNamespaceForSynced() string { + if a.Labels == nil { + return "" + } + return a.Labels[LabelSyncNamespace] +} + // IsSynced answer if the app is synced one func (a *Application) IsSynced() bool { if a.Labels == nil { diff --git a/pkg/apiserver/rest/apis/v1/types.go b/pkg/apiserver/rest/apis/v1/types.go index f539a2db3..5f9d51eb8 100644 --- a/pkg/apiserver/rest/apis/v1/types.go +++ b/pkg/apiserver/rest/apis/v1/types.go @@ -570,7 +570,6 @@ type DetailApplicationResponse struct { ApplicationBase Policies []string `json:"policies"` EnvBindings []string `json:"envBindings"` - Status string `json:"status"` ApplicationType string `json:"applicationType"` ResourceInfo ApplicationResourceInfo `json:"resourceInfo"` } @@ -592,7 +591,6 @@ type ComponentBase struct { Icon string `json:"icon,omitempty"` DependsOn []string `json:"dependsOn"` Creator string `json:"creator,omitempty"` - DeployVersion string `json:"deployVersion"` CreateTime time.Time `json:"createTime"` UpdateTime time.Time `json:"updateTime"` Inputs common.StepInputs `json:"inputs,omitempty"` diff --git a/pkg/apiserver/rest/usecase/application.go b/pkg/apiserver/rest/usecase/application.go index dc2b6ba2e..c5104c38d 100644 --- a/pkg/apiserver/rest/usecase/application.go +++ b/pkg/apiserver/rest/usecase/application.go @@ -294,8 +294,18 @@ func (c *applicationUsecaseImpl) GetApplicationStatus(ctx context.Context, appmo // GetApplicationCR get application CR in cluster func (c *applicationUsecaseImpl) GetApplicationCR(ctx context.Context, appModel *model.Application) (*v1beta1.ApplicationList, error) { - var apps v1beta1.ApplicationList + if appModel.IsSynced() { + var app v1beta1.Application + err := c.kubeClient.Get(ctx, types.NamespacedName{Namespace: appModel.GetAppNamespaceForSynced(), Name: appModel.GetAppNameForSynced()}, &app) + if err != nil && !apierrors.IsNotFound(err) { + return nil, err + } + if err == nil { + apps.Items = append(apps.Items, app) + return &apps, nil + } + } selector := labels.NewSelector() re, err := labels.NewRequirement(oam.AnnotationAppName, selection.Equals, []string{appModel.GetAppNameForSynced()}) if err != nil { @@ -924,12 +934,11 @@ func (c *applicationUsecaseImpl) convertRevisionModelToBase(revision *model.Appl // DeleteApplication delete application func (c *applicationUsecaseImpl) DeleteApplication(ctx context.Context, app *model.Application) error { - // TODO: check app can be deleted crs, err := c.GetApplicationCR(ctx, app) if err != nil { return err } - if len(crs.Items) > 0 || app.IsSynced() { + if len(crs.Items) > 0 { return bcode.ErrApplicationRefusedDelete } // query all components to deleted diff --git a/pkg/apiserver/rest/webservice/addon.go b/pkg/apiserver/rest/webservice/addon.go index c4e5115cf..539f0e86b 100644 --- a/pkg/apiserver/rest/webservice/addon.go +++ b/pkg/apiserver/rest/webservice/addon.go @@ -101,7 +101,7 @@ func (s *addonWebService) GetWebService() *restful.WebService { Returns(200, "OK", apis.AddonStatusResponse{}). Returns(400, "Bad Request", bcode.Bcode{}). Param(ws.PathParameter("name", "addon name to enable").DataType("string").Required(true)). - Param(ws.QueryParameter("force", "force disable an anddon").DataType("bool").Required(false)). + Param(ws.QueryParameter("force", "force disable an addon").DataType("boolean").Required(false)). Writes(apis.AddonStatusResponse{})) // update addon