mirror of
https://github.com/rancher/k3k.git
synced 2026-05-22 01:03:02 +00:00
* Fix update bug in ensureObjects Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * wsl Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix log msg Co-authored-by: Enrico Candino <enrico.candino@gmail.com> * Fix import Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> --------- Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> Co-authored-by: Enrico Candino <enrico.candino@gmail.com>
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1"
|
|
"github.com/rancher/k3k/pkg/controller"
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
ctrl "sigs.k8s.io/controller-runtime"
|
|
ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
|
|
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
|
|
)
|
|
|
|
const (
|
|
configName = "agent-config"
|
|
)
|
|
|
|
type ResourceEnsurer interface {
|
|
EnsureResources(context.Context) error
|
|
}
|
|
|
|
type Config struct {
|
|
cluster *v1alpha1.Cluster
|
|
client ctrlruntimeclient.Client
|
|
scheme *runtime.Scheme
|
|
}
|
|
|
|
func NewConfig(cluster *v1alpha1.Cluster, client ctrlruntimeclient.Client, scheme *runtime.Scheme) *Config {
|
|
return &Config{
|
|
cluster: cluster,
|
|
client: client,
|
|
scheme: scheme,
|
|
}
|
|
}
|
|
|
|
func configSecretName(clusterName string) string {
|
|
return controller.SafeConcatNameWithPrefix(clusterName, configName)
|
|
}
|
|
|
|
func ensureObject(ctx context.Context, cfg *Config, obj ctrlruntimeclient.Object) error {
|
|
log := ctrl.LoggerFrom(ctx)
|
|
|
|
key := ctrlruntimeclient.ObjectKeyFromObject(obj)
|
|
|
|
log.Info(fmt.Sprintf("ensuring %T", obj), "key", key)
|
|
|
|
if err := controllerutil.SetControllerReference(cfg.cluster, obj, cfg.scheme); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := cfg.client.Create(ctx, obj); err != nil {
|
|
if apierrors.IsAlreadyExists(err) {
|
|
return cfg.client.Update(ctx, obj)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|