UNPKG

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