Skip to content

Commit c7453a0

Browse files
committed
images pull
1 parent 3664455 commit c7453a0

File tree

5 files changed

+56
-29
lines changed

5 files changed

+56
-29
lines changed

compose.js

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,54 @@ const volumes = require('./lib/volumes');
66
const configs = require('./lib/configs');
77
const networks = require('./lib/networks');
88
const services = require('./lib/services');
9+
const tools = require('./lib/tools');
910

1011
class Compose {
11-
constructor(dockerode) {
12+
constructor(dockerode, file, projectName) {
1213
this.docker = dockerode;
14+
15+
if (file === undefined || projectName === undefined) {
16+
throw new Error('please specify a file and a project name');
17+
}
18+
19+
this.file = file;
20+
this.projectName = projectName;
21+
22+
try {
23+
this.recipe = yaml.load(fs.readFileSync(file, 'utf8'));
24+
} catch (e) {
25+
throw e;
26+
}
1327
}
1428

15-
async up(file, projectName) {
16-
var self = this;
29+
async up() {
1730
var output = {};
18-
if (projectName === undefined) {
19-
throw new Error('please specify a project name');
20-
}
21-
self.projectName = projectName;
2231
try {
23-
self.recipe = yaml.load(fs.readFileSync(file, 'utf8'));
24-
output.secrets = await secrets(self.docker, self.projectName, self.recipe, output);
25-
output.volumes = await volumes(self.docker, self.projectName, self.recipe, output);
26-
output.configs = await configs(self.docker, self.projectName, self.recipe, output);
27-
output.networks = await networks(self.docker, self.projectName, self.recipe, output);
28-
output.services = await services(self.docker, self.projectName, self.recipe, output);
32+
output.secrets = await secrets(this.docker, this.projectName, this.recipe, output);
33+
output.volumes = await volumes(this.docker, this.projectName, this.recipe, output);
34+
output.configs = await configs(this.docker, this.projectName, this.recipe, output);
35+
output.networks = await networks(this.docker, this.projectName, this.recipe, output);
36+
output.services = await services(this.docker, this.projectName, this.recipe, output);
2937
return output;
3038
} catch (e) {
3139
throw e;
3240
}
3341
}
42+
43+
//ToDo: create a version with followprogress with onFinished
44+
async pull(serviceN) {
45+
var streams = [];
46+
var serviceNames = (serviceN !== undefined) ? [serviceN] : tools.sortServices(this.recipe);
47+
for (var serviceName of serviceNames) {
48+
var service = this.recipe.services[serviceName];
49+
try {
50+
streams.push(await this.docker.pull(service.image));
51+
} catch (e) {
52+
throw e;
53+
}
54+
}
55+
return streams;
56+
}
3457
}
3558

3659
module.exports = Compose;

examples/compose.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

examples/pull.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var Dockerode = require('dockerode');
2+
var DockerodeCompose = require('../compose');
3+
4+
var docker = new Dockerode();
5+
var compose = new DockerodeCompose(docker, './test/assets/wordpress.yml', 'wordpress');
6+
7+
(async () => {
8+
console.log(await compose.pull());
9+
})();

examples/up.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var Dockerode = require('dockerode');
2+
var DockerodeCompose = require('../compose');
3+
4+
var docker = new Dockerode();
5+
var compose = new DockerodeCompose(docker, './test/assets/wordpress.yml', 'wordpress');
6+
7+
(async () => {
8+
var state = await compose.up();
9+
console.log(state);
10+
})();

test/assets/wordpress.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,4 @@ services:
2525
WORDPRESS_DB_PASSWORD: wordpress
2626
WORDPRESS_DB_NAME: wordpress
2727
volumes:
28-
db_data: {}
29-
secrets:
30-
server-secret:
31-
file: ./test/secret.txt
32-
server-secret-external:
33-
external: true
28+
db_data: {}

0 commit comments

Comments
 (0)