UNPKG

6.34 kBPlain TextView Raw
1'use strict'
2
3import Modem = require('docker-modem')
4
5/**
6 * Class reprensenting a network
7 */
8export class Network {
9 modem: Modem
10 id: String
11 data: Object = {}
12
13 /**
14 * Creates a new network
15 * @param {Modem} modem Modem to connect to the remote service
16 * @param {string} id Id of the network (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 network
25 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/inspect-network
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 * @return {Promise} Promise return the network
29 */
30 status (opts?: Object) {
31 const call = {
32 path: `/networks/${this.id}?`,
33 method: 'GET',
34 options: opts,
35 statusCodes: {
36 200: true,
37 404: 'no such network',
38 500: 'server error'
39 }
40 }
41
42 return new Promise((resolve, reject) => {
43 this.modem.dial(call, (err, conf) => {
44 if (err) return reject(err)
45 const network = new Network(this.modem, this.id)
46 network.data = conf
47 resolve(network)
48 })
49 })
50 }
51
52 /**
53 * Remove a network
54 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/remove-a-network
55 * @param {Object} opts Query params in the request (optional)
56 * @return {Promise} Promise return the result
57 */
58 remove (opts?: Object): Promise<{}> {
59 const call = {
60 path: `/networks/${this.id}?`,
61 method: 'DELETE',
62 options: opts,
63 statusCodes: {
64 204: true,
65 404: 'no such network',
66 500: 'server error'
67 }
68 }
69
70 return new Promise((resolve, reject) => {
71 this.modem.dial(call, (err) => {
72 if (err) return reject(err)
73 resolve()
74 })
75 })
76 }
77
78 /**
79 * Connect a container into the network
80 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/connect-a-container-to-a-network
81 * @param {Object} opts Query params in the request (optional)
82 * @return {Promise} Promise return the network
83 */
84 connect (opts?: Object) {
85 const call = {
86 path: `/networks/${this.id}/connect?`,
87 method: 'POST',
88 options: opts,
89 statusCodes: {
90 200: true,
91 403: 'operation not supported for swarm scoped network',
92 404: 'network or container not found',
93 500: 'server error'
94 }
95 }
96
97 return new Promise((resolve, reject) => {
98 this.modem.dial(call, (err, conf) => {
99 if (err) return reject(err)
100 const network = new Network(this.modem, this.id)
101 network.data = conf
102 resolve(network)
103 })
104 })
105 }
106
107 /**
108 * Disonnect a container into the network
109 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/disconnect-a-container-from-a-network
110 * @param {Object} opts Query params in the request (optional)
111 * @return {Promise} Promise return the network
112 */
113 disconnect (opts?: Object): Promise<Network> {
114 const call = {
115 path: `/networks/${this.id}/disconnect?`,
116 method: 'POST',
117 options: opts,
118 statusCodes: {
119 200: true,
120 403: 'operation not supported for swarm scoped network',
121 404: 'network or container not found',
122 500: 'server error'
123 }
124 }
125
126 return new Promise((resolve, reject) => {
127 this.modem.dial(call, (err, conf) => {
128 if (err) return reject(err)
129 const network = new Network(this.modem, this.id)
130 network.data = conf
131 resolve(network)
132 })
133 })
134 }
135}
136
137export default class {
138 modem: Modem
139
140 constructor (modem: Modem) {
141 this.modem = modem
142 }
143
144 /**
145 * Get a Network object
146 * @param {id} string ID of the secret
147 * @return {Network}
148 */
149 get (id: String): Network {
150 return new Network(this.modem, id)
151 }
152
153 /**
154 * Get the list of networks
155 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-networks
156 * @param {Object} opts Query params in the request (optional)
157 * @return {Promise} Promise returning the result as a list of networks
158 */
159 list (opts?: Object): Promise<Array<Network>> {
160 const call = {
161 path: '/networks?',
162 method: 'GET',
163 options: opts,
164 statusCodes: {
165 200: true,
166 500: 'server error'
167 }
168 }
169
170 return new Promise((resolve, reject) => {
171 this.modem.dial(call, (err, networks) => {
172 if (err) return reject(err)
173 if (!networks || !networks.length) return resolve([])
174 resolve(networks.map((conf) => {
175 const network = new Network(this.modem, conf.Id)
176 network.data = conf
177 return network
178 }))
179 })
180 })
181 }
182
183 /**
184 * Create a network
185 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/create-a-network
186 * @param {Object} opts Query params in the request (optional)
187 * @return {Promise} Promise return the new network
188 */
189 create (opts?: Object): Promise<Network> {
190 const call = {
191 path: '/networks/create?',
192 method: 'POST',
193 options: opts,
194 statusCodes: {
195 201: true,
196 404: 'plugin not found',
197 500: 'server error'
198 }
199 }
200
201 return new Promise((resolve, reject) => {
202 this.modem.dial(call, (err, conf) => {
203 if (err) return reject(err)
204 const network = new Network(this.modem, conf.Id)
205 network.data = conf
206 resolve(network)
207 })
208 })
209 }
210
211 /**
212 * Prune network
213 * https://docs.docker.com/engine/api/v1.25/#operation/NetworkPrune
214 * @param {Object} opts Query params in the request (optional)
215 * @return {Promise} Promise returning the container
216 */
217 prune (opts?: Object): Promise<Object> {
218 const call = {
219 path: `/networks/prune`,
220 method: 'POST',
221 options: opts,
222 statusCodes: {
223 200: true,
224 500: 'server error'
225 }
226 }
227
228 return new Promise((resolve, reject) => {
229 this.modem.dial(call, (err, res: Object) => {
230 if (err) return reject(err)
231 resolve(res)
232 })
233 })
234 }
235}