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