Skip to content

Commit

Permalink
Apply same code format for all resources (#427)
Browse files Browse the repository at this point in the history
This commit is a simple copy and paste such that all resources have the same
code format in the form of:

type Builder struct
Build()
Update()
private methods
  • Loading branch information
ansd committed Oct 28, 2020
1 parent 7fdb23c commit 6fc47e6
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 115 deletions.
10 changes: 5 additions & 5 deletions internal/resource/client_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,18 @@ import (
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

type ClientServiceBuilder struct {
Instance *rabbitmqv1beta1.RabbitmqCluster
Scheme *runtime.Scheme
}

func (builder *RabbitmqResourceBuilder) ClientService() *ClientServiceBuilder {
return &ClientServiceBuilder{
Instance: builder.Instance,
Scheme: builder.Scheme,
}
}

type ClientServiceBuilder struct {
Instance *rabbitmqv1beta1.RabbitmqCluster
Scheme *runtime.Scheme
}

func (builder *ClientServiceBuilder) Build() (runtime.Object, error) {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Expand Down
18 changes: 9 additions & 9 deletions internal/resource/configmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ func (builder *RabbitmqResourceBuilder) ServerConfigMap() *ServerConfigMapBuilde
}
}

func (builder *ServerConfigMapBuilder) Build() (runtime.Object, error) {
return &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: builder.Instance.ChildResourceName(ServerConfigMapName),
Namespace: builder.Instance.Namespace,
},
}, nil
}

func (builder *ServerConfigMapBuilder) Update(object runtime.Object) error {
configMap := object.(*corev1.ConfigMap)
configMap.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
Expand Down Expand Up @@ -115,15 +124,6 @@ func (builder *ServerConfigMapBuilder) Update(object runtime.Object) error {
return nil
}

func (builder *ServerConfigMapBuilder) Build() (runtime.Object, error) {
return &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: builder.Instance.ChildResourceName(ServerConfigMapName),
Namespace: builder.Instance.Namespace,
},
}, nil
}

func updateProperty(configMapData map[string]string, key string, value string) {
if value == "" {
delete(configMapData, key)
Expand Down
83 changes: 42 additions & 41 deletions internal/resource/rabbitmq_plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package resource

import (
"fmt"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"strings"

"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
"github.com/rabbitmq/cluster-operator/internal/metadata"
corev1 "k8s.io/api/core/v1"
Expand All @@ -20,16 +21,51 @@ var requiredPlugins = []string{

const PluginsConfigName = "plugins-conf"

type RabbitmqPlugins struct {
requiredPlugins []string
additionalPlugins []string
}

type RabbitmqPluginsConfigMapBuilder struct {
Instance *rabbitmqv1beta1.RabbitmqCluster
Scheme *runtime.Scheme
}

func (builder *RabbitmqResourceBuilder) RabbitmqPluginsConfigMap() *RabbitmqPluginsConfigMapBuilder {
return &RabbitmqPluginsConfigMapBuilder{
Instance: builder.Instance,
Scheme: builder.Scheme,
}
}

func (builder *RabbitmqPluginsConfigMapBuilder) Build() (runtime.Object, error) {
return &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: builder.Instance.ChildResourceName(PluginsConfigName),
Namespace: builder.Instance.Namespace,
},
Data: map[string]string{
"enabled_plugins": desiredPluginsAsString([]rabbitmqv1beta1.Plugin{}),
},
}, nil
}

func (builder *RabbitmqPluginsConfigMapBuilder) Update(object runtime.Object) error {
configMap := object.(*corev1.ConfigMap)
configMap.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
configMap.Annotations = metadata.ReconcileAndFilterAnnotations(configMap.GetAnnotations(), builder.Instance.Annotations)

if configMap.Data == nil {
configMap.Data = make(map[string]string)
}
configMap.Data["enabled_plugins"] = desiredPluginsAsString(builder.Instance.Spec.Rabbitmq.AdditionalPlugins)

if err := controllerutil.SetControllerReference(builder.Instance, configMap, builder.Scheme); err != nil {
return fmt.Errorf("failed setting controller reference: %v", err)
}
return nil
}

type RabbitmqPlugins struct {
requiredPlugins []string
additionalPlugins []string
}

func NewRabbitmqPlugins(plugins []rabbitmqv1beta1.Plugin) RabbitmqPlugins {
additionalPlugins := make([]string, len(plugins))
for i := range additionalPlugins {
Expand Down Expand Up @@ -60,41 +96,6 @@ func (r *RabbitmqPlugins) AsString(sep string) string {
return strings.Join(r.DesiredPlugins(), sep)
}

func (builder *RabbitmqResourceBuilder) RabbitmqPluginsConfigMap() *RabbitmqPluginsConfigMapBuilder {
return &RabbitmqPluginsConfigMapBuilder{
Instance: builder.Instance,
Scheme: builder.Scheme,
}
}

func (builder *RabbitmqPluginsConfigMapBuilder) Update(object runtime.Object) error {
configMap := object.(*corev1.ConfigMap)
configMap.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
configMap.Annotations = metadata.ReconcileAndFilterAnnotations(configMap.GetAnnotations(), builder.Instance.Annotations)

if configMap.Data == nil {
configMap.Data = make(map[string]string)
}
configMap.Data["enabled_plugins"] = desiredPluginsAsString(builder.Instance.Spec.Rabbitmq.AdditionalPlugins)

if err := controllerutil.SetControllerReference(builder.Instance, configMap, builder.Scheme); err != nil {
return fmt.Errorf("failed setting controller reference: %v", err)
}
return nil
}

func (builder *RabbitmqPluginsConfigMapBuilder) Build() (runtime.Object, error) {
return &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: builder.Instance.ChildResourceName(PluginsConfigName),
Namespace: builder.Instance.Namespace,
},
Data: map[string]string{
"enabled_plugins": desiredPluginsAsString([]rabbitmqv1beta1.Plugin{}),
},
}, nil
}

func desiredPluginsAsString(additionalPlugins []rabbitmqv1beta1.Plugin) string {
plugins := NewRabbitmqPlugins(additionalPlugins)
return "[" + plugins.AsString(",") + "]."
Expand Down
2 changes: 1 addition & 1 deletion internal/resource/rabbitmq_resource_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ type RabbitmqResourceBuilder struct {
}

type ResourceBuilder interface {
Update(runtime.Object) error
Build() (runtime.Object, error)
Update(runtime.Object) error
}

func (builder *RabbitmqResourceBuilder) ResourceBuilders() ([]ResourceBuilder, error) {
Expand Down
20 changes: 10 additions & 10 deletions internal/resource/role.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package resource

import (
"fmt"

rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
"github.com/rabbitmq/cluster-operator/internal/metadata"
rbacv1 "k8s.io/api/rbac/v1"
Expand All @@ -35,6 +36,15 @@ func (builder *RabbitmqResourceBuilder) Role() *RoleBuilder {
}
}

func (builder *RoleBuilder) Build() (runtime.Object, error) {
return &rbacv1.Role{
ObjectMeta: metav1.ObjectMeta{
Namespace: builder.Instance.Namespace,
Name: builder.Instance.ChildResourceName(roleName),
},
}, nil
}

func (builder *RoleBuilder) Update(object runtime.Object) error {
role := object.(*rbacv1.Role)
role.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
Expand All @@ -55,15 +65,5 @@ func (builder *RoleBuilder) Update(object runtime.Object) error {
if err := controllerutil.SetControllerReference(builder.Instance, role, builder.Scheme); err != nil {
return fmt.Errorf("failed setting controller reference: %v", err)
}

return nil
}

func (builder *RoleBuilder) Build() (runtime.Object, error) {
return &rbacv1.Role{
ObjectMeta: metav1.ObjectMeta{
Namespace: builder.Instance.Namespace,
Name: builder.Instance.ChildResourceName(roleName),
},
}, nil
}
19 changes: 10 additions & 9 deletions internal/resource/service_account.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package resource

import (
"fmt"

rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
"github.com/rabbitmq/cluster-operator/internal/metadata"
corev1 "k8s.io/api/core/v1"
Expand All @@ -35,6 +36,15 @@ func (builder *RabbitmqResourceBuilder) ServiceAccount() *ServiceAccountBuilder
}
}

func (builder *ServiceAccountBuilder) Build() (runtime.Object, error) {
return &corev1.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{
Namespace: builder.Instance.Namespace,
Name: builder.Instance.ChildResourceName(serviceAccountName),
},
}, nil
}

func (builder *ServiceAccountBuilder) Update(object runtime.Object) error {
serviceAccount := object.(*corev1.ServiceAccount)
serviceAccount.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
Expand All @@ -45,12 +55,3 @@ func (builder *ServiceAccountBuilder) Update(object runtime.Object) error {
}
return nil
}

func (builder *ServiceAccountBuilder) Build() (runtime.Object, error) {
return &corev1.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{
Namespace: builder.Instance.Namespace,
Name: builder.Instance.ChildResourceName(serviceAccountName),
},
}, nil
}
81 changes: 41 additions & 40 deletions internal/resource/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ package resource
import (
"encoding/json"
"fmt"

"k8s.io/apimachinery/pkg/util/intstr"

rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
Expand All @@ -34,18 +35,18 @@ const (
DeletionMarker string = "skipPreStopChecks"
)

type StatefulSetBuilder struct {
Instance *rabbitmqv1beta1.RabbitmqCluster
Scheme *runtime.Scheme
}

func (builder *RabbitmqResourceBuilder) StatefulSet() *StatefulSetBuilder {
return &StatefulSetBuilder{
Instance: builder.Instance,
Scheme: builder.Scheme,
}
}

type StatefulSetBuilder struct {
Instance *rabbitmqv1beta1.RabbitmqCluster
Scheme *runtime.Scheme
}

func (builder *StatefulSetBuilder) Build() (runtime.Object, error) {
// PVC, ServiceName & Selector: can't be updated without deleting the statefulset
pvc, err := persistentVolumeClaim(builder.Instance, builder.Scheme)
Expand Down Expand Up @@ -98,41 +99,6 @@ func (builder *StatefulSetBuilder) Build() (runtime.Object, error) {
return sts, nil
}

func persistentVolumeClaim(instance *rabbitmqv1beta1.RabbitmqCluster, scheme *runtime.Scheme) ([]corev1.PersistentVolumeClaim, error) {
pvc := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "persistence",
Namespace: instance.GetNamespace(),
Labels: metadata.Label(instance.Name),
Annotations: metadata.ReconcileAndFilterAnnotations(map[string]string{}, instance.Annotations),
},
Spec: corev1.PersistentVolumeClaimSpec{
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: *instance.Spec.Persistence.Storage,
},
},
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
StorageClassName: instance.Spec.Persistence.StorageClassName,
},
}

if err := controllerutil.SetControllerReference(instance, &pvc, scheme); err != nil {
return []corev1.PersistentVolumeClaim{}, fmt.Errorf("failed setting controller reference: %v", err)
}
disableBlockOwnerDeletion(pvc)

return []corev1.PersistentVolumeClaim{pvc}, nil
}

// required for OpenShift compatibility, see https://github.com/rabbitmq/cluster-operator/issues/234
func disableBlockOwnerDeletion(pvc corev1.PersistentVolumeClaim) {
refs := pvc.OwnerReferences
for i := range refs {
refs[i].BlockOwnerDeletion = pointer.BoolPtr(false)
}
}

func (builder *StatefulSetBuilder) Update(object runtime.Object) error {
sts := object.(*appsv1.StatefulSet)

Expand Down Expand Up @@ -213,6 +179,41 @@ func applyStsOverride(sts *appsv1.StatefulSet, stsOverride *rabbitmqv1beta1.Stat
return nil
}

func persistentVolumeClaim(instance *rabbitmqv1beta1.RabbitmqCluster, scheme *runtime.Scheme) ([]corev1.PersistentVolumeClaim, error) {
pvc := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "persistence",
Namespace: instance.GetNamespace(),
Labels: metadata.Label(instance.Name),
Annotations: metadata.ReconcileAndFilterAnnotations(map[string]string{}, instance.Annotations),
},
Spec: corev1.PersistentVolumeClaimSpec{
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: *instance.Spec.Persistence.Storage,
},
},
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
StorageClassName: instance.Spec.Persistence.StorageClassName,
},
}

if err := controllerutil.SetControllerReference(instance, &pvc, scheme); err != nil {
return []corev1.PersistentVolumeClaim{}, fmt.Errorf("failed setting controller reference: %v", err)
}
disableBlockOwnerDeletion(pvc)

return []corev1.PersistentVolumeClaim{pvc}, nil
}

// required for OpenShift compatibility, see https://github.com/rabbitmq/cluster-operator/issues/234
func disableBlockOwnerDeletion(pvc corev1.PersistentVolumeClaim) {
refs := pvc.OwnerReferences
for i := range refs {
refs[i].BlockOwnerDeletion = pointer.BoolPtr(false)
}
}

func patchPodSpec(podSpec, podSpecOverride *corev1.PodSpec) (corev1.PodSpec, error) {
originalPodSpec, err := json.Marshal(podSpec)
if err != nil {
Expand Down

0 comments on commit 6fc47e6

Please sign in to comment.