blob: 9ea4b24c31c007223dacce718d5cb030fa2323e1 [file] [log] [blame]
'use strict'
import Modem = require('docker-modem')
import { Node } from './node'
/**
* Class reprensenting a swarm
*/
export default class Swarm {
modem: Modem
data: Object = {}
/**
* Creates a new swarm
* @param {Modem} modem Modem to connect to the remote service
*/
constructor (modem: Modem) {
this.modem = modem
}
/**
* Initialize a new swarm
* https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/initialize-a-new-swarm
* @param {Object} opts Query params in the request (optional)
* @return {Promise} Promise return the new node
*/
init (opts?: Object): Promise<Node> {
const call = {
path: '/swarm/init?',
method: 'POST',
options: opts,
statusCodes: {
200: true,
400: 'bad parameter',
406: 'node is already part of a swarm'
}
}
return new Promise((resolve, reject) => {
this.modem.dial(call, (err, nodeId) => {
if (err) return reject(err)
const node = new Node(this.modem, nodeId)
resolve(node)
})
})
}
/**
* Get low-level information on a swarm
* https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/inspect-swarm
* The reason why this module isn't called inspect is because that interferes with the inspect utility of node.
* @param {Object} opts Query params in the request (optional)
* @return {Promise} Promise return the swarm
*/
status (opts?: Object): Promise<Swarm> {
const call = {
path: `/swarm?`,
method: 'GET',
options: opts,
statusCodes: {
200: true,
404: 'no such swarm',
500: 'server error'
}
}
return new Promise((resolve, reject) => {
this.modem.dial(call, (err, conf) => {
if (err) return reject(err)
const swarm = new Swarm(this.modem)
swarm.data = conf
resolve(swarm)
})
})
}
/**
* Join a swarm
* https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/join-an-existing-swarm
* @param {Object} opts Query params in the request (optional)
* @return {Promise} Promise return the result
*/
join (opts?: Object): Promise<String> {
const call = {
path: `/swarm/join?`,
method: 'POST',
options: opts,
statusCodes: {
200: true,
400: 'bad parameter',
406: 'node is already part of a swarm'
}
}
return new Promise((resolve, reject) => {
this.modem.dial(call, (err, id: string) => {
if (err) return reject(err)
resolve(id)
})
})
}
/**
* Leave a swarm
* https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/leave-a-swarm
* @param {Object} opts Query params in the request (optional)
* @return {Promise} Promise return the swarm
*/
leave (opts?: Object): Promise<String> {
const call = {
path: `/swarm/leave?`,
method: 'POST',
options: opts,
statusCodes: {
200: true,
406: 'node is not part of a swarm'
}
}
return new Promise((resolve, reject) => {
this.modem.dial(call, (err, res: string) => {
if (err) return reject(err)
resolve(res)
})
})
}
/**
* Update a swarm
* https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/update-a-swarm
* @param {Object} opts Query params in the request (optional)
* @return {Promise} Promise return the swarm
*/
update (opts?: Object): Promise<String> {
const call = {
path: `/swarm/update?`,
method: 'POST',
options: opts,
statusCodes: {
200: true,
400: 'bad parameter',
406: 'node is already part of a swarm'
}
}
return new Promise((resolve, reject) => {
this.modem.dial(call, (err, res: string) => {
if (err) return reject(err)
resolve(res)
})
})
}
}