Skip to content

Commit 83714fa

Browse files
Add commands for suspending and resuming drives (#842)
Fixes #836 Co-authored-by: Bala FA <bala@minio.io>
1 parent 71eda9f commit 83714fa

34 files changed

+1017
-120
lines changed

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ kubectl-directpv
77
!kubectl-directpv/
88
vdb.xml
99
drives.yaml
10-
kubectl-*
1110
dist/

cmd/kubectl-directpv/clean.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,7 @@ var cleanCmd = &cobra.Command{
7777
}
7878

7979
func init() {
80-
cleanCmd.Flags().SortFlags = false
81-
cleanCmd.InheritedFlags().SortFlags = false
82-
cleanCmd.LocalFlags().SortFlags = false
83-
cleanCmd.LocalNonPersistentFlags().SortFlags = false
84-
cleanCmd.NonInheritedFlags().SortFlags = false
85-
cleanCmd.PersistentFlags().SortFlags = false
80+
setFlagOpts(cleanCmd)
8681

8782
addNodesFlag(cleanCmd, "If present, select volumes from given nodes")
8883
addDrivesFlag(cleanCmd, "If present, select volumes by given drive names")

cmd/kubectl-directpv/cordon.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,7 @@ var cordonCmd = &cobra.Command{
6969
}
7070

7171
func init() {
72-
cordonCmd.Flags().SortFlags = false
73-
cordonCmd.InheritedFlags().SortFlags = false
74-
cordonCmd.LocalFlags().SortFlags = false
75-
cordonCmd.LocalNonPersistentFlags().SortFlags = false
76-
cordonCmd.NonInheritedFlags().SortFlags = false
77-
cordonCmd.PersistentFlags().SortFlags = false
72+
setFlagOpts(cordonCmd)
7873

7974
addNodesFlag(cordonCmd, "If present, select drives from given nodes")
8075
addDrivesFlag(cordonCmd, "If present, select drives by given names")

cmd/kubectl-directpv/discover.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,7 @@ var discoverCmd = &cobra.Command{
7979
}
8080

8181
func init() {
82-
discoverCmd.Flags().SortFlags = false
83-
discoverCmd.InheritedFlags().SortFlags = false
84-
discoverCmd.LocalFlags().SortFlags = false
85-
discoverCmd.LocalNonPersistentFlags().SortFlags = false
86-
discoverCmd.NonInheritedFlags().SortFlags = false
87-
discoverCmd.PersistentFlags().SortFlags = false
82+
setFlagOpts(discoverCmd)
8883

8984
addNodesFlag(discoverCmd, "discover drives from given nodes")
9085
addDrivesFlag(discoverCmd, "discover drives by given names")

cmd/kubectl-directpv/flags.go

+9
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ func addLabelsFlag(cmd *cobra.Command, usage string) {
119119
cmd.PersistentFlags().StringSliceVar(&labelArgs, "labels", labelArgs, usage+"; supports comma separated kv pairs. e.g. tier=hot,region=east")
120120
}
121121

122+
func setFlagOpts(cmd *cobra.Command) {
123+
cmd.Flags().SortFlags = false
124+
cmd.InheritedFlags().SortFlags = false
125+
cmd.LocalFlags().SortFlags = false
126+
cmd.LocalNonPersistentFlags().SortFlags = false
127+
cmd.NonInheritedFlags().SortFlags = false
128+
cmd.PersistentFlags().SortFlags = false
129+
}
130+
122131
var (
123132
wideOutput bool
124133

cmd/kubectl-directpv/init.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,7 @@ var initCmd = &cobra.Command{
8080
}
8181

8282
func init() {
83-
initCmd.Flags().SortFlags = false
84-
initCmd.InheritedFlags().SortFlags = false
85-
initCmd.LocalFlags().SortFlags = false
86-
initCmd.LocalNonPersistentFlags().SortFlags = false
87-
initCmd.NonInheritedFlags().SortFlags = false
88-
initCmd.PersistentFlags().SortFlags = false
83+
setFlagOpts(initCmd)
8984

9085
initCmd.PersistentFlags().DurationVar(&initRequestListTimeout, "timeout", initRequestListTimeout, "specify timeout for the initialization process")
9186
addDangerousFlag(initCmd, "Perform initialization of drives which will permanently erase existing data")

cmd/kubectl-directpv/install.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,7 @@ func init() {
107107
image = consts.AppName + ":0.0.0-dev"
108108
}
109109

110-
installCmd.Flags().SortFlags = false
111-
installCmd.InheritedFlags().SortFlags = false
112-
installCmd.LocalFlags().SortFlags = false
113-
installCmd.LocalNonPersistentFlags().SortFlags = false
114-
installCmd.NonInheritedFlags().SortFlags = false
115-
installCmd.PersistentFlags().SortFlags = false
110+
setFlagOpts(installCmd)
116111

117112
installCmd.PersistentFlags().StringSliceVar(&nodeSelectorArgs, "node-selector", nodeSelectorArgs, "Select the storage nodes using labels (KEY=VALUE,..)")
118113
installCmd.PersistentFlags().StringSliceVar(&tolerationArgs, "tolerations", tolerationArgs, "Set toleration labels on the storage nodes (KEY[=VALUE]:EFFECT,..)")

cmd/kubectl-directpv/label.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,7 @@ var labelCmd = &cobra.Command{
5454
}
5555

5656
func init() {
57-
labelCmd.Flags().SortFlags = false
58-
labelCmd.InheritedFlags().SortFlags = false
59-
labelCmd.LocalFlags().SortFlags = false
60-
labelCmd.LocalNonPersistentFlags().SortFlags = false
61-
labelCmd.NonInheritedFlags().SortFlags = false
62-
labelCmd.PersistentFlags().SortFlags = false
57+
setFlagOpts(labelCmd)
6358

6459
addNodesFlag(labelCmd, "If present, filter objects from given nodes")
6560
addDrivesFlag(labelCmd, "If present, filter objects by given drive names")

cmd/kubectl-directpv/label_drives.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,7 @@ func validateLabelDrivesCmd(args []string) (err error) {
8989
}
9090

9191
func init() {
92-
labelDrivesCmd.Flags().SortFlags = false
93-
labelDrivesCmd.InheritedFlags().SortFlags = false
94-
labelDrivesCmd.LocalFlags().SortFlags = false
95-
labelDrivesCmd.LocalNonPersistentFlags().SortFlags = false
96-
labelDrivesCmd.NonInheritedFlags().SortFlags = false
97-
labelDrivesCmd.PersistentFlags().SortFlags = false
92+
setFlagOpts(labelDrivesCmd)
9893

9994
addDriveStatusFlag(labelDrivesCmd, "If present, select drives by status")
10095
addIDFlag(labelDrivesCmd, "If present, select by drive ID")

cmd/kubectl-directpv/label_volumes.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,7 @@ func validateLabelVolumesCmd(args []string) (err error) {
9595
}
9696

9797
func init() {
98-
labelVolumesCmd.Flags().SortFlags = false
99-
labelVolumesCmd.InheritedFlags().SortFlags = false
100-
labelVolumesCmd.LocalFlags().SortFlags = false
101-
labelVolumesCmd.LocalNonPersistentFlags().SortFlags = false
102-
labelVolumesCmd.NonInheritedFlags().SortFlags = false
103-
labelVolumesCmd.PersistentFlags().SortFlags = false
98+
setFlagOpts(labelVolumesCmd)
10499

105100
addDriveIDFlag(labelVolumesCmd, "Filter output by drive IDs")
106101
addPodNameFlag(labelVolumesCmd, "Filter output by pod names")

cmd/kubectl-directpv/list.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,7 @@ var listCmd = &cobra.Command{
3737
}
3838

3939
func init() {
40-
listCmd.Flags().SortFlags = false
41-
listCmd.InheritedFlags().SortFlags = false
42-
listCmd.LocalFlags().SortFlags = false
43-
listCmd.LocalNonPersistentFlags().SortFlags = false
44-
listCmd.NonInheritedFlags().SortFlags = false
45-
listCmd.PersistentFlags().SortFlags = false
40+
setFlagOpts(listCmd)
4641

4742
addNodesFlag(listCmd, "Filter output by nodes")
4843
addDrivesFlag(listCmd, "Filter output by drive names")

cmd/kubectl-directpv/list_drives.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,7 @@ var listDrivesCmd = &cobra.Command{
7777
}
7878

7979
func init() {
80-
listDrivesCmd.Flags().SortFlags = false
81-
listDrivesCmd.InheritedFlags().SortFlags = false
82-
listDrivesCmd.LocalFlags().SortFlags = false
83-
listDrivesCmd.LocalNonPersistentFlags().SortFlags = false
84-
listDrivesCmd.NonInheritedFlags().SortFlags = false
85-
listDrivesCmd.PersistentFlags().SortFlags = false
80+
setFlagOpts(listDrivesCmd)
8681

8782
addDriveStatusFlag(listDrivesCmd, "Filter output by drive status")
8883
addShowLabelsFlag(listDrivesCmd)
@@ -198,6 +193,9 @@ func listDrivesMain(ctx context.Context) {
198193
if drive.IsUnschedulable() {
199194
status += ",SchedulingDisabled"
200195
}
196+
if drive.IsSuspended() {
197+
status += ",Suspended"
198+
}
201199
driveMake := drive.Status.Make
202200
if driveMake == "" {
203201
driveMake = "-"

cmd/kubectl-directpv/list_volumes.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,7 @@ var listVolumesCmd = &cobra.Command{
8585
}
8686

8787
func init() {
88-
listVolumesCmd.Flags().SortFlags = false
89-
listVolumesCmd.InheritedFlags().SortFlags = false
90-
listVolumesCmd.LocalFlags().SortFlags = false
91-
listVolumesCmd.LocalNonPersistentFlags().SortFlags = false
92-
listVolumesCmd.NonInheritedFlags().SortFlags = false
93-
listVolumesCmd.PersistentFlags().SortFlags = false
88+
setFlagOpts(listVolumesCmd)
9489

9590
addDriveIDFlag(listVolumesCmd, "Filter output by drive IDs")
9691
addPodNameFlag(listVolumesCmd, "Filter output by pod names")

cmd/kubectl-directpv/main.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,7 @@ Use "{{.CommandPath}} [command] --help" for more information about this command.
9292
image = consts.AppName + ":0.0.0-dev"
9393
}
9494

95-
mainCmd.Flags().SortFlags = false
96-
mainCmd.InheritedFlags().SortFlags = false
97-
mainCmd.LocalFlags().SortFlags = false
98-
mainCmd.LocalNonPersistentFlags().SortFlags = false
99-
mainCmd.NonInheritedFlags().SortFlags = false
100-
mainCmd.PersistentFlags().SortFlags = false
95+
setFlagOpts(mainCmd)
10196

10297
viper.AutomaticEnv()
10398

@@ -156,6 +151,8 @@ Use "{{.CommandPath}} [command] --help" for more information about this command.
156151
mainCmd.AddCommand(migrateCmd)
157152
mainCmd.AddCommand(moveCmd)
158153
mainCmd.AddCommand(cleanCmd)
154+
mainCmd.AddCommand(suspendCmd)
155+
mainCmd.AddCommand(resumeCmd)
159156
mainCmd.AddCommand(removeCmd)
160157
mainCmd.AddCommand(uninstallCmd)
161158
mainCmd.SetHelpCommand(&cobra.Command{

cmd/kubectl-directpv/migrate.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,7 @@ var migrateCmd = &cobra.Command{
4646
}
4747

4848
func init() {
49-
migrateCmd.Flags().SortFlags = false
50-
migrateCmd.InheritedFlags().SortFlags = false
51-
migrateCmd.LocalFlags().SortFlags = false
52-
migrateCmd.LocalNonPersistentFlags().SortFlags = false
53-
migrateCmd.NonInheritedFlags().SortFlags = false
54-
migrateCmd.PersistentFlags().SortFlags = false
49+
setFlagOpts(migrateCmd)
5550

5651
addDryRunFlag(migrateCmd, "Run in dry run mode")
5752
migrateCmd.PersistentFlags().BoolVar(&retainFlag, "retain", retainFlag, "retain legacy CRD after migration")

cmd/kubectl-directpv/remove.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,7 @@ var removeCmd = &cobra.Command{
6868
}
6969

7070
func init() {
71-
removeCmd.Flags().SortFlags = false
72-
removeCmd.InheritedFlags().SortFlags = false
73-
removeCmd.LocalFlags().SortFlags = false
74-
removeCmd.LocalNonPersistentFlags().SortFlags = false
75-
removeCmd.NonInheritedFlags().SortFlags = false
76-
removeCmd.PersistentFlags().SortFlags = false
71+
setFlagOpts(removeCmd)
7772

7873
addNodesFlag(removeCmd, "If present, select drives from given nodes")
7974
addDrivesFlag(removeCmd, "If present, select drives by given names")

cmd/kubectl-directpv/resume.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// This file is part of MinIO DirectPV
2+
// Copyright (c) 2022, 2023 MinIO, Inc.
3+
//
4+
// This program is free software: you can redistribute it and/or modify
5+
// it under the terms of the GNU Affero General Public License as published by
6+
// the Free Software Foundation, either version 3 of the License, or
7+
// (at your option) any later version.
8+
//
9+
// This program is distributed in the hope that it will be useful,
10+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
// GNU Affero General Public License for more details.
13+
//
14+
// You should have received a copy of the GNU Affero General Public License
15+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
17+
package main
18+
19+
import (
20+
"github.com/spf13/cobra"
21+
)
22+
23+
var resumeCmd = &cobra.Command{
24+
Use: "resume",
25+
Short: "Resume suspended drives and volumes",
26+
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
27+
if parent := cmd.Parent(); parent != nil {
28+
parent.PersistentPreRunE(parent, args)
29+
}
30+
return nil
31+
},
32+
}
33+
34+
func init() {
35+
setFlagOpts(resumeCmd)
36+
37+
addDryRunFlag(resumeCmd, "Run in dry run mode")
38+
39+
resumeCmd.AddCommand(resumeDrivesCmd)
40+
resumeCmd.AddCommand(resumeVolumesCmd)
41+
}

0 commit comments

Comments
 (0)