37 lines
825 B
JavaScript
37 lines
825 B
JavaScript
'use strict';
|
|
|
|
const ejs = require('ejs');
|
|
const shell = require('shelljs');
|
|
const _ = require('lodash');
|
|
const Docker = require('dockerode');
|
|
|
|
const DockerPool = (function () {
|
|
const DEFAULT_DOCKER_OPTIONS = { socketPath: '/var/run/docker.sock' };
|
|
const HOSTS = Symbol('hosts');
|
|
return class DockerPool {
|
|
constructor(hosts) {
|
|
hosts = hosts || DEFAULT_DOCKER_OPTIONS;
|
|
this[HOSTS] = [].concat(hosts);
|
|
}
|
|
rotate(num) {
|
|
num = num || 1;
|
|
this[HOSTS].unshift.apply( this[HOSTS], this[HOSTS].splice( num, this[HOSTS].length ) );
|
|
return this[HOSTS];
|
|
}
|
|
get hosts() {
|
|
return this[HOSTS].map((host) => new Docker(host));
|
|
}
|
|
next() {
|
|
this.rotate(1);
|
|
return this.hosts[0];
|
|
}
|
|
valueOf() {
|
|
return this.next();
|
|
}
|
|
get host() {
|
|
return this.next();
|
|
}
|
|
};
|
|
})();
|
|
|
|
module.exports = DockerPool; |