@@ -78,7 +78,7 @@ func diskCreateAction(cmd *cobra.Command, args []string) error {
78
78
return fmt .Errorf ("disk %q already exists (%q)" , name , diskDir )
79
79
}
80
80
81
- logrus .Infof ("Creating a disk %q" , name )
81
+ logrus .Infof ("Creating disk %q with size %s " , name , units . BytesSize ( float64 ( diskSize )) )
82
82
83
83
if err := os .MkdirAll (diskDir , 0700 ); err != nil {
84
84
return err
@@ -100,13 +100,23 @@ $ limactl disk list
100
100
` ,
101
101
Short : "List existing Lima disks" ,
102
102
Aliases : []string {"ls" },
103
- Args : cobra .NoArgs ,
103
+ Args : cobra .ArbitraryArgs ,
104
104
RunE : diskListAction ,
105
105
}
106
106
diskListCommand .Flags ().Bool ("json" , false , "JSONify output" )
107
107
return diskListCommand
108
108
}
109
109
110
+ func diskMatches (diskName string , disks []string ) []string {
111
+ matches := []string {}
112
+ for _ , disk := range disks {
113
+ if disk == diskName {
114
+ matches = append (matches , disk )
115
+ }
116
+ }
117
+ return matches
118
+ }
119
+
110
120
func diskListAction (cmd * cobra.Command , args []string ) error {
111
121
jsonFormat , err := cmd .Flags ().GetBool ("json" )
112
122
if err != nil {
@@ -118,8 +128,22 @@ func diskListAction(cmd *cobra.Command, args []string) error {
118
128
return err
119
129
}
120
130
131
+ disks := []string {}
132
+ if len (args ) > 0 {
133
+ for _ , arg := range args {
134
+ matches := diskMatches (arg , allDisks )
135
+ if len (matches ) > 0 {
136
+ disks = append (disks , matches ... )
137
+ } else {
138
+ logrus .Warnf ("No disk matching %v found." , arg )
139
+ }
140
+ }
141
+ } else {
142
+ disks = allDisks
143
+ }
144
+
121
145
if jsonFormat {
122
- for _ , diskName := range allDisks {
146
+ for _ , diskName := range disks {
123
147
disk , err := store .InspectDisk (diskName )
124
148
if err != nil {
125
149
logrus .WithError (err ).Errorf ("disk %q does not exist?" , diskName )
@@ -137,11 +161,11 @@ func diskListAction(cmd *cobra.Command, args []string) error {
137
161
w := tabwriter .NewWriter (cmd .OutOrStdout (), 4 , 8 , 4 , ' ' , 0 )
138
162
fmt .Fprintln (w , "NAME\t SIZE\t DIR\t IN-USE-BY" )
139
163
140
- if len (allDisks ) == 0 {
164
+ if len (disks ) == 0 {
141
165
logrus .Warn ("No disk found. Run `limactl disk create DISK --size SIZE` to create a disk." )
142
166
}
143
167
144
- for _ , diskName := range allDisks {
168
+ for _ , diskName := range disks {
145
169
disk , err := store .InspectDisk (diskName )
146
170
if err != nil {
147
171
logrus .WithError (err ).Errorf ("disk %q does not exist?" , diskName )
@@ -168,7 +192,7 @@ $ limactl disk delete DISK1 DISK2 ...
168
192
Args : cobra .MinimumNArgs (1 ),
169
193
RunE : diskDeleteAction ,
170
194
}
171
- diskDeleteCommand .Flags ().Bool ("force" , false , "force delete" )
195
+ diskDeleteCommand .Flags ().BoolP ("force" , "f " , false , "force delete" )
172
196
return diskDeleteCommand
173
197
}
174
198
@@ -178,24 +202,20 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error {
178
202
return err
179
203
}
180
204
181
- for _ , diskName := range args {
182
- if force {
183
- disk , err := store .InspectDisk (diskName )
184
- if err != nil {
185
- if errors .Is (err , fs .ErrNotExist ) {
186
- logrus .Warnf ("Ignoring non-existent disk %q" , diskName )
187
- continue
188
- }
189
- return err
190
- }
191
-
192
- if err := deleteDisk (disk ); err != nil {
193
- return fmt .Errorf ("failed to delete disk %q: %w" , diskName , err )
194
- }
195
- logrus .Infof ("Deleted %q (%q)" , diskName , disk .Dir )
205
+ instNames , err := store .Instances ()
206
+ if err != nil {
207
+ return err
208
+ }
209
+ var instances []* store.Instance
210
+ for _ , instName := range instNames {
211
+ inst , err := store .Inspect (instName )
212
+ if err != nil {
196
213
continue
197
214
}
215
+ instances = append (instances , inst )
216
+ }
198
217
218
+ for _ , diskName := range args {
199
219
disk , err := store .InspectDisk (diskName )
200
220
if err != nil {
201
221
if errors .Is (err , fs .ErrNotExist ) {
@@ -204,33 +224,29 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error {
204
224
}
205
225
return err
206
226
}
207
- if disk .Instance != "" {
208
- return fmt .Errorf ("cannot delete disk %q in use by instance %q" , disk .Name , disk .Instance )
209
- }
210
- instances , err := store .Instances ()
211
- if err != nil {
212
- return err
213
- }
214
- var refInstances []string
215
- for _ , instName := range instances {
216
- inst , err := store .Inspect (instName )
217
- if err != nil {
218
- continue
227
+
228
+ if ! force {
229
+ if disk .Instance != "" {
230
+ return fmt .Errorf ("cannot delete disk %q in use by instance %q" , disk .Name , disk .Instance )
219
231
}
220
- if len (inst .AdditionalDisks ) > 0 {
221
- for _ , d := range inst .AdditionalDisks {
222
- if d == diskName {
223
- refInstances = append (refInstances , instName )
232
+ var refInstances []string
233
+ for _ , inst := range instances {
234
+ if len (inst .AdditionalDisks ) > 0 {
235
+ for _ , d := range inst .AdditionalDisks {
236
+ if d == diskName {
237
+ refInstances = append (refInstances , inst .Name )
238
+ }
224
239
}
225
240
}
226
241
}
242
+ if len (refInstances ) > 0 {
243
+ logrus .Warnf ("Skipping deleting disk %q, disk is referenced by one or more non-running instances: %q" ,
244
+ diskName , refInstances )
245
+ logrus .Warnf ("To delete anyway, run %q" , forceDeleteCommand (diskName ))
246
+ continue
247
+ }
227
248
}
228
- if len (refInstances ) > 0 {
229
- logrus .Warnf ("Skipping deleting disk %q, disk is referenced by one or more non-running instances: %q" ,
230
- diskName , refInstances )
231
- logrus .Warnf ("To delete anyway, run %q" , forceDeleteCommand (diskName ))
232
- continue
233
- }
249
+
234
250
if err := deleteDisk (disk ); err != nil {
235
251
return fmt .Errorf ("failed to delete disk %q: %v" , diskName , err )
236
252
}
0 commit comments