Skip to content

Commit f7606ce

Browse files
committed
Display volume status (In use/unused)
1 parent 901bb72 commit f7606ce

File tree

5 files changed

+26
-4
lines changed

5 files changed

+26
-4
lines changed

pkg/dockerapi/image.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func ImageList(req *DockerImageList) (*DockerImageListResponse, error) {
1818
return nil, err
1919
}
2020

21-
dcontainers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: req.All})
21+
dcontainers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
2222
if err != nil {
2323
return nil, err
2424
}

pkg/dockerapi/models.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ type DockerVolumeList struct {
102102
}
103103

104104
type Volume struct {
105-
Driver string `json:"driver"`
106-
Name string `json:"name"`
105+
Driver string `json:"driver"`
106+
Name string `json:"name"`
107+
InUse bool `json:"inUse"`
107108
}
108109

109110
type DockerVolumeListResponse struct {

pkg/dockerapi/volume.go

+19-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"sort"
66

7+
"github.com/docker/docker/api/types"
78
"github.com/docker/docker/api/types/filters"
9+
"github.com/docker/docker/api/types/mount"
810
"github.com/docker/docker/api/types/volume"
911
"github.com/docker/docker/client"
1012
)
@@ -15,16 +17,32 @@ func VolumeList(req *DockerVolumeList) (*DockerVolumeListResponse, error) {
1517
return nil, err
1618
}
1719

20+
dcontainers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
21+
if err != nil {
22+
return nil, err
23+
}
24+
25+
usedVolumes := make(map[string]interface{}, 0)
26+
for _, c := range dcontainers {
27+
for _, m := range c.Mounts {
28+
if m.Type == mount.TypeVolume {
29+
usedVolumes[m.Name] = nil
30+
}
31+
}
32+
}
33+
1834
dvolumes, err := cli.VolumeList(context.Background(), volume.ListOptions{})
1935
if err != nil {
2036
return nil, err
2137
}
2238

2339
volumes := make([]Volume, len(dvolumes.Volumes))
2440
for i, item := range dvolumes.Volumes {
41+
_, isUse := usedVolumes[item.Name]
2542
volumes[i] = Volume{
2643
Driver: item.Driver,
2744
Name: item.Name,
45+
InUse: isUse,
2846
}
2947
}
3048

@@ -56,7 +74,7 @@ func VolumesPrune(req *DockerVolumesPrune) (*DockerVolumesPruneResponse, error)
5674
}
5775

5876
all := "true"
59-
if req.All {
77+
if !req.All {
6078
all = "false"
6179
}
6280
allFilter := filters.KeyValuePair{Key: "all", Value: all}

web/src/app/volumes/volume-list.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ export default function VolumeList() {
139139
<TableRow>
140140
<TableHead scope="col">Driver</TableHead>
141141
<TableHead scope="col">Name</TableHead>
142+
<TableHead scope="col">Status</TableHead>
142143
<TableHead scope="col">
143144
<span className="sr-only">Actions</span>
144145
</TableHead>
@@ -151,6 +152,7 @@ export default function VolumeList() {
151152
<TableRow key={item.name}>
152153
<TableCell>{item.driver}</TableCell>
153154
<TableCell>{item.name}</TableCell>
155+
<TableCell>{item.inUse ? "In use" : "Unused"}</TableCell>
154156
<TableCell className="text-right">
155157
<TableButtonDelete
156158
onClick={(e) => {

web/src/lib/api-models.ts

+1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export interface IImage {
106106
export interface IVolume {
107107
driver: string
108108
name: string
109+
inUse: boolean
109110
}
110111

111112
export interface INetwork {

0 commit comments

Comments
 (0)