diff --git a/apis/management.cattle.io/v3/cluster_template_types.go b/apis/management.cattle.io/v3/cluster_template_types.go
index e4aeef36..f6cd135a 100644
--- a/apis/management.cattle.io/v3/cluster_template_types.go
+++ b/apis/management.cattle.io/v3/cluster_template_types.go
@@ -1,10 +1,31 @@
 package v3
 
 import (
+	"github.com/rancher/norman/condition"
 	"github.com/rancher/norman/types"
+	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
+const ClusterTemplateRevisionConditionSecretsMigrated condition.Cond = "SecretsMigrated"
+
+type ClusterTemplateRevisionConditionType string
+
+type ClusterTemplateRevisionCondition struct {
+	// Type of cluster template revision condition.
+	Type ClusterTemplateRevisionConditionType `json:"type"`
+	// Status of the condition, one of True, False, Unknown.
+	Status v1.ConditionStatus `json:"status"`
+	// The last time this condition was updated.
+	LastUpdateTime string `json:"lastUpdateTime,omitempty"`
+	// Last time the condition transitioned from one status to another.
+	LastTransitionTime string `json:"lastTransitionTime,omitempty"`
+	// The reason for the condition's last transition.
+	Reason string `json:"reason,omitempty"`
+	// Human-readable message indicating details about last transition
+	Message string `json:"message,omitempty"`
+}
+
 type ClusterTemplate struct {
 	types.Namespaced
 
@@ -33,7 +54,8 @@ type ClusterTemplateRevision struct {
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	// Specification of the desired behavior of the the cluster. More info:
 	// https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status
-	Spec ClusterTemplateRevisionSpec `json:"spec"`
+	Spec   ClusterTemplateRevisionSpec   `json:"spec"`
+	Status ClusterTemplateRevisionStatus `json:"status"`
 }
 
 type ClusterTemplateRevisionSpec struct {
@@ -45,6 +67,18 @@ type ClusterTemplateRevisionSpec struct {
 	ClusterConfig *ClusterSpecBase `json:"clusterConfig" norman:"required"`
 }
 
+type ClusterTemplateRevisionStatus struct {
+	PrivateRegistrySecret string                             `json:"privateRegistrySecret,omitempty" norman:"nocreate,noupdate"`
+	S3CredentialSecret    string                             `json:"s3CredentialSecret,omitempty" norman:"nocreate,noupdate"`
+	WeavePasswordSecret   string                             `json:"weavePasswordSecret,omitempty" norman:"nocreate,noupdate"`
+	VsphereSecret         string                             `json:"vsphereSecret,omitempty" norman:"nocreate,noupdate"`
+	VirtualCenterSecret   string                             `json:"virtualCenterSecret,omitempty" norman:"nocreate,noupdate"`
+	OpenStackSecret       string                             `json:"openStackSecret,omitempty" norman:"nocreate,noupdate"`
+	AADClientSecret       string                             `json:"aadClientSecret,omitempty" norman:"nocreate,noupdate"`
+	AADClientCertSecret   string                             `json:"aadClientCertSecret,omitempty" norman:"nocreate,noupdate"`
+	Conditions            []ClusterTemplateRevisionCondition `json:"conditions,omitempty"`
+}
+
 type ClusterTemplateQuestionsOutput struct {
 	Questions []Question `json:"questions,omitempty"`
 }
diff --git a/apis/management.cattle.io/v3/schema/schema.go b/apis/management.cattle.io/v3/schema/schema.go
index 82cfafc5..7e60bc4e 100644
--- a/apis/management.cattle.io/v3/schema/schema.go
+++ b/apis/management.cattle.io/v3/schema/schema.go
@@ -907,7 +907,10 @@ func clusterTemplateTypes(schemas *types.Schemas) *types.Schemas {
 		TypeName("clusterTemplate", v3.ClusterTemplate{}).
 		TypeName("clusterTemplateRevision", v3.ClusterTemplateRevision{}).
 		AddMapperForType(&Version, v3.ClusterTemplate{}, m.Drop{Field: "namespaceId"}, m.DisplayName{}).
-		AddMapperForType(&Version, v3.ClusterTemplateRevision{}, m.Drop{Field: "namespaceId"}, m.DisplayName{}).
+		AddMapperForType(&Version, v3.ClusterTemplateRevision{},
+			m.Drop{Field: "namespaceId"},
+			&m.Embed{Field: "status"},
+			m.DisplayName{}).
 		MustImport(&Version, v3.ClusterTemplateQuestionsOutput{}).
 		MustImport(&Version, v3.ClusterTemplate{}).
 		MustImportAndCustomize(&Version, v3.ClusterTemplateRevision{}, func(schema *types.Schema) {
diff --git a/apis/management.cattle.io/v3/zz_generated_deepcopy.go b/apis/management.cattle.io/v3/zz_generated_deepcopy.go
index 71a661f6..71509947 100644
--- a/apis/management.cattle.io/v3/zz_generated_deepcopy.go
+++ b/apis/management.cattle.io/v3/zz_generated_deepcopy.go
@@ -2517,6 +2517,7 @@ func (in *ClusterTemplateRevision) DeepCopyInto(out *ClusterTemplateRevision) {
 	out.TypeMeta = in.TypeMeta
 	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
 	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
 	return
 }
 
@@ -2538,6 +2539,22 @@ func (in *ClusterTemplateRevision) DeepCopyObject() runtime.Object {
 	return nil
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterTemplateRevisionCondition) DeepCopyInto(out *ClusterTemplateRevisionCondition) {
+	*out = *in
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTemplateRevisionCondition.
+func (in *ClusterTemplateRevisionCondition) DeepCopy() *ClusterTemplateRevisionCondition {
+	if in == nil {
+		return nil
+	}
+	out := new(ClusterTemplateRevisionCondition)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *ClusterTemplateRevisionList) DeepCopyInto(out *ClusterTemplateRevisionList) {
 	*out = *in
@@ -2604,6 +2621,27 @@ func (in *ClusterTemplateRevisionSpec) DeepCopy() *ClusterTemplateRevisionSpec {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterTemplateRevisionStatus) DeepCopyInto(out *ClusterTemplateRevisionStatus) {
+	*out = *in
+	if in.Conditions != nil {
+		in, out := &in.Conditions, &out.Conditions
+		*out = make([]ClusterTemplateRevisionCondition, len(*in))
+		copy(*out, *in)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTemplateRevisionStatus.
+func (in *ClusterTemplateRevisionStatus) DeepCopy() *ClusterTemplateRevisionStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(ClusterTemplateRevisionStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *ClusterTemplateSpec) DeepCopyInto(out *ClusterTemplateSpec) {
 	*out = *in
diff --git a/client/management/v3/zz_generated_cluster_template_revision.go b/client/management/v3/zz_generated_cluster_template_revision.go
index 29a4a207..87459b4c 100644
--- a/client/management/v3/zz_generated_cluster_template_revision.go
+++ b/client/management/v3/zz_generated_cluster_template_revision.go
@@ -5,35 +5,59 @@ import (
 )
 
 const (
-	ClusterTemplateRevisionType                   = "clusterTemplateRevision"
-	ClusterTemplateRevisionFieldAnnotations       = "annotations"
-	ClusterTemplateRevisionFieldClusterConfig     = "clusterConfig"
-	ClusterTemplateRevisionFieldClusterTemplateID = "clusterTemplateId"
-	ClusterTemplateRevisionFieldCreated           = "created"
-	ClusterTemplateRevisionFieldCreatorID         = "creatorId"
-	ClusterTemplateRevisionFieldEnabled           = "enabled"
-	ClusterTemplateRevisionFieldLabels            = "labels"
-	ClusterTemplateRevisionFieldName              = "name"
-	ClusterTemplateRevisionFieldOwnerReferences   = "ownerReferences"
-	ClusterTemplateRevisionFieldQuestions         = "questions"
-	ClusterTemplateRevisionFieldRemoved           = "removed"
-	ClusterTemplateRevisionFieldUUID              = "uuid"
+	ClusterTemplateRevisionType                       = "clusterTemplateRevision"
+	ClusterTemplateRevisionFieldAADClientCertSecret   = "aadClientCertSecret"
+	ClusterTemplateRevisionFieldAADClientSecret       = "aadClientSecret"
+	ClusterTemplateRevisionFieldAnnotations           = "annotations"
+	ClusterTemplateRevisionFieldClusterConfig         = "clusterConfig"
+	ClusterTemplateRevisionFieldClusterTemplateID     = "clusterTemplateId"
+	ClusterTemplateRevisionFieldConditions            = "conditions"
+	ClusterTemplateRevisionFieldCreated               = "created"
+	ClusterTemplateRevisionFieldCreatorID             = "creatorId"
+	ClusterTemplateRevisionFieldEnabled               = "enabled"
+	ClusterTemplateRevisionFieldLabels                = "labels"
+	ClusterTemplateRevisionFieldName                  = "name"
+	ClusterTemplateRevisionFieldOpenStackSecret       = "openStackSecret"
+	ClusterTemplateRevisionFieldOwnerReferences       = "ownerReferences"
+	ClusterTemplateRevisionFieldPrivateRegistrySecret = "privateRegistrySecret"
+	ClusterTemplateRevisionFieldQuestions             = "questions"
+	ClusterTemplateRevisionFieldRemoved               = "removed"
+	ClusterTemplateRevisionFieldS3CredentialSecret    = "s3CredentialSecret"
+	ClusterTemplateRevisionFieldState                 = "state"
+	ClusterTemplateRevisionFieldTransitioning         = "transitioning"
+	ClusterTemplateRevisionFieldTransitioningMessage  = "transitioningMessage"
+	ClusterTemplateRevisionFieldUUID                  = "uuid"
+	ClusterTemplateRevisionFieldVirtualCenterSecret   = "virtualCenterSecret"
+	ClusterTemplateRevisionFieldVsphereSecret         = "vsphereSecret"
+	ClusterTemplateRevisionFieldWeavePasswordSecret   = "weavePasswordSecret"
 )
 
 type ClusterTemplateRevision struct {
 	types.Resource
-	Annotations       map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
-	ClusterConfig     *ClusterSpecBase  `json:"clusterConfig,omitempty" yaml:"clusterConfig,omitempty"`
-	ClusterTemplateID string            `json:"clusterTemplateId,omitempty" yaml:"clusterTemplateId,omitempty"`
-	Created           string            `json:"created,omitempty" yaml:"created,omitempty"`
-	CreatorID         string            `json:"creatorId,omitempty" yaml:"creatorId,omitempty"`
-	Enabled           *bool             `json:"enabled,omitempty" yaml:"enabled,omitempty"`
-	Labels            map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
-	Name              string            `json:"name,omitempty" yaml:"name,omitempty"`
-	OwnerReferences   []OwnerReference  `json:"ownerReferences,omitempty" yaml:"ownerReferences,omitempty"`
-	Questions         []Question        `json:"questions,omitempty" yaml:"questions,omitempty"`
-	Removed           string            `json:"removed,omitempty" yaml:"removed,omitempty"`
-	UUID              string            `json:"uuid,omitempty" yaml:"uuid,omitempty"`
+	AADClientCertSecret   string                             `json:"aadClientCertSecret,omitempty" yaml:"aadClientCertSecret,omitempty"`
+	AADClientSecret       string                             `json:"aadClientSecret,omitempty" yaml:"aadClientSecret,omitempty"`
+	Annotations           map[string]string                  `json:"annotations,omitempty" yaml:"annotations,omitempty"`
+	ClusterConfig         *ClusterSpecBase                   `json:"clusterConfig,omitempty" yaml:"clusterConfig,omitempty"`
+	ClusterTemplateID     string                             `json:"clusterTemplateId,omitempty" yaml:"clusterTemplateId,omitempty"`
+	Conditions            []ClusterTemplateRevisionCondition `json:"conditions,omitempty" yaml:"conditions,omitempty"`
+	Created               string                             `json:"created,omitempty" yaml:"created,omitempty"`
+	CreatorID             string                             `json:"creatorId,omitempty" yaml:"creatorId,omitempty"`
+	Enabled               *bool                              `json:"enabled,omitempty" yaml:"enabled,omitempty"`
+	Labels                map[string]string                  `json:"labels,omitempty" yaml:"labels,omitempty"`
+	Name                  string                             `json:"name,omitempty" yaml:"name,omitempty"`
+	OpenStackSecret       string                             `json:"openStackSecret,omitempty" yaml:"openStackSecret,omitempty"`
+	OwnerReferences       []OwnerReference                   `json:"ownerReferences,omitempty" yaml:"ownerReferences,omitempty"`
+	PrivateRegistrySecret string                             `json:"privateRegistrySecret,omitempty" yaml:"privateRegistrySecret,omitempty"`
+	Questions             []Question                         `json:"questions,omitempty" yaml:"questions,omitempty"`
+	Removed               string                             `json:"removed,omitempty" yaml:"removed,omitempty"`
+	S3CredentialSecret    string                             `json:"s3CredentialSecret,omitempty" yaml:"s3CredentialSecret,omitempty"`
+	State                 string                             `json:"state,omitempty" yaml:"state,omitempty"`
+	Transitioning         string                             `json:"transitioning,omitempty" yaml:"transitioning,omitempty"`
+	TransitioningMessage  string                             `json:"transitioningMessage,omitempty" yaml:"transitioningMessage,omitempty"`
+	UUID                  string                             `json:"uuid,omitempty" yaml:"uuid,omitempty"`
+	VirtualCenterSecret   string                             `json:"virtualCenterSecret,omitempty" yaml:"virtualCenterSecret,omitempty"`
+	VsphereSecret         string                             `json:"vsphereSecret,omitempty" yaml:"vsphereSecret,omitempty"`
+	WeavePasswordSecret   string                             `json:"weavePasswordSecret,omitempty" yaml:"weavePasswordSecret,omitempty"`
 }
 
 type ClusterTemplateRevisionCollection struct {
diff --git a/client/management/v3/zz_generated_cluster_template_revision_condition.go b/client/management/v3/zz_generated_cluster_template_revision_condition.go
new file mode 100644
index 00000000..114d52be
--- /dev/null
+++ b/client/management/v3/zz_generated_cluster_template_revision_condition.go
@@ -0,0 +1,20 @@
+package client
+
+const (
+	ClusterTemplateRevisionConditionType                    = "clusterTemplateRevisionCondition"
+	ClusterTemplateRevisionConditionFieldLastTransitionTime = "lastTransitionTime"
+	ClusterTemplateRevisionConditionFieldLastUpdateTime     = "lastUpdateTime"
+	ClusterTemplateRevisionConditionFieldMessage            = "message"
+	ClusterTemplateRevisionConditionFieldReason             = "reason"
+	ClusterTemplateRevisionConditionFieldStatus             = "status"
+	ClusterTemplateRevisionConditionFieldType               = "type"
+)
+
+type ClusterTemplateRevisionCondition struct {
+	LastTransitionTime string `json:"lastTransitionTime,omitempty" yaml:"lastTransitionTime,omitempty"`
+	LastUpdateTime     string `json:"lastUpdateTime,omitempty" yaml:"lastUpdateTime,omitempty"`
+	Message            string `json:"message,omitempty" yaml:"message,omitempty"`
+	Reason             string `json:"reason,omitempty" yaml:"reason,omitempty"`
+	Status             string `json:"status,omitempty" yaml:"status,omitempty"`
+	Type               string `json:"type,omitempty" yaml:"type,omitempty"`
+}
diff --git a/client/management/v3/zz_generated_cluster_template_revision_status.go b/client/management/v3/zz_generated_cluster_template_revision_status.go
new file mode 100644
index 00000000..46abe3e8
--- /dev/null
+++ b/client/management/v3/zz_generated_cluster_template_revision_status.go
@@ -0,0 +1,26 @@
+package client
+
+const (
+	ClusterTemplateRevisionStatusType                       = "clusterTemplateRevisionStatus"
+	ClusterTemplateRevisionStatusFieldAADClientCertSecret   = "aadClientCertSecret"
+	ClusterTemplateRevisionStatusFieldAADClientSecret       = "aadClientSecret"
+	ClusterTemplateRevisionStatusFieldConditions            = "conditions"
+	ClusterTemplateRevisionStatusFieldOpenStackSecret       = "openStackSecret"
+	ClusterTemplateRevisionStatusFieldPrivateRegistrySecret = "privateRegistrySecret"
+	ClusterTemplateRevisionStatusFieldS3CredentialSecret    = "s3CredentialSecret"
+	ClusterTemplateRevisionStatusFieldVirtualCenterSecret   = "virtualCenterSecret"
+	ClusterTemplateRevisionStatusFieldVsphereSecret         = "vsphereSecret"
+	ClusterTemplateRevisionStatusFieldWeavePasswordSecret   = "weavePasswordSecret"
+)
+
+type ClusterTemplateRevisionStatus struct {
+	AADClientCertSecret   string                             `json:"aadClientCertSecret,omitempty" yaml:"aadClientCertSecret,omitempty"`
+	AADClientSecret       string                             `json:"aadClientSecret,omitempty" yaml:"aadClientSecret,omitempty"`
+	Conditions            []ClusterTemplateRevisionCondition `json:"conditions,omitempty" yaml:"conditions,omitempty"`
+	OpenStackSecret       string                             `json:"openStackSecret,omitempty" yaml:"openStackSecret,omitempty"`
+	PrivateRegistrySecret string                             `json:"privateRegistrySecret,omitempty" yaml:"privateRegistrySecret,omitempty"`
+	S3CredentialSecret    string                             `json:"s3CredentialSecret,omitempty" yaml:"s3CredentialSecret,omitempty"`
+	VirtualCenterSecret   string                             `json:"virtualCenterSecret,omitempty" yaml:"virtualCenterSecret,omitempty"`
+	VsphereSecret         string                             `json:"vsphereSecret,omitempty" yaml:"vsphereSecret,omitempty"`
+	WeavePasswordSecret   string                             `json:"weavePasswordSecret,omitempty" yaml:"weavePasswordSecret,omitempty"`
+}