package k8s

import (
	"context"

	"github.com/pingcap/errors"
	"sigs.k8s.io/controller-runtime/pkg/client"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

// CreateResourcesIfAbsent create a serious of k8s resources in order, ignore if resource already exists
func CreateResourcesIfAbsent(cli client.Client, resources ...client.Object) error {
	for _, res := range resources {
		err := CreateResourceIfAbsent(cli, res)
		if err != nil {
			return err
		}
	}
	return nil
}

// CreateResourceIfAbsent create a k8s resource, ignore if resource already exists
func CreateResourceIfAbsent(cli client.Client, res client.Object) error {
	_, err := controllerutil.CreateOrUpdate(context.TODO(), cli, res, func() error {
		return nil
	})
	return errors.Annotate(err, "create or update resource failed")
}
