Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new take on "Kompose will keep trying its job #477" #536

Merged
merged 2 commits into from
Apr 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion pkg/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,9 @@ func Down(opt kobject.ConvertOptions) {
//Remove deployed application
errUndeploy := t.Undeploy(komposeObject, opt)
if errUndeploy != nil {
log.Fatalf("Error while deleting application: %s", errUndeploy)
for _, err = range errUndeploy {
log.Fatalf("Error while deleting application: %s", err)
}
}

}
Expand Down
53 changes: 35 additions & 18 deletions pkg/transformer/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -691,17 +691,19 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con
}

// Undeploy deletes deployed objects from Kubernetes cluster
func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []error {
var errorList []error
//Convert komposeObject
objects, err := k.Transform(komposeObject, opt)

if err != nil {
return errors.Wrap(err, "k.Transform failed")
errorList = append(errorList, err)
return errorList
}

client, namespace, err := k.GetKubernetesClient()
if err != nil {
return err
errorList = append(errorList, err)
return errorList
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is better! 👍

}

for _, v := range objects {
Expand All @@ -713,55 +715,65 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
//delete deployment
deployment, err := client.Deployments(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range deployment.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client)
if err != nil {
return err
errorList = append(errorList, err)
break
}
//FIXME: gracePeriod is nil
err = rpDeployment.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Deployment: %s", t.Name)

}
}

case *api.Service:
//delete svc
svc, err := client.Services(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range svc.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
rpService, err := kubectl.ReaperFor(api.Kind("Service"), client)
if err != nil {
return err
errorList = append(errorList, err)
break
}
//FIXME: gracePeriod is nil
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Service: %s", t.Name)

}
}

case *api.PersistentVolumeClaim:
// delete pvc
pvc, err := client.PersistentVolumeClaims(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range pvc.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
err = client.PersistentVolumeClaims(namespace).Delete(t.Name)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
}
Expand All @@ -777,14 +789,16 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
}
ingress, err := client.Ingress(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range ingress.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {

err = client.Ingress(namespace).Delete(t.Name, ingDeleteOptions)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Ingress: %s", t.Name)
}
Expand All @@ -794,23 +808,26 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
//delete pod
pod, err := client.Pods(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
}
for _, l := range pod.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), client)
if err != nil {
return err
errorList = append(errorList, err)
break
}
//FIXME: gracePeriod is nil
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Pod: %s", t.Name)
}
}
}
}
return nil

return errorList
}
64 changes: 43 additions & 21 deletions pkg/transformer/openshift/openshift.go
Original file line number Diff line number Diff line change
Expand Up @@ -495,20 +495,24 @@ func (o *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv
}

//Undeploy removes deployed artifacts from OpenShift cluster
func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error {
func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []error {
var errorList []error
//Convert komposeObject
objects, err := o.Transform(komposeObject, opt)

if err != nil {
return errors.Wrap(err, "o.Transform failed")
errorList = append(errorList, err)
return errorList
}
oclient, err := o.getOpenShiftClient()
if err != nil {
return err
errorList = append(errorList, err)
return errorList
}
kclient, namespace, err := o.GetKubernetesClient()
if err != nil {
return err
errorList = append(errorList, err)
return errorList
}

for _, v := range objects {
Expand All @@ -520,13 +524,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
//delete imageStream
imageStream, err := oclient.ImageStreams(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range imageStream.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
err = oclient.ImageStreams(namespace).Delete(t.Name)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted ImageStream: %s", t.Name)
}
Expand All @@ -536,13 +542,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
//options := api.ListOptions{LabelSelector: label}
buildConfig, err := oclient.BuildConfigs(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range buildConfig.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
err := oclient.BuildConfigs(namespace).Delete(t.Name)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted BuildConfig: %s", t.Name)
}
Expand All @@ -552,14 +560,16 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
// delete deploymentConfig
deploymentConfig, err := oclient.DeploymentConfigs(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range deploymentConfig.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
dcreaper := deploymentconfigreaper.NewDeploymentConfigReaper(oclient, kclient)
err := dcreaper.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted DeploymentConfig: %s", t.Name)
}
Expand All @@ -569,18 +579,21 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
//delete svc
svc, err := kclient.Services(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range svc.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
rpService, err := kubectl.ReaperFor(api.Kind("Service"), kclient)
if err != nil {
return err
errorList = append(errorList, err)
break
}
//FIXME: gracePeriod is nil
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Service: %s", t.Name)
}
Expand All @@ -590,13 +603,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
// delete pvc
pvc, err := kclient.PersistentVolumeClaims(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range pvc.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
err = kclient.PersistentVolumeClaims(namespace).Delete(t.Name)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
}
Expand All @@ -606,13 +621,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
// delete route
route, err := oclient.Routes(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range route.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
err = oclient.Routes(namespace).Delete(t.Name)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Route: %s", t.Name)
}
Expand All @@ -622,23 +639,28 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
//delete pods
pod, err := kclient.Pods(namespace).List(options)
if err != nil {
return err
errorList = append(errorList, err)
break
}
for _, l := range pod.Items {
if reflect.DeepEqual(l.Labels, komposeLabel) {
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), kclient)
if err != nil {
return err
errorList = append(errorList, err)
break
}

//FIXME: gracePeriod is nil
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
if err != nil {
return err
errorList = append(errorList, err)
break
}
log.Infof("Successfully deleted Pod: %s", t.Name)

}
}
}
}
return nil
return errorList
}
2 changes: 1 addition & 1 deletion pkg/transformer/transformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ type Transformer interface {
// Deploy deploys KomposeObject to provider
Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
// Undeploy deletes/undeploys KomposeObject from provider
Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []error
}