Skip to content

Commit

Permalink
Added links and hosts support. Closes thenativeweb/org#222
Browse files Browse the repository at this point in the history
  • Loading branch information
goloroden committed Feb 26, 2015
1 parent 7169f23 commit 818231c
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 26 deletions.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,15 @@ dockWorker.getRunningContainersFor('my-image', function (err, containers) {
// },
// volumes: [
// { container: '/data', host: '/home/janedoe/foo' }
// ]
// ],
// links: [
// { name: 'your-container', alias: 'yours' }
// ],
// network: {
// hosts: [
// { name: 'example.com', ip: '192.168.0.1' }
// ]
// }
// }
// ]
});
Expand Down
24 changes: 23 additions & 1 deletion lib/DockWorker.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@ DockWorker.prototype.getRunningContainersFor = function (name, callback) {

containers = _.map(containers, function (container) {
var environmentVariables = container.Config.Env,
links = container.HostConfig.Links,
network = {
hosts: container.HostConfig.ExtraHosts
},
ports = container.HostConfig.PortBindings,
volumes = container.HostConfig.Binds;

Expand All @@ -228,6 +232,22 @@ DockWorker.prototype.getRunningContainersFor = function (name, callback) {
_.pluck(environmentVariables, 'value')
);

links = _.map(links, function (link) {
var parts = link.split(':');
return {
name: parts[0].substring(parts[0].lastIndexOf('/') + 1),
alias: parts[1].substring(parts[1].lastIndexOf('/') + 1)
};
});

network.hosts = _.map(network.hosts, function (hostEntry) {
var parts = hostEntry.split(':');
return {
name: parts[0],
ip: parts[1]
};
});

volumes = _.map(volumes, function (volume) {
var parts = volume.split(':');
return {
Expand All @@ -237,10 +257,12 @@ DockWorker.prototype.getRunningContainersFor = function (name, callback) {
});

return {
env: environmentVariables,
image: name,
links: links,
name: container.Name.substring(1),
network: network,
ports: ports,
env: environmentVariables,
volumes: volumes
};
});
Expand Down
77 changes: 53 additions & 24 deletions test/DockWorkerTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -531,31 +531,60 @@ suite('DockWorker', function () {
test('returns an array of containers.', function (done) {
dockWorker.startContainer({
image: settings.image,
name: settings.containerName,
ports: [
{ container: 3000, host: 3000 }
],
env: {
port: 3000
},
volumes: [
{ container: '/data1', host: path.join(__dirname, 'testBox', 'toBeMounted') }
]
}, function (errStartContainer) {
assert.that(errStartContainer).is.null();

dockWorker.getRunningContainersFor(settings.image, function (err, containers) {
assert.that(err).is.null();
assert.that(containers.length).is.equalTo(1);
assert.that(containers[0].image).is.equalTo(settings.image);
assert.that(containers[0].name).is.equalTo(settings.containerName);
assert.that(containers[0].ports.length).is.equalTo(1);
assert.that(containers[0].ports[0]).is.equalTo({ container: 3000, host: 3000 });
assert.that(containers[0].env.PORT).is.equalTo('3000');
assert.that(containers[0].volumes.length).is.equalTo(1);
assert.that(containers[0].volumes[0]).is.equalTo({ container: '/data1', host: path.join(__dirname, 'testBox', 'toBeMounted') });
name: settings.containerName + '1'
}, function (errStartContainer1) {
assert.that(errStartContainer1).is.null();
dockWorker.startContainer({
image: settings.image,
name: settings.containerName + '2',
ports: [
{ container: 3000, host: 3000 }
],
env: {
port: 3000
},
volumes: [
{ container: '/data1', host: path.join(__dirname, 'testBox', 'toBeMounted') }
],
links: [
{ name: settings.containerName + '1', alias: 'foobar' }
],
network: {
hosts: [
{ name: 'example.com', ip: '192.168.0.1' }
]
}
}, function (errStartContainer) {
assert.that(errStartContainer).is.null();

dockWorker.stopContainer(settings.containerName, done);
dockWorker.getRunningContainersFor(settings.image, function (errGetRunningContainersFor, containers) {
assert.that(errGetRunningContainersFor).is.null();
assert.that(containers.length).is.equalTo(2);

assert.that(containers[0].image).is.equalTo(settings.image);
assert.that(containers[0].name).is.equalTo(settings.containerName + '2');
assert.that(containers[0].ports.length).is.equalTo(1);
assert.that(containers[0].ports[0]).is.equalTo({ container: 3000, host: 3000 });
assert.that(containers[0].env.PORT).is.equalTo('3000');
assert.that(containers[0].volumes.length).is.equalTo(1);
assert.that(containers[0].volumes[0]).is.equalTo({ container: '/data1', host: path.join(__dirname, 'testBox', 'toBeMounted') });
assert.that(containers[0].links.length).is.equalTo(1);
assert.that(containers[0].links[0]).is.equalTo({ name: settings.containerName + '1', alias: 'foobar' });
assert.that(containers[0].network.hosts.length).is.equalTo(1);
assert.that(containers[0].network.hosts[0]).is.equalTo({ name: 'example.com', ip: '192.168.0.1' });

assert.that(containers[1].image).is.equalTo(settings.image);
assert.that(containers[1].name).is.equalTo(settings.containerName + '1');
assert.that(containers[1].ports).is.equalTo([]);
assert.that(containers[1].volumes).is.equalTo([]);
assert.that(containers[1].links).is.equalTo([]);
assert.that(containers[1].network.hosts).is.equalTo([]);

dockWorker.stopContainer(settings.containerName + '2', function (err) {
assert.that(err).is.null();
dockWorker.stopContainer(settings.containerName + '1', done);
});
});
});
});
});
Expand Down

0 comments on commit 818231c

Please sign in to comment.