Skip to content

Commit

Permalink
refactor with master branch
Browse files Browse the repository at this point in the history
  • Loading branch information
seshachalam-yv committed Mar 13, 2023
1 parent 5bc1907 commit b618c53
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 56 deletions.
5 changes: 5 additions & 0 deletions api/v1alpha1/types_etcd.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,3 +449,8 @@ func (e *Etcd) GetDeltaSnapshotLeaseName() string {
func (e *Etcd) GetFullSnapshotLeaseName() string {
return fmt.Sprintf("%s-full-snap", e.Name)
}

// GetRoleName returns the role name for the Etcd
func (e *Etcd) GetRoleName() string {
return fmt.Sprintf("druid.gardener.cloud:etcd:%s", e.Name)
}
44 changes: 10 additions & 34 deletions controllers/etcd/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
componentconfigmap "github.com/gardener/etcd-druid/pkg/component/etcd/configmap"
componentlease "github.com/gardener/etcd-druid/pkg/component/etcd/lease"
componentpdb "github.com/gardener/etcd-druid/pkg/component/etcd/poddisruptionbudget"
componentrole "github.com/gardener/etcd-druid/pkg/component/etcd/role"
componentservice "github.com/gardener/etcd-druid/pkg/component/etcd/service"
componentsts "github.com/gardener/etcd-druid/pkg/component/etcd/statefulset"
druidutils "github.com/gardener/etcd-druid/pkg/utils"
Expand Down Expand Up @@ -262,6 +263,13 @@ func (r *Reconciler) delete(ctx context.Context, etcd *druidv1alpha1.Etcd) (ctrl
}, err
}

roleDeployer := componentrole.New(r.Client, componentrole.GenerateValues(etcd))
if err := roleDeployer.Destroy(ctx); err != nil {
return ctrl.Result{
Requeue: true,
}, err
}

if sets.NewString(etcd.Finalizers...).Has(common.FinalizerName) {
logger.Info("Removing finalizer")
if err := controllerutils.RemoveFinalizers(ctx, r.Client, etcd, common.FinalizerName); client.IgnoreNotFound(err) != nil {
Expand Down Expand Up @@ -319,39 +327,6 @@ func (r *Reconciler) reconcileServiceAccount(ctx context.Context, logger logr.Lo
return r.Patch(ctx, saObjCopy, client.MergeFrom(saObj))
}

func (r *Reconciler) reconcileRole(ctx context.Context, logger logr.Logger, etcd *druidv1alpha1.Etcd, values map[string]interface{}) error {
logger.Info("Reconciling role")
var err error

decoded, err := r.chart.decodeRole(etcd.Name, etcd.Namespace, values)
if err != nil {
return err
}

roleObj := &rbac.Role{}
key := client.ObjectKeyFromObject(decoded)
if err := r.Get(ctx, key, roleObj); err != nil {
if !apierrors.IsNotFound(err) {
return err
}
if err := r.Create(ctx, decoded); err != nil {
return err
}
logger.Info("Creating role", "role", kutil.Key(decoded.Namespace, decoded.Name).String())
return nil
}

if !reflect.DeepEqual(decoded.Rules, roleObj.Rules) {
roleObjCopy := roleObj.DeepCopy()
roleObjCopy.Rules = decoded.Rules
if err := r.Patch(ctx, roleObjCopy, client.MergeFrom(roleObj)); err != nil {
return err
}
}

return nil
}

func (r *Reconciler) reconcileRoleBinding(ctx context.Context, logger logr.Logger, etcd *druidv1alpha1.Etcd, values map[string]interface{}) error {
logger.Info("Reconciling rolebinding")
var err error
Expand Down Expand Up @@ -437,7 +412,8 @@ func (r *Reconciler) reconcileEtcd(ctx context.Context, logger logr.Logger, etcd
return reconcileResult{err: err}
}

err = r.reconcileRole(ctx, logger, etcd, values)
roleDeployer := componentrole.New(r.Client, componentrole.GenerateValues(etcd))
err = roleDeployer.Deploy(ctx)
if err != nil {
return reconcileResult{err: err}
}
Expand Down
7 changes: 5 additions & 2 deletions pkg/component/etcd/role/value_helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package role_test
import (
"github.com/gardener/etcd-druid/api/v1alpha1"
"github.com/gardener/etcd-druid/pkg/component/etcd/role"
"github.com/gardener/etcd-druid/pkg/utils"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -27,6 +26,10 @@ import (
var _ = Describe("Role", func() {
var (
etcd = &v1alpha1.Etcd{
TypeMeta: metav1.TypeMeta{
APIVersion: v1alpha1.GroupVersion.String(),
Kind: "Etcd",
},
ObjectMeta: metav1.ObjectMeta{
Name: "etcd-name",
Namespace: "etcd-namespace",
Expand All @@ -40,7 +43,7 @@ var _ = Describe("Role", func() {
},
}
expected = &role.Values{
Name: utils.GetRoleName(etcd),
Name: etcd.GetRoleName(),
Namespace: etcd.Namespace,
Labels: map[string]string{
"key1": "value1",
Expand Down
1 change: 1 addition & 0 deletions pkg/component/etcd/role/values.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package role

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

// Values defines the fields used to create a Role for Etcd.
type Values struct {
// Name is the name of the Role.
Name string
Expand Down
19 changes: 15 additions & 4 deletions pkg/component/etcd/role/values_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,26 @@ package role
import (
druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1"
"github.com/gardener/etcd-druid/pkg/utils"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
)

// GenerateValues generates `role.Values` for the role component with the given `etcd` object.
func GenerateValues(etcd *druidv1alpha1.Etcd) *Values {
return &Values{
Name: utils.GetRoleName(etcd),
Namespace: etcd.Namespace,
Labels: utils.MergeStringMaps(getDefaultLabels(etcd.Name), etcd.Spec.Labels),
OwnerReferences: utils.GenerateEtcdOwnerReference(etcd),
Name: etcd.GetRoleName(),
Namespace: etcd.Namespace,
Labels: utils.MergeStringMaps(getDefaultLabels(etcd.Name), etcd.Spec.Labels),
OwnerReferences: []metav1.OwnerReference{
{
APIVersion: druidv1alpha1.GroupVersion.String(),
Kind: etcd.Kind,
Name: etcd.Name,
UID: etcd.UID,
Controller: pointer.Bool(true),
BlockOwnerDeletion: pointer.Bool(true),
},
},
}
}

Expand Down
15 changes: 0 additions & 15 deletions pkg/utils/miscellaneous.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package utils
import (
"fmt"

"k8s.io/utils/pointer"
"sigs.k8s.io/controller-runtime/pkg/client"
)

Expand Down Expand Up @@ -78,17 +77,3 @@ func Max(x, y int) int {
}
return x
}

// GenerateEtcdOwnerReference generates an OwnerReference for an etcd object that can be used to set it as the owner of other objects.
func GenerateEtcdOwnerReference(etcd *druidv1alpha1.Etcd) []metav1.OwnerReference {
return []metav1.OwnerReference{
{
APIVersion: druidv1alpha1.GroupVersion.String(),
Kind: etcd.Kind,
Name: etcd.Name,
UID: etcd.UID,
Controller: pointer.Bool(true),
BlockOwnerDeletion: pointer.Bool(true),
},
}
}
2 changes: 1 addition & 1 deletion test/integration/controllers/etcd/reconciler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ var _ = Describe("Multinode ETCD", func() {
func validateRole(instance *druidv1alpha1.Etcd, role *rbac.Role) {
Expect(*role).To(MatchFields(IgnoreExtras, Fields{
"ObjectMeta": MatchFields(IgnoreExtras, Fields{
"Name": Equal(utils.GetRoleName(instance)),
"Name": Equal(instance.GetRoleName()),
"Namespace": Equal(instance.Namespace),
"Labels": MatchKeys(IgnoreExtras, Keys{
"name": Equal("etcd"),
Expand Down

0 comments on commit b618c53

Please sign in to comment.