UNPKG

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