Skip to content

Commit

Permalink
chore: switchover operation support new api without clusterDefinition (
Browse files Browse the repository at this point in the history
  • Loading branch information
Y-Rookie authored May 7, 2024
1 parent e209c08 commit 5f53491
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 31 deletions.
9 changes: 5 additions & 4 deletions controllers/apps/operations/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,12 @@ func initOpsDefAndValidate(reqCtx intctrlutil.RequestCtx,

// 2. validate component and componentDef
if len(opsRes.OpsDef.Spec.ComponentInfos) > 0 {
comp := opsRes.Cluster.Spec.GetComponentByName(v.ComponentName)
if comp == nil {
return intctrlutil.NewNotFound(`can not found component "%s" in cluster "%s"`, v.ComponentName, opsRes.Cluster.Name)
compObj, err := component.GetComponentByName(reqCtx, cli, constant.GenerateClusterComponentName(opsRes.Cluster.Name, v.ComponentName), opsRes.Cluster.Namespace)
if err != nil {
return err
}
compDef, err := component.GetCompDefinition(reqCtx, cli, opsRes.Cluster, v.ComponentName)
// get component definition
compDef, err := component.GetCompDefByName(reqCtx, cli, compObj.Spec.CompDef)
if err != nil {
return err
}
Expand Down
6 changes: 5 additions & 1 deletion controllers/apps/operations/custom/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,12 @@ func buildComponentEnvs(reqCtx intctrlutil.RequestCtx,
if len(opsDef.Spec.ComponentInfos) == 0 {
return nil
}
compObj, err := component.GetComponentByName(reqCtx, cli, fullCompName, cluster.Namespace)
if err != nil {
return err
}
// get component definition
compDef, err := component.GetCompDefinition(reqCtx, cli, cluster, comp.Name)
compDef, err := component.GetCompDefByName(reqCtx, cli, compObj.Spec.CompDef)
if err != nil {
return err
}
Expand Down
16 changes: 8 additions & 8 deletions controllers/apps/operations/expose.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,21 +64,21 @@ func (e ExposeOpsHandler) Action(reqCtx intctrlutil.RequestCtx, cli client.Clien

for _, expose := range exposeMap {
clusterCompSpecName := ""
clusterCompDef := ""
compDef := ""
clusterCompDefRefName := ""
if len(expose.ComponentName) > 0 {
clusterCompSpec, ok := compMap[expose.ComponentName]
if !ok {
return fmt.Errorf("component spec not found: %s", expose.ComponentName)
}
clusterCompSpecName = clusterCompSpec.Name
clusterCompDef = clusterCompSpec.ComponentDef
compDef = clusterCompSpec.ComponentDef
clusterCompDefRefName = clusterCompSpec.ComponentDefRef
}

switch expose.Switch {
case appsv1alpha1.EnableExposeSwitch:
if err := e.buildClusterServices(reqCtx, cli, opsRes.Cluster, clusterCompSpecName, clusterCompDef, clusterCompDefRefName, expose.Services); err != nil {
if err := e.buildClusterServices(reqCtx, cli, opsRes.Cluster, clusterCompSpecName, compDef, clusterCompDefRefName, expose.Services); err != nil {
return err
}
case appsv1alpha1.DisableExposeSwitch:
Expand Down Expand Up @@ -268,7 +268,7 @@ func (e ExposeOpsHandler) buildClusterServices(reqCtx intctrlutil.RequestCtx,
cli client.Client,
cluster *appsv1alpha1.Cluster,
clusterCompSpecName string,
clusterCompDefName string,
compDefName string,
clusterCompDefRefName string,
exposeServices []appsv1alpha1.OpsService) error {
if cluster == nil || len(exposeServices) == 0 {
Expand Down Expand Up @@ -327,8 +327,8 @@ func (e ExposeOpsHandler) buildClusterServices(reqCtx intctrlutil.RequestCtx,
}

defaultServicePortsFunc := func() ([]corev1.ServicePort, error) {
if clusterCompDefName != "" {
compDef, err := component.GetCompDefinition(reqCtx, cli, cluster, clusterCompSpecName)
if len(compDefName) > 0 {
compDef, err := component.GetCompDefByName(reqCtx, cli, compDefName)
if err != nil {
return nil, err
}
Expand All @@ -349,8 +349,8 @@ func (e ExposeOpsHandler) buildClusterServices(reqCtx intctrlutil.RequestCtx,
}

defaultRoleSelectorFunc := func() (string, error) {
if clusterCompDefName != "" {
compDef, err := component.GetCompDefinition(reqCtx, cli, cluster, clusterCompSpecName)
if len(compDefName) > 0 {
compDef, err := component.GetCompDefByName(reqCtx, cli, compDefName)
if err != nil {
return "", err
}
Expand Down
23 changes: 21 additions & 2 deletions controllers/apps/operations/switchover.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"

appsv1alpha1 "github.com/apecloud/kubeblocks/apis/apps/v1alpha1"
"github.com/apecloud/kubeblocks/pkg/constant"
"github.com/apecloud/kubeblocks/pkg/controller/component"
intctrlutil "github.com/apecloud/kubeblocks/pkg/controllerutil"
)
Expand Down Expand Up @@ -64,7 +65,7 @@ func (r switchoverOpsHandler) ActionStartedCondition(reqCtx intctrlutil.RequestC
switchoverMessageMap := make(map[string]SwitchoverMessage)
for _, switchover := range opsRes.OpsRequest.Spec.SwitchoverList {
compSpec := opsRes.Cluster.Spec.GetComponentByName(switchover.ComponentName)
synthesizedComp, err := component.BuildSynthesizedComponentWrapper(reqCtx, cli, opsRes.Cluster, compSpec)
synthesizedComp, err := buildSynthesizedComp(reqCtx, cli, opsRes, compSpec)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -127,7 +128,7 @@ func doSwitchoverComponents(reqCtx intctrlutil.RequestCtx, cli client.Client, op
}
for _, switchover := range switchoverList {
compSpec := opsRes.Cluster.Spec.GetComponentByName(switchover.ComponentName)
synthesizedComp, err := component.BuildSynthesizedComponentWrapper(reqCtx, cli, opsRes.Cluster, compSpec)
synthesizedComp, err := buildSynthesizedComp(reqCtx, cli, opsRes, compSpec)
if err != nil {
return err
}
Expand Down Expand Up @@ -285,3 +286,21 @@ func setComponentSwitchoverProgressDetails(recorder record.EventRecorder,
ProgressDetails: componentProcessDetails,
}
}

// buildSynthesizedComp builds synthesized component for native component or generated component.
func buildSynthesizedComp(reqCtx intctrlutil.RequestCtx, cli client.Client, opsRes *OpsResource, clusterCompSpec *appsv1alpha1.ClusterComponentSpec) (*component.SynthesizedComponent, error) {
if len(clusterCompSpec.ComponentDef) > 0 {
compObj, err := component.GetComponentByName(reqCtx, cli, constant.GenerateClusterComponentName(opsRes.Cluster.Name, clusterCompSpec.Name), opsRes.Cluster.Namespace)
if err != nil {
return nil, err
}
compDefObj, err := component.GetCompDefByName(reqCtx, cli, clusterCompSpec.ComponentDef)
if err != nil {
return nil, err
}
// build synthesized component for native component
return component.BuildSynthesizedComponent(reqCtx, cli, opsRes.Cluster, compDefObj, compObj)
}
// build synthesized component for generated component
return component.BuildSynthesizedComponentWrapper(reqCtx, cli, opsRes.Cluster, clusterCompSpec)
}
24 changes: 8 additions & 16 deletions pkg/controller/component/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,25 +216,17 @@ func getCompLabelValue(comp *appsv1alpha1.Component, label string) (string, erro
return val, nil
}

// GetComponentDefName gets the name of referenced component definition.
func GetComponentDefName(cluster *appsv1alpha1.Cluster, componentName string) string {
for _, component := range cluster.Spec.ComponentSpecs {
if componentName == component.Name {
return component.ComponentDef
}
// GetComponentByName gets the component by component full name.
func GetComponentByName(reqCtx intctrlutil.RequestCtx, cli client.Client, compFullName, namespace string) (*appsv1alpha1.Component, error) {
comp := &appsv1alpha1.Component{}
if err := cli.Get(reqCtx.Ctx, client.ObjectKey{Name: compFullName, Namespace: namespace}, comp); err != nil {
return nil, err
}
return ""
return comp, nil
}

// GetCompDefinition gets the component definition by component name.
func GetCompDefinition(reqCtx intctrlutil.RequestCtx,
cli client.Client,
cluster *appsv1alpha1.Cluster,
compName string) (*appsv1alpha1.ComponentDefinition, error) {
compDefName := GetComponentDefName(cluster, compName)
if len(compDefName) == 0 {
return nil, intctrlutil.NewNotFound(`can not found component definition by the component name "%s"`, compName)
}
// GetCompDefByName gets the component definition by component definition name.
func GetCompDefByName(reqCtx intctrlutil.RequestCtx, cli client.Client, compDefName string) (*appsv1alpha1.ComponentDefinition, error) {
compDef := &appsv1alpha1.ComponentDefinition{}
if err := cli.Get(reqCtx.Ctx, client.ObjectKey{Name: compDefName}, compDef); err != nil {
return nil, err
Expand Down

0 comments on commit 5f53491

Please sign in to comment.