File Coverage

blib/lib/API/Docker/API/Containers.pm
Criterion Covered Total %
statement 67 103 65.0
branch 23 88 26.1
condition 1 2 50.0
subroutine 16 23 69.5
pod 17 17 100.0
total 124 233 53.2


line stmt bran cond sub pod time code
1             package API::Docker::API::Containers;
2             # ABSTRACT: Docker Engine Containers API
3             our $VERSION = '0.001';
4 7     7   48 use Moo;
  7         14  
  7         75  
5 7     7   6012 use API::Docker::Container;
  7         26  
  7         394  
6 7     7   60 use Carp qw( croak );
  7         11  
  7         603  
7 7     7   43 use namespace::clean;
  7         11  
  7         38  
8              
9              
10             has client => (
11             is => 'ro',
12             required => 1,
13             weak_ref => 1,
14             );
15              
16              
17             sub _wrap {
18 3     3   10 my ($self, $data) = @_;
19 3         100 return API::Docker::Container->new(
20             client => $self->client,
21             %$data,
22             );
23             }
24              
25             sub _wrap_list {
26 1     1   3 my ($self, $list) = @_;
27 1         4 return [ map { $self->_wrap($_) } @$list ];
  2         4028  
28             }
29              
30             sub list {
31 1     1 1 1550 my ($self, %opts) = @_;
32 1         2 my %params;
33 1 50       10 $params{all} = $opts{all} ? 1 : 0 if defined $opts{all};
    50          
34 1 50       4 $params{limit} = $opts{limit} if defined $opts{limit};
35 1 0       3 $params{size} = $opts{size} ? 1 : 0 if defined $opts{size};
    50          
36 1 50       4 $params{filters} = $opts{filters} if defined $opts{filters};
37 1         13 my $result = $self->client->get('/containers/json', params => \%params);
38 1   50     31 return $self->_wrap_list($result // []);
39             }
40              
41              
42             sub create {
43 1     1 1 49 my ($self, %config) = @_;
44 1         3 my %params;
45 1 50       7 $params{name} = delete $config{name} if defined $config{name};
46 1         16 my $result = $self->client->post('/containers/create', \%config, params => \%params);
47 1         26 return $result;
48             }
49              
50              
51             sub inspect {
52 2     2 1 643 my ($self, $id) = @_;
53 2 100       296 croak "Container ID required" unless $id;
54 1         15 my $result = $self->client->get("/containers/$id/json");
55 1         22 return $self->_wrap($result);
56             }
57              
58              
59             sub start {
60 2     2 1 1733 my ($self, $id) = @_;
61 2 100       168 croak "Container ID required" unless $id;
62 1         8 return $self->client->post("/containers/$id/start", undef);
63             }
64              
65              
66             sub stop {
67 2     2 1 1602 my ($self, $id, %opts) = @_;
68 2 100       189 croak "Container ID required" unless $id;
69 1         3 my %params;
70 1 50       7 $params{t} = $opts{timeout} if defined $opts{timeout};
71 1 50       5 $params{signal} = $opts{signal} if defined $opts{signal};
72 1         10 return $self->client->post("/containers/$id/stop", undef, params => \%params);
73             }
74              
75              
76             sub restart {
77 0     0 1 0 my ($self, $id, %opts) = @_;
78 0 0       0 croak "Container ID required" unless $id;
79 0         0 my %params;
80 0 0       0 $params{t} = $opts{timeout} if defined $opts{timeout};
81 0         0 return $self->client->post("/containers/$id/restart", undef, params => \%params);
82             }
83              
84              
85             sub kill {
86 0     0 1 0 my ($self, $id, %opts) = @_;
87 0 0       0 croak "Container ID required" unless $id;
88 0         0 my %params;
89 0 0       0 $params{signal} = $opts{signal} if defined $opts{signal};
90 0         0 return $self->client->post("/containers/$id/kill", undef, params => \%params);
91             }
92              
93              
94             sub remove {
95 1     1 1 601 my ($self, $id, %opts) = @_;
96 1 50       5 croak "Container ID required" unless $id;
97 1         3 my %params;
98 1 0       5 $params{v} = $opts{volumes} ? 1 : 0 if defined $opts{volumes};
    50          
99 1 0       7 $params{force} = $opts{force} ? 1 : 0 if defined $opts{force};
    50          
100 1 0       5 $params{link} = $opts{link} ? 1 : 0 if defined $opts{link};
    50          
101 1         17 return $self->client->delete_request("/containers/$id", params => \%params);
102             }
103              
104              
105             sub logs {
106 0     0 1 0 my ($self, $id, %opts) = @_;
107 0 0       0 croak "Container ID required" unless $id;
108 0         0 my %params;
109 0 0       0 $params{stdout} = defined $opts{stdout} ? ($opts{stdout} ? 1 : 0) : 1;
    0          
110 0 0       0 $params{stderr} = defined $opts{stderr} ? ($opts{stderr} ? 1 : 0) : 1;
    0          
111 0 0       0 $params{since} = $opts{since} if defined $opts{since};
112 0 0       0 $params{until} = $opts{until} if defined $opts{until};
113 0 0       0 $params{timestamps} = $opts{timestamps} ? 1 : 0 if defined $opts{timestamps};
    0          
114 0 0       0 $params{tail} = $opts{tail} if defined $opts{tail};
115 0         0 return $self->client->get("/containers/$id/logs", params => \%params);
116             }
117              
118              
119             sub top {
120 1     1 1 614 my ($self, $id, %opts) = @_;
121 1 50       6 croak "Container ID required" unless $id;
122 1         2 my %params;
123 1 50       5 $params{ps_args} = $opts{ps_args} if defined $opts{ps_args};
124 1         10 return $self->client->get("/containers/$id/top", params => \%params);
125             }
126              
127              
128             sub stats {
129 1     1 1 1264 my ($self, $id, %opts) = @_;
130 1 50       6 croak "Container ID required" unless $id;
131 1         3 my %params;
132 1         4 $params{stream} = 0;
133 1         3 $params{'one-shot'} = 1;
134 1         9 return $self->client->get("/containers/$id/stats", params => \%params);
135             }
136              
137              
138             sub wait {
139 0     0 1 0 my ($self, $id, %opts) = @_;
140 0 0       0 croak "Container ID required" unless $id;
141 0         0 my %params;
142 0 0       0 $params{condition} = $opts{condition} if defined $opts{condition};
143 0         0 return $self->client->post("/containers/$id/wait", undef, params => \%params);
144             }
145              
146              
147             sub pause {
148 1     1 1 1221 my ($self, $id) = @_;
149 1 50       7 croak "Container ID required" unless $id;
150 1         9 return $self->client->post("/containers/$id/pause", undef);
151             }
152              
153              
154             sub unpause {
155 1     1 1 623 my ($self, $id) = @_;
156 1 50       5 croak "Container ID required" unless $id;
157 1         9 return $self->client->post("/containers/$id/unpause", undef);
158             }
159              
160              
161             sub rename {
162 0     0 1   my ($self, $id, $name) = @_;
163 0 0         croak "Container ID required" unless $id;
164 0 0         croak "New name required" unless $name;
165 0           return $self->client->post("/containers/$id/rename", undef, params => { name => $name });
166             }
167              
168              
169             sub update {
170 0     0 1   my ($self, $id, %config) = @_;
171 0 0         croak "Container ID required" unless $id;
172 0           return $self->client->post("/containers/$id/update", \%config);
173             }
174              
175              
176             sub prune {
177 0     0 1   my ($self, %opts) = @_;
178 0           my %params;
179 0 0         $params{filters} = $opts{filters} if defined $opts{filters};
180 0           return $self->client->post('/containers/prune', undef, params => \%params);
181             }
182              
183              
184              
185             1;
186              
187             __END__