@@ -138,25 +138,36 @@ func (m Module) Deploy(modulesSettings interface{}) error {
138
138
return err
139
139
}
140
140
141
- composeFileRemotePath := system .Context .Project .GetDirectoryPath () + "/docker-compose.yaml"
142
-
143
- hasRemoteFile , err := xfs .HasFile ("ssh://" + composeFileRemotePath )
144
- if err != nil && err .Error () == "file does not exist" {
145
- hasRemoteFile = false
146
- } else if err != nil {
147
- return fmt .Errorf ("Unable to check state of remote docker-compose.yaml from previous deployment: " + err .Error ())
141
+ dockerComposeResource := system.Resource {
142
+ Type : system .TypeFile ,
143
+ Operation : system .OperationCreate ,
144
+ Name : "docker-compose.yaml" ,
148
145
}
149
146
147
+ oldComposeFilePath := ""
150
148
var remoteComposeObjMap map [string ]interface {}
151
- if hasRemoteFile {
152
- remoteComposeObj := docker_compose.DockerCompose {}
153
- remoteComposeContent , err := xfs .ReadFile ("ssh://" + composeFileRemotePath )
154
- if err := yaml .Unmarshal ([]byte (remoteComposeContent ), & remoteComposeObj ); err != nil {
155
- return fmt .Errorf ("unable to read remote docker-compose.yaml file from previous deployment: " + err .Error ())
156
- }
157
- remoteComposeObjMap , err = remoteComposeObj .Map ()
149
+ if system .Context .LatestDeployment != nil {
150
+ dockerComposeFilePathOld , err := system .Context .LatestDeployment .GetResourcePath (dockerComposeResource )
158
151
if err != nil {
159
- return fmt .Errorf ("unable to process remote docker-compose.yaml file from previous deployment: " + err .Error ())
152
+ return err
153
+ }
154
+ oldComposeFilePath = dockerComposeFilePathOld
155
+ hasRemoteFile , err := xfs .HasFile ("ssh://" + oldComposeFilePath )
156
+ if err != nil && hasRemoteFile {
157
+ remoteComposeContent , err := xfs .ReadFile ("ssh://" + oldComposeFilePath )
158
+ if err != nil {
159
+ return fmt .Errorf ("unable to read remote docker-compose.yaml file from previous deployment: " + err .Error ())
160
+ }
161
+ remoteComposeObj := docker_compose.DockerCompose {}
162
+ if err := yaml .Unmarshal ([]byte (remoteComposeContent ), & remoteComposeObj ); err != nil {
163
+ return fmt .Errorf ("unable to read remote docker-compose.yaml file from previous deployment: " + err .Error ())
164
+ }
165
+ remoteComposeObjMap , err = remoteComposeObj .Map ()
166
+ if err != nil {
167
+ return fmt .Errorf ("unable to process remote docker-compose.yaml file from previous deployment: " + err .Error ())
168
+ }
169
+ } else if err != nil && err .Error () != "file does not exist" {
170
+ return fmt .Errorf ("Unable to check state of remote docker-compose.yaml from previous deployment: " + err .Error ())
160
171
}
161
172
}
162
173
@@ -177,17 +188,13 @@ func (m Module) Deploy(modulesSettings interface{}) error {
177
188
if err != nil {
178
189
return err
179
190
}
191
+ dockerComposeResource .Content = composeFileContent
180
192
181
- system .Context .Resources = append (system .Context .Resources , system.ResourceGroup {
182
- Name : "container-docker-" + system .Context .Project .Name + "-composefile" ,
183
- Resources : []system.Resource {
184
- {
185
- Type : system .TypeFile ,
186
- Operation : system .OperationCreate ,
187
- Name : composeFileRemotePath ,
188
- Content : composeFileContent ,
189
- },
190
- },
193
+ dockerComposeFilePathNew , _ := system .Context .CurrentDeployment .GetResourcePath (dockerComposeResource )
194
+
195
+ system .Context .CurrentDeployment .ResourceGroups = append (system .Context .CurrentDeployment .ResourceGroups , system.ResourceGroup {
196
+ Name : "container-docker-" + system .Context .Project .Name + "-composefile" ,
197
+ Resources : []system.Resource {dockerComposeResource },
191
198
})
192
199
193
200
var containerResources []system.Resource
@@ -202,14 +209,22 @@ func (m Module) Deploy(modulesSettings interface{}) error {
202
209
})
203
210
}
204
211
205
- system .Context .Resources = append (system .Context .Resources , system.ResourceGroup {
212
+ system .Context .CurrentDeployment . ResourceGroups = append (system .Context .CurrentDeployment . ResourceGroups , system.ResourceGroup {
206
213
Name : "container-docker-" + system .Context .Project .Name + "-containers" ,
207
214
Resources : containerResources ,
208
215
ApplyResourceFunc : func () error {
216
+ // Stop old Docker Compose containers
217
+ // todo: allow using either docker-compose or "docker compose" whichever is available (prefer "docker compose")
218
+ if _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"down" }, WorkingDir : path .Dir (oldComposeFilePath )}); err != nil {
219
+ if stderr .Len () > 0 {
220
+ return fmt .Errorf ("Unable to stop old Docker containers: " + stderr .String ())
221
+ }
222
+ return fmt .Errorf ("Unable to stop old Docker containers: " + err .Error ())
223
+ }
224
+
209
225
// Start Docker Compose
210
226
// todo: allow using either docker-compose or "docker compose" whichever is available (prefer "docker compose")
211
- _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"up" , "-d" }, WorkingDir : system .Context .Project .GetDirectoryPath ()})
212
- if err != nil {
227
+ if _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"up" , "-d" }, WorkingDir : path .Dir (dockerComposeFilePathNew )}); err != nil {
213
228
if stderr .Len () > 0 {
214
229
return fmt .Errorf ("Unable to start Docker containers: " + stderr .String ())
215
230
}
@@ -223,10 +238,18 @@ func (m Module) Deploy(modulesSettings interface{}) error {
223
238
return nil
224
239
},
225
240
RollbackResourceFunc : func () error {
241
+ // Start old containers again
242
+ // todo: allow using either docker-compose or "docker compose" whichever is available (prefer "docker compose")
243
+ if _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"up" , "-d" }, WorkingDir : path .Dir (oldComposeFilePath )}); err != nil {
244
+ if stderr .Len () > 0 {
245
+ return fmt .Errorf ("Unable to stop Docker containers: " + stderr .String ())
246
+ }
247
+ return fmt .Errorf ("Unable to stop Docker containers: " + err .Error ())
248
+ }
249
+
226
250
// Stop Docker Compose
227
251
// todo: allow using either docker-compose or "docker compose" whichever is available (prefer "docker compose")
228
- _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"down" }, WorkingDir : system .Context .Project .GetDirectoryPath ()})
229
- if err != nil {
252
+ if _ , stderr , err := system .RemoteRun ("docker compose" , system.RemoteRunOpts {Args : []string {"down" }, WorkingDir : path .Dir (dockerComposeFilePathNew )}); err != nil {
230
253
if stderr .Len () > 0 {
231
254
return fmt .Errorf ("Unable to stop Docker containers: " + stderr .String ())
232
255
}
0 commit comments