Skip to content

Commit

Permalink
Use admin clients for plugin functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Praveenrajmani committed Feb 7, 2024
1 parent d28f773 commit 9dd9690
Show file tree
Hide file tree
Showing 103 changed files with 1,149 additions and 831 deletions.
2 changes: 1 addition & 1 deletion cmd/directpv/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ import (
"syscall"
"time"

"github.com/minio/directpv/pkg/admin/installer"
directpvtypes "github.com/minio/directpv/pkg/apis/directpv.min.io/types"
"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/installer"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"k8s.io/klog/v2"
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func validateCleanCmd() error {
}

func cleanMain(ctx context.Context) {
if err := admin.Clean(ctx, admin.CleanArgs{
if err := adminClient.Clean(ctx, admin.CleanArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveIDs: driveIDArgs,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/cordon.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func validateCordonCmd() error {
}

func cordonMain(ctx context.Context) {
if err := admin.Cordon(ctx, admin.CordonArgs{
if err := adminClient.Cordon(ctx, admin.CordonArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
Status: driveStatusSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/discover.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ func writeInitConfig(config admin.InitConfig) error {
}

func discoverMain(ctx context.Context) {
resultMap, err := admin.DiscoverDevices(ctx, admin.DiscoverArgs{
resultMap, err := adminClient.DiscoverDevices(ctx, admin.DiscoverArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
PrintProgress: !quietFlag,
Expand Down
3 changes: 1 addition & 2 deletions cmd/kubectl-directpv/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"github.com/dustin/go-humanize"
"github.com/fatih/color"
"github.com/jedib0t/go-pretty/v6/table"
"github.com/minio/directpv/pkg/admin"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/utils"
"github.com/spf13/cobra"
Expand All @@ -41,7 +40,7 @@ var infoCmd = &cobra.Command{
}

func infoMain(ctx context.Context) {
nodeInfoMap, err := admin.Info(ctx)
nodeInfoMap, err := adminClient.Info(ctx)
if err != nil {
utils.Eprintf(quietFlag, true, "%v\n", err)
os.Exit(1)
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func initMain(ctx context.Context, inputFile string) {
utils.Eprintf(quietFlag, true, "unable to read the input file; %v", err.Error())
os.Exit(1)
}
results, err := admin.InitDevices(ctx, admin.InitDevicesArgs{
results, err := adminClient.InitDevices(ctx, admin.InitDevicesArgs{
InitConfig: initConfig,
PrintProgress: !quietFlag,
ListTimeout: initRequestListTimeout,
Expand Down
4 changes: 2 additions & 2 deletions cmd/kubectl-directpv/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import (
"github.com/fatih/color"
"github.com/jedib0t/go-pretty/v6/table"
"github.com/minio/directpv/pkg/admin"
"github.com/minio/directpv/pkg/admin/installer"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/installer"
"github.com/minio/directpv/pkg/k8s"
"github.com/minio/directpv/pkg/utils"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -146,7 +146,7 @@ func installMain(ctx context.Context) {
pluginVersion = Version
}
enableProgress := dryRunPrinter == nil && !declarativeFlag && !quietFlag
installedComponents, err := admin.Install(ctx, admin.InstallArgs{
installedComponents, err := adminClient.Install(ctx, admin.InstallArgs{
Image: image,
Registry: registry,
Org: org,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/label_drives.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func init() {
}

func labelDrivesMain(ctx context.Context) {
if err := admin.LabelDrives(ctx, admin.LabelDriveArgs{
if err := adminClient.LabelDrives(ctx, admin.LabelDriveArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveStatus: driveStatusSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/label_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func init() {
}

func labelVolumesMain(ctx context.Context) {
if err := admin.LabelVolumes(ctx, admin.LabelVolumeArgs{
if err := adminClient.LabelVolumes(ctx, admin.LabelVolumeArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveIDs: driveIDArgs,
Expand Down
3 changes: 1 addition & 2 deletions cmd/kubectl-directpv/list_drives.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (

"github.com/jedib0t/go-pretty/v6/table"
directpvtypes "github.com/minio/directpv/pkg/apis/directpv.min.io/types"
"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/types"
"github.com/minio/directpv/pkg/utils"
Expand Down Expand Up @@ -117,7 +116,7 @@ func validateListDrivesArgs() error {
}

func listDrivesMain(ctx context.Context) {
drives, err := client.NewDriveLister().
drives, err := adminClient.NewDriveLister().
NodeSelector(utils.ToLabelValues(nodesArgs)).
DriveNameSelector(utils.ToLabelValues(drivesArgs)).
StatusSelector(driveStatusSelectors).
Expand Down
3 changes: 1 addition & 2 deletions cmd/kubectl-directpv/list_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (

"github.com/jedib0t/go-pretty/v6/table"
directpvtypes "github.com/minio/directpv/pkg/apis/directpv.min.io/types"
"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/k8s"
"github.com/minio/directpv/pkg/types"
Expand Down Expand Up @@ -155,7 +154,7 @@ func getPVCName(ctx context.Context, volume types.Volume) string {
}

func listVolumesMain(ctx context.Context) {
volumes, err := client.NewVolumeLister().
volumes, err := adminClient.NewVolumeLister().
NodeSelector(utils.ToLabelValues(nodesArgs)).
DriveNameSelector(utils.ToLabelValues(drivesArgs)).
DriveIDSelector(utils.ToLabelValues(driveIDArgs)).
Expand Down
19 changes: 16 additions & 3 deletions cmd/kubectl-directpv/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,24 @@ import (
"os/signal"
"syscall"

"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/admin"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/k8s"
"github.com/minio/directpv/pkg/utils"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"k8s.io/client-go/rest"
"k8s.io/klog/v2"
)

// Version of this application populated by `go build`
// e.g. $ go build -ldflags="-X main.Version=v4.0.1"
var Version string

var disableInit bool
var (
disableInit bool
adminClient *admin.Client
)

var mainCmd = &cobra.Command{
Use: consts.AppName,
Expand All @@ -48,7 +53,15 @@ var mainCmd = &cobra.Command{
Version: Version,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
if !disableInit {
client.Init()
kubeConfig, err := k8s.GetKubeConfig()
if err != nil {
klog.Fatalf("unable to get kubernetes configuration; %v", err)
}
kubeConfig.WarningHandler = rest.NoWarnings{}
adminClient, err = admin.NewClient(kubeConfig)
if err != nil {
klog.Fatalf("unable to create admin client; %v", err)
}
}
return nil
},
Expand Down
44 changes: 8 additions & 36 deletions cmd/kubectl-directpv/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@ package main

import (
"context"
"fmt"
"os"
"strings"
"time"

"github.com/minio/directpv/pkg/admin"
"github.com/minio/directpv/pkg/consts"
"github.com/minio/directpv/pkg/installer"
"github.com/minio/directpv/pkg/utils"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -53,41 +52,14 @@ func init() {
}

func migrateMain(ctx context.Context) {
if err := installer.Migrate(ctx, &installer.Args{
Quiet: quietFlag,
Legacy: true,
}, false); err != nil {
utils.Eprintf(quietFlag, true, "migration failed; %v", err)
os.Exit(1)
}

if !quietFlag {
fmt.Println("Migration successful; Please restart the pods in '" + consts.AppName + "' namespace.")
}

if retainFlag {
return
}

suffix := time.Now().Format(time.RFC3339)

drivesBackupFile := "directcsidrives-" + suffix + ".yaml"
backupCreated, err := installer.RemoveLegacyDrives(ctx, drivesBackupFile)
if err != nil {
utils.Eprintf(quietFlag, true, "unable to remove legacy drive CRDs; %v", err)
os.Exit(1)
}
if backupCreated && !quietFlag {
fmt.Println("Legacy drive CRDs backed up to", drivesBackupFile)
}

volumesBackupFile := "directcsivolumes-" + suffix + ".yaml"
backupCreated, err = installer.RemoveLegacyVolumes(ctx, volumesBackupFile)
if err != nil {
utils.Eprintf(quietFlag, true, "unable to remove legacy volume CRDs; %v", err)
if err := adminClient.Migrate(ctx, admin.MigrateArgs{
Quiet: quietFlag,
Retain: retainFlag,
DrivesBackupFile: "directcsidrives-" + suffix + ".yaml",
VolumesBackupFile: "directcsivolumes-" + suffix + ".yaml",
}); err != nil {
utils.Eprintf(quietFlag, true, "migration failed; %v", err)
os.Exit(1)
}
if backupCreated && !quietFlag {
fmt.Println("Legacy volume CRDs backed up to", volumesBackupFile)
}
}
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/move.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ var moveCmd = &cobra.Command{
}

func moveMain(ctx context.Context, src, dest directpvtypes.DriveID) {
if err := admin.Move(ctx, admin.MoveArgs{
if err := adminClient.Move(ctx, admin.MoveArgs{
Source: src,
Destination: dest,
Quiet: quietFlag,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func validateRemoveCmd() error {
}

func removeMain(ctx context.Context) {
if err := admin.Remove(ctx, admin.RemoveArgs{
if err := adminClient.Remove(ctx, admin.RemoveArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveStatus: driveStatusSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/resume_drives.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func validateResumeDrivesCmd() error {
}

func resumeDrivesMain(ctx context.Context) {
if err := admin.ResumeDrives(ctx, admin.ResumeDriveArgs{
if err := adminClient.ResumeDrives(ctx, admin.ResumeDriveArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveIDSelectors: driveIDSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/resume_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func validateResumeVolumesCmd() error {
}

func resumeVolumesMain(ctx context.Context) {
if err := admin.ResumeVolumes(ctx, admin.ResumeVolumeArgs{
if err := adminClient.ResumeVolumes(ctx, admin.ResumeVolumeArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
PodNames: podNameArgs,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/suspend_drives.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func validateSuspendDrivesCmd() error {
}

func suspendDrivesMain(ctx context.Context) {
if err := admin.SuspendDrives(ctx, admin.SuspendDriveArgs{
if err := adminClient.SuspendDrives(ctx, admin.SuspendDriveArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
DriveIDSelectors: driveIDSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/suspend_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func validateSuspendVolumesCmd() error {
}

func suspendVolumesMain(ctx context.Context) {
if err := admin.SuspendVolumes(ctx, admin.SuspendVolumeArgs{
if err := adminClient.SuspendVolumes(ctx, admin.SuspendVolumeArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
PodNames: podNameArgs,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/uncordon.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func validateUncordonCmd() error {
}

func uncordonMain(ctx context.Context) {
if err := admin.Uncordon(ctx, admin.UncordonArgs{
if err := adminClient.Uncordon(ctx, admin.UncordonArgs{
Nodes: nodesArgs,
Drives: drivesArgs,
Status: driveStatusSelectors,
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubectl-directpv/uninstall.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func init() {
}

func uninstallMain(ctx context.Context) {
if err := admin.Uninstall(ctx, admin.UninstallArgs{
if err := adminClient.Uninstall(ctx, admin.UninstallArgs{
Quiet: quietFlag,
Dangerous: dangerousFlag,
}); err != nil {
Expand Down
4 changes: 2 additions & 2 deletions codegen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ client-gen \
--input-base "${REPOSITORY}/pkg/apis"

echo "Running controller-gen ..."
controller-gen crd:crdVersions=v1 paths=./... output:dir=pkg/installer
rm -f pkg/installer/direct.csi.min.io_directcsidrives.yaml pkg/installer/direct.csi.min.io_directcsivolumes.yaml
controller-gen crd:crdVersions=v1 paths=./... output:dir=pkg/admin/installer
rm -f pkg/admin/installer/direct.csi.min.io_directcsidrives.yaml pkg/admin/installer/direct.csi.min.io_directcsivolumes.yaml

echo "Running conversion-gen ..."
conversion-gen \
Expand Down
10 changes: 4 additions & 6 deletions pkg/admin/clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import (
"fmt"

directpvtypes "github.com/minio/directpv/pkg/apis/directpv.min.io/types"
"github.com/minio/directpv/pkg/client"
"github.com/minio/directpv/pkg/k8s"
"github.com/minio/directpv/pkg/types"
"github.com/minio/directpv/pkg/utils"
corev1 "k8s.io/api/core/v1"
Expand All @@ -44,7 +42,7 @@ type CleanArgs struct {
}

// Clean removes the stale/abandoned volumes
func Clean(ctx context.Context, args CleanArgs) error {
func (client *Client) Clean(ctx context.Context, args CleanArgs) error {
ctx, cancelFunc := context.WithCancel(ctx)
defer cancelFunc()

Expand All @@ -59,7 +57,7 @@ func Clean(ctx context.Context, args CleanArgs) error {
List(ctx)

matchFunc := func(volume *types.Volume) bool {
pv, err := k8s.KubeClient().CoreV1().PersistentVolumes().Get(ctx, volume.Name, metav1.GetOptions{})
pv, err := client.Kube().CoreV1().PersistentVolumes().Get(ctx, volume.Name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return true
Expand All @@ -86,12 +84,12 @@ func Clean(ctx context.Context, args CleanArgs) error {
if args.DryRun {
continue
}
if _, err := client.VolumeClient().Update(ctx, &result.Volume, metav1.UpdateOptions{
if _, err := client.Volume().Update(ctx, &result.Volume, metav1.UpdateOptions{
TypeMeta: types.NewVolumeTypeMeta(),
}); err != nil {
return err
}
if err := client.VolumeClient().Delete(ctx, result.Volume.Name, metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) {
if err := client.Volume().Delete(ctx, result.Volume.Name, metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) {
return err
}
if !args.Quiet {
Expand Down
Loading

0 comments on commit 9dd9690

Please sign in to comment.