@@ -78,7 +78,7 @@ func diskCreateAction(cmd *cobra.Command, args []string) error {
7878 return fmt .Errorf ("disk %q already exists (%q)" , name , diskDir )
7979 }
8080
81- logrus .Infof ("Creating a disk %q" , name )
81+ logrus .Infof ("Creating disk %q with size %s " , name , units . BytesSize ( float64 ( diskSize )) )
8282
8383 if err := os .MkdirAll (diskDir , 0700 ); err != nil {
8484 return err
@@ -100,13 +100,23 @@ $ limactl disk list
100100` ,
101101 Short : "List existing Lima disks" ,
102102 Aliases : []string {"ls" },
103- Args : cobra .NoArgs ,
103+ Args : cobra .ArbitraryArgs ,
104104 RunE : diskListAction ,
105105 }
106106 diskListCommand .Flags ().Bool ("json" , false , "JSONify output" )
107107 return diskListCommand
108108}
109109
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+
110120func diskListAction (cmd * cobra.Command , args []string ) error {
111121 jsonFormat , err := cmd .Flags ().GetBool ("json" )
112122 if err != nil {
@@ -118,8 +128,22 @@ func diskListAction(cmd *cobra.Command, args []string) error {
118128 return err
119129 }
120130
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+
121145 if jsonFormat {
122- for _ , diskName := range allDisks {
146+ for _ , diskName := range disks {
123147 disk , err := store .InspectDisk (diskName )
124148 if err != nil {
125149 logrus .WithError (err ).Errorf ("disk %q does not exist?" , diskName )
@@ -137,11 +161,11 @@ func diskListAction(cmd *cobra.Command, args []string) error {
137161 w := tabwriter .NewWriter (cmd .OutOrStdout (), 4 , 8 , 4 , ' ' , 0 )
138162 fmt .Fprintln (w , "NAME\t SIZE\t DIR\t IN-USE-BY" )
139163
140- if len (allDisks ) == 0 {
164+ if len (disks ) == 0 {
141165 logrus .Warn ("No disk found. Run `limactl disk create DISK --size SIZE` to create a disk." )
142166 }
143167
144- for _ , diskName := range allDisks {
168+ for _ , diskName := range disks {
145169 disk , err := store .InspectDisk (diskName )
146170 if err != nil {
147171 logrus .WithError (err ).Errorf ("disk %q does not exist?" , diskName )
@@ -168,7 +192,7 @@ $ limactl disk delete DISK1 DISK2 ...
168192 Args : cobra .MinimumNArgs (1 ),
169193 RunE : diskDeleteAction ,
170194 }
171- diskDeleteCommand .Flags ().Bool ("force" , false , "force delete" )
195+ diskDeleteCommand .Flags ().BoolP ("force" , "f " , false , "force delete" )
172196 return diskDeleteCommand
173197}
174198
@@ -178,24 +202,20 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error {
178202 return err
179203 }
180204
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 {
196213 continue
197214 }
215+ instances = append (instances , inst )
216+ }
198217
218+ for _ , diskName := range args {
199219 disk , err := store .InspectDisk (diskName )
200220 if err != nil {
201221 if errors .Is (err , fs .ErrNotExist ) {
@@ -204,33 +224,29 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error {
204224 }
205225 return err
206226 }
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 )
219231 }
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+ }
224239 }
225240 }
226241 }
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+ }
227248 }
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+
234250 if err := deleteDisk (disk ); err != nil {
235251 return fmt .Errorf ("failed to delete disk %q: %v" , diskName , err )
236252 }
0 commit comments