Files
monok8s/clitools/pkg/cmd/apply/apply.go

55 lines
1.7 KiB
Go

package apply
import (
"context"
"fmt"
"undecided.project/monok8s/pkg/crds"
"undecided.project/monok8s/pkg/kube"
"github.com/spf13/cobra"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/klog/v2"
)
func NewCmdApply(flags *genericclioptions.ConfigFlags) *cobra.Command {
cmd := &cobra.Command{Use: "apply", Short: "Apply MonoK8s resources"}
cmd.AddCommand(newCmdApplyCRDs(flags))
return cmd
}
func newCmdApplyCRDs(flags *genericclioptions.ConfigFlags) *cobra.Command {
return &cobra.Command{
Use: "crds",
Short: "Register the MonoKSConfig and OSUpgrade CRDs",
RunE: func(cmd *cobra.Command, _ []string) error {
clients, err := kube.NewClients(flags)
if err != nil {
return err
}
ctx := context.Background()
for _, wanted := range crds.Definitions() {
_, err := clients.APIExtensions.ApiextensionsV1().CustomResourceDefinitions().Create(ctx, wanted, metav1.CreateOptions{})
if apierrors.IsAlreadyExists(err) {
current, getErr := clients.APIExtensions.ApiextensionsV1().CustomResourceDefinitions().Get(ctx, wanted.Name, metav1.GetOptions{})
if getErr != nil {
return getErr
}
wanted.ResourceVersion = current.ResourceVersion
_, err = clients.APIExtensions.ApiextensionsV1().CustomResourceDefinitions().Update(ctx, wanted, metav1.UpdateOptions{})
}
if err != nil {
return err
}
klog.InfoS("crd applied", "name", wanted.Name)
}
_, _ = fmt.Fprintln(cmd.OutOrStdout(), "CRDs applied")
return nil
},
}
}
var _ *apiextensionsv1.CustomResourceDefinition