@@ -138,25 +138,36 @@ func (m Module) Deploy(modulesSettings interface{}) error {
138138 return err
139139 }
140140
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" ,
148145 }
149146
147+ oldComposeFilePath := ""
150148 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 )
158151 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 ())
160171 }
161172 }
162173
@@ -177,17 +188,13 @@ func (m Module) Deploy(modulesSettings interface{}) error {
177188 if err != nil {
178189 return err
179190 }
191+ dockerComposeResource .Content = composeFileContent
180192
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 },
191198 })
192199
193200 var containerResources []system.Resource
@@ -202,14 +209,22 @@ func (m Module) Deploy(modulesSettings interface{}) error {
202209 })
203210 }
204211
205- system .Context .Resources = append (system .Context .Resources , system.ResourceGroup {
212+ system .Context .CurrentDeployment . ResourceGroups = append (system .Context .CurrentDeployment . ResourceGroups , system.ResourceGroup {
206213 Name : "container-docker-" + system .Context .Project .Name + "-containers" ,
207214 Resources : containerResources ,
208215 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+
209225 // Start Docker Compose
210226 // 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 {
213228 if stderr .Len () > 0 {
214229 return fmt .Errorf ("Unable to start Docker containers: " + stderr .String ())
215230 }
@@ -223,10 +238,18 @@ func (m Module) Deploy(modulesSettings interface{}) error {
223238 return nil
224239 },
225240 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+
226250 // Stop Docker Compose
227251 // 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 {
230253 if stderr .Len () > 0 {
231254 return fmt .Errorf ("Unable to stop Docker containers: " + stderr .String ())
232255 }
0 commit comments