55 lines
1.7 KiB
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
|