Runnable/loki

View on GitHub
lib/swarm.js

Summary

Maintainability
B
5 hrs
Test Coverage
'use strict'

const Promise = require('bluebird')
const Swarmerode = require('swarmerode')
const Dockerode = require('dockerode')
const SwarmedDockerode = Swarmerode(Dockerode)

const BaseDockerClient = require('./base')

/**
 * Base Swarm client with batteries. Can be extended
 * @param {Object} opts - docker options
 * @class
 * @extends loki:Base
 * @author Anton Podviaznikov
 */
class Swarm extends BaseDockerClient {

  constructor (opts) {
    opts = opts || {}
    opts.targetType = 'swarm'
    super(SwarmedDockerode, opts)
  }
}

/**
 * Import all the Swarmerode.prototype methods: cps and promised based
 */
const allSwarmFuncs = Object.getOwnPropertyNames(SwarmedDockerode.prototype)
// clone array without constructor
const swarmFuncs = allSwarmFuncs.filter((func) => {
  return func !== 'constructor'
})

swarmFuncs.forEach((key) => {
  // put every function from Swarmed Dockerode into the `Swarm.prototype`
  Swarm.prototype[key] = function () {
    const args = Array.from(arguments)
    return this.client[key].apply(this.client, args)
  }
  // promisify every function from Dockerode and put it into the `Swarm.prototype`
  Swarm.prototype[key + BaseDockerClient.PROMISIFIED_SUFFIX] = Promise.promisify(Swarm.prototype[key])
})

module.exports = Swarm