Skip to content

Commit

Permalink
Decouple "push" and "down" implementations (#778)
Browse files Browse the repository at this point in the history
* Decouple "push" and "down" implementations

Signed-off-by: Pablo Chico de Guzman <pchico83@gmail.com>

* Apply suggestions from code review

Co-Authored-By: Ramiro Berrelleza <ramiro@okteto.com>
Signed-off-by: Pablo Chico de Guzman <pchico83@gmail.com>

Co-authored-by: Ramiro Berrelleza <ramiro@okteto.com>
  • Loading branch information
pchico83 and rberrelleza committed Mar 25, 2020
1 parent 8f5d6b7 commit 3951161
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 38 deletions.
2 changes: 1 addition & 1 deletion cmd/down.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func runDown(dev *model.Dev) error {
return err
}

err = down.Run(dev, "", d, trList, client)
err = down.Run(dev, d, trList, true, client)
if err != nil {
return err
}
Expand Down
34 changes: 32 additions & 2 deletions cmd/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,22 @@ func runPush(dev *model.Dev, autoDeploy bool, imageTag, oktetoRegistryURL, progr
if err != nil {
return err
}
for _, tr := range trList {
if tr.Deployment == nil {
continue
}
if len(dev.Services) == 0 {
delete(tr.Deployment.Annotations, model.OktetoAutoCreateAnnotation)
}
}

if d != nil && deployments.IsDevModeOn(d) {
if err := down.Run(dev, d, trList, false, c); err != nil {
return err
}
log.Information("Development environment deactivated")
}

imageFromDeployment, err := getImageFromDeployment(trList)
if err != nil {
return err
Expand Down Expand Up @@ -163,8 +179,19 @@ func runPush(dev *model.Dev, autoDeploy bool, imageTag, oktetoRegistryURL, progr
return err
}
} else {
err = down.Run(dev, imageTag, d, trList, c)
if err != nil {
for _, tr := range trList {
if tr.Deployment == nil {
continue
}
for _, rule := range tr.Rules {
devContainer := deployments.GetDevContainer(&tr.Deployment.Spec.Template.Spec, rule.Container)
if devContainer == nil {
return fmt.Errorf("Container '%s' not found in deployment '%s'", rule.Container, d.GetName())
}
devContainer.Image = imageTag
}
}
if err := deployments.UpdateDeployments(trList, c); err != nil {
return err
}
}
Expand All @@ -178,6 +205,9 @@ func getImageFromDeployment(trList map[string]*model.Translation) (string, error
if tr.Deployment == nil {
continue
}
if tr.Deployment.Annotations[model.OktetoAutoCreateAnnotation] != "" && len(trList) > 1 {
continue
}
for _, rule := range tr.Rules {
devContainer := deployments.GetDevContainer(&tr.Deployment.Spec.Template.Spec, rule.Container)
if devContainer == nil {
Expand Down
30 changes: 16 additions & 14 deletions pkg/cmd/down/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
)

//Run runs the "okteto down" sequence
func Run(dev *model.Dev, imageToRedeploy string, d *appsv1.Deployment, trList map[string]*model.Translation, c *kubernetes.Clientset) error {
func Run(dev *model.Dev, d *appsv1.Deployment, trList map[string]*model.Translation, wait bool, c *kubernetes.Clientset) error {
if len(trList) == 0 {
log.Info("no translations available in the deployment")
}
Expand All @@ -35,14 +35,14 @@ func Run(dev *model.Dev, imageToRedeploy string, d *appsv1.Deployment, trList ma
if tr.Deployment == nil {
continue
}
if imageToRedeploy != "" {
if tr.Deployment.Annotations != nil {
delete(tr.Deployment.Annotations, model.OktetoAutoCreateAnnotation)
}
}
if err := deployments.DevModeOff(tr, imageToRedeploy, c); err != nil {
dTmp, err := deployments.TranslateDevModeOff(tr.Deployment)
if err != nil {
return err
}
tr.Deployment = dTmp
}
if err := deployments.UpdateDeployments(trList, c); err != nil {
return err
}

if err := secrets.Destroy(dev, c); err != nil {
Expand All @@ -60,14 +60,16 @@ func Run(dev *model.Dev, imageToRedeploy string, d *appsv1.Deployment, trList ma
}

if _, ok := d.Annotations[model.OktetoAutoCreateAnnotation]; ok {
if len(dev.Services) > 0 || imageToRedeploy == "" {
if err := deployments.Destroy(dev, c); err != nil {
return err
}
if err := services.DestroyDev(dev, c); err != nil {
return err
}
if err := deployments.Destroy(dev, c); err != nil {
return err
}
if err := services.DestroyDev(dev, c); err != nil {
return err
}
}

if !wait {
return nil
}

waitForDevPodsTermination(c, dev, 30)
Expand Down
29 changes: 10 additions & 19 deletions pkg/k8s/deployments/crud.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,30 +204,21 @@ func HasBeenChanged(d *appsv1.Deployment) bool {
return oktetoRevision != d.Annotations[revisionAnnotation]
}

// DevModeOff deactivates dev mode for d
func DevModeOff(tr *model.Translation, imageToRedeploy string, c *kubernetes.Clientset) error {
d, err := translateDevModeOff(tr.Deployment)
tr.Deployment = d
if err != nil {
return err
}
if imageToRedeploy != "" {
for _, rule := range tr.Rules {
devContainer := GetDevContainer(&d.Spec.Template.Spec, rule.Container)
if devContainer == nil {
return fmt.Errorf("Container '%s' not found in deployment '%s'", rule.Container, d.GetName())
}

devContainer.Image = imageToRedeploy
// UpdateDeployments update all deployments in the given translation list
func UpdateDeployments(trList map[string]*model.Translation, c *kubernetes.Clientset) error {
for _, tr := range trList {
if tr.Deployment == nil {
continue
}
if err := update(tr.Deployment, c); err != nil {
return err
}
}
if err := update(d, c); err != nil {
return err
}
return nil
}

func translateDevModeOff(d *appsv1.Deployment) (*appsv1.Deployment, error) {
//TranslateDevModeOff reverses the dev mode translation
func TranslateDevModeOff(d *appsv1.Deployment) (*appsv1.Deployment, error) {
trRulesJSON := getAnnotation(d.Spec.Template.GetObjectMeta(), okLabels.TranslationAnnotation)
if len(trRulesJSON) == 0 {
dManifest := getAnnotation(d.GetObjectMeta(), oktetoDeploymentAnnotation)
Expand Down
4 changes: 2 additions & 2 deletions pkg/k8s/deployments/translate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ services:
t.Fatalf("Wrong d1 generation.\nActual %+v, \nExpected %+v", string(marshalled1), string(marshalled1OK))
}

d1Down, err := translateDevModeOff(d1)
d1Down, err := TranslateDevModeOff(d1)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -334,7 +334,7 @@ services:
t.Fatalf("Wrong d2 generation.\nActual %s, \nExpected %s", string(marshalled2), string(marshalled2OK))
}

d2Down, err := translateDevModeOff(d2)
d2Down, err := TranslateDevModeOff(d2)
if err != nil {
t.Fatal(err)
}
Expand Down

0 comments on commit 3951161

Please sign in to comment.