UNPKG

4.95 kBPlain TextView Raw
1'use strict'
2
3import Modem = require('docker-modem')
4
5/**
6 * Class representing a volume
7 */
8export 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
82export 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}