Skip to content

Commit ace1221

Browse files
authored
Merge pull request #2 from firstandthird/add-message
Update to include error message on wait and scale function
2 parents d759b65 + 20beb11 commit ace1221

3 files changed

Lines changed: 69 additions & 1 deletion

File tree

index.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class DockerServices {
7474
envRemove: Joi.array(),
7575
labels: Joi.object(),
7676
labelRemove: Joi.array(),
77+
replicas: Joi.number(),
7778
force: Joi.boolean()
7879
});
7980
if (validate.error) {
@@ -101,6 +102,12 @@ class DockerServices {
101102
spec.TaskTemplate.ContainerSpec.Labels = merged;
102103
}
103104

105+
if (options.replicas) {
106+
spec.Mode = spec.Mode || {};
107+
spec.Mode.Replicated = spec.Mode.Replicated || {};
108+
spec.Mode.Replicated.Replicas = options.replicas;
109+
}
110+
104111
if (options.force) {
105112
const updateCount = spec.TaskTemplate.ForceUpdate || 0;
106113
spec.TaskTemplate.ForceUpdate = updateCount + 1;
@@ -109,6 +116,10 @@ class DockerServices {
109116
return spec;
110117
}
111118

119+
scale(name, replicas) {
120+
return this.adjust(name, { replicas });
121+
}
122+
112123
async remove(name) {
113124
const service = await this.dockerClient.getService(name);
114125
return service.remove();
@@ -127,7 +138,8 @@ class DockerServices {
127138
tasks.forEach(tsk => {
128139
if (!existing.includes(tsk.ID)) {
129140
if (tsk.Status.State === 'failed' || tsk.Status.State === 'rejected') {
130-
throw new Error(`${tsk.ID} returned status ${tsk.Status.State}`);
141+
const errMessage = tsk.Status.Err || null;
142+
throw new Error(`${tsk.ID} returned status ${tsk.Status.State} with ${errMessage}`);
131143
}
132144
if (tsk.Status.State !== 'running') {
133145
finished = false;

test/adjust.test.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,44 @@ tap.test('adjust service if no env or labels', async (t) => {
120120
t.end();
121121
});
122122

123+
tap.test('adjust service replicas', async (t) => {
124+
const services = new Services();
125+
const name = `dummy-app${Math.floor(Math.random() * 1001)}`;
126+
await services.create({
127+
Name: name,
128+
TaskTemplate: {
129+
ContainerSpec: {
130+
Image: 'firstandthird/ops'
131+
}
132+
}
133+
});
134+
await services.adjust(name, {
135+
replicas: 2
136+
});
137+
const service = await services.get(name);
138+
await services.remove(name);
139+
t.equals(service.Spec.Mode.Replicated.Replicas, 2);
140+
t.end();
141+
});
142+
143+
tap.test('adjust using scale', async (t) => {
144+
const services = new Services();
145+
const name = `dummy-app${Math.floor(Math.random() * 1001)}`;
146+
await services.create({
147+
Name: name,
148+
TaskTemplate: {
149+
ContainerSpec: {
150+
Image: 'firstandthird/ops'
151+
}
152+
}
153+
});
154+
await services.scale(name, 3);
155+
const service = await services.get(name);
156+
await services.remove(name);
157+
t.equals(service.Spec.Mode.Replicated.Replicas, 3);
158+
t.end();
159+
});
160+
123161
tap.test('force: true', async (t) => {
124162
const services = new Services();
125163
const name = `dummy-app${Math.floor(Math.random() * 1001)}`;

test/adjustSpec.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,24 @@ tap.test('adjust service', (t) => {
6969
t.end();
7070
});
7171

72+
tap.test('adjust replica sizes', (t) => {
73+
const services = new Services();
74+
const name = `dummy-app${Math.floor(Math.random() * 1001)}`;
75+
const spec = {
76+
Name: name,
77+
TaskTemplate: {
78+
ContainerSpec: {
79+
Image: 'firstandthird/ops@sha256:b545c3b87e515299f6d6245d5f1eebcf1ed30328dca1e218fc9c6cebc75f9918',
80+
}
81+
}
82+
};
83+
const newSpec = services.adjustSpec(spec, {
84+
replicas: 3
85+
});
86+
t.equals(newSpec.Mode.Replicated.Replicas, 3);
87+
t.end();
88+
});
89+
7290
tap.test('remove digest if force', (t) => {
7391
const services = new Services();
7492
const name = `dummy-app${Math.floor(Math.random() * 1001)}`;

0 commit comments

Comments
 (0)