File Coverage

blib/lib/WWW/Docker/API/Volumes.pm
Criterion Covered Total %
statement 34 38 89.4
branch 6 12 50.0
condition 1 2 50.0
subroutine 10 11 90.9
pod 0 5 0.0
total 51 68 75.0


line stmt bran cond sub pod time code
1             package WWW::Docker::API::Volumes;
2             # ABSTRACT: Docker Engine Volumes API
3              
4 10     10   74 use Moo;
  10         23  
  10         69  
5 10     10   10828 use WWW::Docker::Volume;
  10         41  
  10         497  
6 10     10   77 use Carp qw( croak );
  10         21  
  10         778  
7 10     10   62 use namespace::clean;
  10         21  
  10         51  
8              
9             our $VERSION = '0.101';
10              
11             =head1 SYNOPSIS
12              
13             my $docker = WWW::Docker->new;
14              
15             # Create a volume
16             my $volume = $docker->volumes->create(
17             Name => 'my-volume',
18             Driver => 'local',
19             );
20              
21             # List volumes
22             my $volumes = $docker->volumes->list;
23              
24             # Inspect volume
25             my $vol = $docker->volumes->inspect('my-volume');
26             say $vol->Mountpoint;
27              
28             # Remove volume
29             $docker->volumes->remove('my-volume');
30              
31             =head1 DESCRIPTION
32              
33             This module provides methods for managing Docker volumes including creation,
34             listing, inspection, and removal.
35              
36             Accessed via C<< $docker->volumes >>.
37              
38             =cut
39              
40             has client => (
41             is => 'ro',
42             required => 1,
43             weak_ref => 1,
44             );
45              
46             =attr client
47              
48             Reference to L client. Weak reference to avoid circular dependencies.
49              
50             =cut
51              
52             sub _wrap {
53 4     4   10 my ($self, $data) = @_;
54 4         90 return WWW::Docker::Volume->new(
55             client => $self->client,
56             %$data,
57             );
58             }
59              
60             sub _wrap_list {
61 1     1   3 my ($self, $list) = @_;
62 1         2 return [ map { $self->_wrap($_) } @$list ];
  2         1597  
63             }
64              
65             sub list {
66 1     1 0 1168 my ($self, %opts) = @_;
67 1         2 my %params;
68 1 50       4 $params{filters} = $opts{filters} if defined $opts{filters};
69 1         11 my $result = $self->client->get('/volumes', params => \%params);
70 1   50     20 return $self->_wrap_list($result->{Volumes} // []);
71             }
72              
73             =method list
74              
75             my $volumes = $volumes->list;
76              
77             List volumes. Returns ArrayRef of L objects.
78              
79             =cut
80              
81             sub create {
82 1     1 0 21 my ($self, %config) = @_;
83 1         24 my $result = $self->client->post('/volumes/create', \%config);
84 1         750 return $self->_wrap($result);
85             }
86              
87             =method create
88              
89             my $volume = $volumes->create(
90             Name => 'my-volume',
91             Driver => 'local',
92             );
93              
94             Create a volume. Returns L object.
95              
96             =cut
97              
98             sub inspect {
99 2     2 0 739 my ($self, $name) = @_;
100 2 100       207 croak "Volume name required" unless $name;
101 1         16 my $result = $self->client->get("/volumes/$name");
102 1         63 return $self->_wrap($result);
103             }
104              
105             =method inspect
106              
107             my $volume = $volumes->inspect('my-volume');
108              
109             Get detailed information about a volume. Returns L object.
110              
111             =cut
112              
113             sub remove {
114 2     2 0 2569 my ($self, $name, %opts) = @_;
115 2 100       157 croak "Volume name required" unless $name;
116 1         3 my %params;
117 1 0       5 $params{force} = $opts{force} ? 1 : 0 if defined $opts{force};
    50          
118 1         13 return $self->client->delete_request("/volumes/$name", params => \%params);
119             }
120              
121             =method remove
122              
123             $volumes->remove('my-volume', force => 1);
124              
125             Remove a volume. Optional C parameter.
126              
127             =cut
128              
129             sub prune {
130 0     0 0   my ($self, %opts) = @_;
131 0           my %params;
132 0 0         $params{filters} = $opts{filters} if defined $opts{filters};
133 0           return $self->client->post('/volumes/prune', undef, params => \%params);
134             }
135              
136             =method prune
137              
138             my $result = $volumes->prune;
139              
140             Delete unused volumes. Returns hashref with C and C.
141              
142             =cut
143              
144             =seealso
145              
146             =over
147              
148             =item * L - Main Docker client
149              
150             =item * L - Volume entity class
151              
152             =back
153              
154             =cut
155              
156             1;