@@ -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 ;
0 commit comments