internal/resource/statefulset.go (41 lines of code) (raw):
package resource
import (
"context"
"fmt"
"git.jetbrains.team/tch/teamcity-operator/internal/metadata"
v1 "k8s.io/api/apps/v1"
v12 "k8s.io/api/core/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)
type StatefulSetBuilder struct {
*TeamCityResourceBuilder
}
func (builder *TeamCityResourceBuilder) StatefulSet() *StatefulSetBuilder {
return &StatefulSetBuilder{builder}
}
func (builder *StatefulSetBuilder) UpdateMayRequireStsRecreate() bool {
return true
}
func (builder *StatefulSetBuilder) BuildObjectList() ([]client.Object, error) {
mainNodeLabels := metadata.GetStatefulSetLabels(builder.Instance.Name, builder.Instance.Spec.MainNode.Name, "main", builder.Instance.Labels)
mainNode := CreateEmptyStatefulSet(builder.Instance.Spec.MainNode.Name, builder.Instance.Namespace, mainNodeLabels)
return []client.Object{
&mainNode,
}, nil
}
func (builder *StatefulSetBuilder) Update(object client.Object) error {
statefulSpec := object.(*v1.StatefulSet)
mainNode := builder.Instance.Spec.MainNode
ConfigureStatefulSet(builder.Instance, mainNode, statefulSpec)
var container v12.Container
ConfigureContainer(builder.Instance, mainNode, &container)
statefulSpec.Spec.Template.Spec.Containers = []v12.Container{container}
if err := controllerutil.SetControllerReference(builder.Instance, statefulSpec, builder.Scheme); err != nil {
return fmt.Errorf("failed setting controller reference: %w", err)
}
return nil
}
func (builder *StatefulSetBuilder) GetObsoleteObjects(ctx context.Context) ([]client.Object, error) {
return []client.Object{}, nil
}