1 |
|
2 |
|
3 | import Modem = require('docker-modem')
|
4 |
|
5 | /**
|
6 | * Class representing a volume
|
7 | */
|
8 | export class Volume {
|
9 | modem: Modem
|
10 | id: String
|
11 | data: Object = {}
|
12 |
|
13 | /**
|
14 | * Create a volume
|
15 | * @param {Modem} modem Modem to connect to the remote service
|
16 | * @param {string} id Id of the volume (optional)
|
17 | */
|
18 | constructor (modem: Modem, id: String) {
|
19 | this.modem = modem
|
20 | this.id = id
|
21 | }
|
22 |
|
23 | /**
|
24 | * Get low-level information on a volume
|
25 | * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/inspect-a-volume
|
26 | * The reason why this module isn't called inspect is because that interferes with the inspect utility of node.
|
27 | * @param {Object} opts Query params in the request (optional)
|
28 | * @param {String} id ID of the volume to inspect, if it's not set, use the id of the object (optional)
|
29 | * @return {Promise} Promise return the volume
|
30 | */
|
31 | status (opts?: Object): Promise<Volume> {
|
32 | const call = {
|
33 | path: `/volumes/${this.id}?`,
|
34 | method: 'GET',
|
35 | options: opts,
|
36 | statusCodes: {
|
37 | 200: true,
|
38 | 404: 'no such volume',
|
39 | 500: 'server error'
|
40 | }
|
41 | }
|
42 |
|
43 | return new Promise((resolve, reject) => {
|
44 | this.modem.dial(call, (err, conf) => {
|
45 | if (err) return reject(err)
|
46 | const volume = new Volume(this.modem, this.id)
|
47 | volume.data = conf
|
48 | resolve(volume)
|
49 | })
|
50 | })
|
51 | }
|
52 |
|
53 | /**
|
54 | * Remove a volume from the filesystem
|
55 | * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/remove-a-volume
|
56 | * @param {Object} opts Query params in the request (optional)
|
57 | * @param {String} id ID of the volume to inspect, if it's not set, use the id of the object (optional)
|
58 | * @return {Promise} Promise return the result
|
59 | */
|
60 | remove (opts?: Object): Promise<{}> {
|
61 | const call = {
|
62 | path: `/volumes/${this.id}?`,
|
63 | method: 'DELETE',
|
64 | options: opts,
|
65 | statusCodes: {
|
66 | 204: true,
|
67 | 404: 'no such volume',
|
68 | 409: 'conflict',
|
69 | 500: 'server error'
|
70 | }
|
71 | }
|
72 |
|
73 | return new Promise((resolve, reject) => {
|
74 | this.modem.dial(call, (err) => {
|
75 | if (err) return reject(err)
|
76 | resolve()
|
77 | })
|
78 | })
|
79 | }
|
80 | }
|
81 |
|
82 | export default class {
|
83 | modem: Modem
|
84 |
|
85 | /**
|
86 | * Create a volume
|
87 | * @param {Modem} modem Modem to connect to the remote service
|
88 | * @param {string} id Id of the volume (optional)
|
89 | */
|
90 | constructor (modem: Modem) {
|
91 | this.modem = modem
|
92 | }
|
93 |
|
94 | /**
|
95 | * Get a Volume object
|
96 | * @param {id} String ID of the secret
|
97 | * @return {Volume}
|
98 | */
|
99 | get (id: String): Volume {
|
100 | return new Volume(this.modem, id)
|
101 | }
|
102 |
|
103 | /**
|
104 | * Get the list of volumes
|
105 | * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-volumes
|
106 | * @param {Object} opts Query params in the request (optional)
|
107 | * @return {Promise} Promise returning the result as a list of volumes
|
108 | */
|
109 | list (opts?: Object): Promise<Array<Volume>> {
|
110 | const call = {
|
111 | path: '/volumes',
|
112 | method: 'GET',
|
113 | options: opts,
|
114 | statusCodes: {
|
115 | 200: true,
|
116 | 500: 'server error'
|
117 | }
|
118 | }
|
119 |
|
120 | return new Promise((resolve, reject) => {
|
121 | this.modem.dial(call, (err, result) => {
|
122 | if (err) return reject(err)
|
123 | if (!result.Volumes || !result.Volumes.length) return resolve([])
|
124 | resolve(result.Volumes.map((conf) => {
|
125 | const volume = new Volume(this.modem, conf.Name)
|
126 | volume.data = conf
|
127 | return volume
|
128 | }))
|
129 | })
|
130 | })
|
131 | }
|
132 |
|
133 | /**
|
134 | * Create a volume
|
135 | * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/create-a-volume
|
136 | * @param {Object} opts Query params in the request (optional)
|
137 | * @return {Promise} Promise return the new volume
|
138 | */
|
139 | create (opts?: Object): Promise<Volume> {
|
140 | const call = {
|
141 | path: '/volumes/create?',
|
142 | method: 'POST',
|
143 | options: opts,
|
144 | statusCodes: {
|
145 | 201: true,
|
146 | 500: 'server error'
|
147 | }
|
148 | }
|
149 |
|
150 | return new Promise((resolve, reject) => {
|
151 | this.modem.dial(call, (err, conf) => {
|
152 | if (err) return reject(err)
|
153 | const volume = new Volume(this.modem, conf.Name)
|
154 | volume.data
|
155 | resolve(volume)
|
156 | })
|
157 | })
|
158 | }
|
159 |
|
160 | /**
|
161 | * Prune volumes
|
162 | * https://docs.docker.com/engine/api/v1.25/#operation/VolumePrune
|
163 | * @param {Object} opts Query params in the request (optional)
|
164 | * @return {Promise} Promise returning the container
|
165 | */
|
166 | prune (opts?: Object): Promise<Object> {
|
167 | const call = {
|
168 | path: `/volumes/prune`,
|
169 | method: 'POST',
|
170 | options: opts,
|
171 | statusCodes: {
|
172 | 200: true,
|
173 | 500: 'server error'
|
174 | }
|
175 | }
|
176 |
|
177 | return new Promise((resolve, reject) => {
|
178 | this.modem.dial(call, (err, res: Object) => {
|
179 | if (err) return reject(err)
|
180 | resolve(res)
|
181 | })
|
182 | })
|
183 | }
|
184 | }
|