From 167329b41c1d64eeaae67a606383c0cedf13bf2b Mon Sep 17 00:00:00 2001 From: kinarashah Date: Wed, 2 Jan 2019 10:42:59 -0800 Subject: [PATCH] add new fields and action to multi cluster app --- .../v3/multi_cluster_app.go | 42 ++++++++++++++++--- apis/management.cattle.io/v3/schema/schema.go | 13 +++++- apis/project.cattle.io/v3/app_types.go | 1 + status/status.go | 1 + 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/apis/management.cattle.io/v3/multi_cluster_app.go b/apis/management.cattle.io/v3/multi_cluster_app.go index 60462668..039a45e6 100644 --- a/apis/management.cattle.io/v3/multi_cluster_app.go +++ b/apis/management.cattle.io/v3/multi_cluster_app.go @@ -1,10 +1,17 @@ package v3 import ( + "github.com/rancher/norman/condition" "github.com/rancher/norman/types" + "github.com/rancher/types/apis/project.cattle.io/v3" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +var ( + MultiClusterAppConditionInstalled condition.Cond = "Installed" + MultiClusterAppConditionDeployed condition.Cond = "Deployed" +) + type MultiClusterApp struct { types.Namespaced metav1.TypeMeta `json:",inline"` @@ -19,14 +26,17 @@ type MultiClusterApp struct { } type MultiClusterAppSpec struct { - TemplateVersionName string `json:"templateVersionName,omitempty" norman:"type=reference[templateVersion],required"` - Answers []Answer `json:"answers,omitempty"` - Targets []Target `json:"targets,omitempty" norman:"required"` - Members []Member `json:"members,omitempty"` + TemplateVersionName string `json:"templateVersionName,omitempty" norman:"type=reference[templateVersion],required"` + Answers []Answer `json:"answers,omitempty"` + Targets []Target `json:"targets,omitempty" norman:"required"` + Members []Member `json:"members,omitempty"` + RevisionHistoryLimit int `json:"revisionHistoryLimit,omitempty" norman:"default=10"` + UpgradeStrategy UpgradeStrategy `json:"upgradeStrategy,omitempty"` } type MultiClusterAppStatus struct { - Healthstate string `json:"healthState,omitempty"` + Conditions []v3.AppCondition `json:"conditions,omitempty"` + RevisionName string `json:"revisionName,omitempty" norman:"type=reference[multiClusterAppRevision],required"` } type Target struct { @@ -48,3 +58,25 @@ type Member struct { GroupPrincipalName string `json:"groupPrincipalName,omitempty" norman:"type=reference[principal]"` AccessType string `json:"accessType,omitempty" norman:"type=enum,options=all|readonly|update"` } + +type UpgradeStrategy struct { + RollingUpdate *RollingUpdate `json:"rollingUpdate,omitempty"` +} + +type RollingUpdate struct { + BatchSize int `json:"batchSize,omitempty"` + Interval int `json:"interval,omitempty"` +} + +type MultiClusterAppRevision struct { + types.Namespaced + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + TemplateVersionName string `json:"templateVersionName,omitempty" norman:"type=reference[templateVersion]"` + Answers []Answer `json:"answers,omitempty"` +} + +type MultiClusterAppRollbackInput struct { + RevisionName string `json:"revisionName,omitempty" norman:"type=reference[multiClusterAppRevision]"` +} diff --git a/apis/management.cattle.io/v3/schema/schema.go b/apis/management.cattle.io/v3/schema/schema.go index 6e7ea082..9dfefe0a 100644 --- a/apis/management.cattle.io/v3/schema/schema.go +++ b/apis/management.cattle.io/v3/schema/schema.go @@ -620,9 +620,20 @@ func clusterCatalogTypes(schemas *types.Schemas) *types.Schemas { func multiClusterAppTypes(schemas *types.Schemas) *types.Schemas { return schemas. AddMapperForType(&Version, v3.MultiClusterApp{}, m.Drop{Field: "namespaceId"}). + AddMapperForType(&Version, v3.MultiClusterAppRevision{}, m.Drop{Field: "namespaceId"}). AddMapperForType(&Version, v3.Member{}, m.Drop{Field: "userName"}, m.Drop{Field: "displayName"}). MustImport(&Version, v3.MultiClusterApp{}). - MustImport(&Version, v3.Target{}) + MustImport(&Version, v3.Target{}). + MustImport(&Version, v3.UpgradeStrategy{}). + MustImport(&Version, v3.MultiClusterAppRollbackInput{}). + MustImport(&Version, v3.MultiClusterAppRevision{}). + MustImportAndCustomize(&Version, v3.MultiClusterApp{}, func(schema *types.Schema) { + schema.ResourceActions = map[string]types.Action{ + "rollback": { + Input: "multiClusterAppRollbackInput", + }, + } + }) } func globalDNSTypes(schemas *types.Schemas) *types.Schemas { diff --git a/apis/project.cattle.io/v3/app_types.go b/apis/project.cattle.io/v3/app_types.go index 025e8262..40aa84cd 100644 --- a/apis/project.cattle.io/v3/app_types.go +++ b/apis/project.cattle.io/v3/app_types.go @@ -31,6 +31,7 @@ type AppSpec struct { var ( AppConditionInstalled condition.Cond = "Installed" AppConditionMigrated condition.Cond = "Migrated" + AppConditionDeployed condition.Cond = "Deployed" ) type AppStatus struct { diff --git a/status/status.go b/status/status.go index 465f38a8..c60610f0 100644 --- a/status/status.go +++ b/status/status.go @@ -40,6 +40,7 @@ var transitioningMap = map[string]string{ "DefaultNetworkPolicyCreated": "configuring", "DefaultProjectCreated": "configuring", "DockerProvisioned": "provisioning", + "Deployed": "deploying", "Drained": "draining", "Downloaded": "downloading", "etcd": "provisioning",