forked from LaconicNetwork/kompose
Merge pull request #536 from kadel/pr477-angain-and-better
new take on "Kompose will keep trying its job #477"
This commit is contained in:
commit
27fc70aa52
@ -286,7 +286,9 @@ func Down(opt kobject.ConvertOptions) {
|
|||||||
//Remove deployed application
|
//Remove deployed application
|
||||||
errUndeploy := t.Undeploy(komposeObject, opt)
|
errUndeploy := t.Undeploy(komposeObject, opt)
|
||||||
if errUndeploy != nil {
|
if errUndeploy != nil {
|
||||||
log.Fatalf("Error while deleting application: %s", errUndeploy)
|
for _, err = range errUndeploy {
|
||||||
|
log.Fatalf("Error while deleting application: %s", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -691,17 +691,19 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Undeploy deletes deployed objects from Kubernetes cluster
|
// 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
|
//Convert komposeObject
|
||||||
objects, err := k.Transform(komposeObject, opt)
|
objects, err := k.Transform(komposeObject, opt)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "k.Transform failed")
|
errorList = append(errorList, err)
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
|
|
||||||
client, namespace, err := k.GetKubernetesClient()
|
client, namespace, err := k.GetKubernetesClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range objects {
|
for _, v := range objects {
|
||||||
@ -713,20 +715,24 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
//delete deployment
|
//delete deployment
|
||||||
deployment, err := client.Deployments(namespace).List(options)
|
deployment, err := client.Deployments(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range deployment.Items {
|
for _, l := range deployment.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client)
|
rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
//FIXME: gracePeriod is nil
|
//FIXME: gracePeriod is nil
|
||||||
err = rpDeployment.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err = rpDeployment.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Deployment: %s", t.Name)
|
log.Infof("Successfully deleted Deployment: %s", t.Name)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -734,20 +740,24 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
//delete svc
|
//delete svc
|
||||||
svc, err := client.Services(namespace).List(options)
|
svc, err := client.Services(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range svc.Items {
|
for _, l := range svc.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
rpService, err := kubectl.ReaperFor(api.Kind("Service"), client)
|
rpService, err := kubectl.ReaperFor(api.Kind("Service"), client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
//FIXME: gracePeriod is nil
|
//FIXME: gracePeriod is nil
|
||||||
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Service: %s", t.Name)
|
log.Infof("Successfully deleted Service: %s", t.Name)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -755,13 +765,15 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
// delete pvc
|
// delete pvc
|
||||||
pvc, err := client.PersistentVolumeClaims(namespace).List(options)
|
pvc, err := client.PersistentVolumeClaims(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range pvc.Items {
|
for _, l := range pvc.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
err = client.PersistentVolumeClaims(namespace).Delete(t.Name)
|
err = client.PersistentVolumeClaims(namespace).Delete(t.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
|
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -777,14 +789,16 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
}
|
}
|
||||||
ingress, err := client.Ingress(namespace).List(options)
|
ingress, err := client.Ingress(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range ingress.Items {
|
for _, l := range ingress.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
|
|
||||||
err = client.Ingress(namespace).Delete(t.Name, ingDeleteOptions)
|
err = client.Ingress(namespace).Delete(t.Name, ingDeleteOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Ingress: %s", t.Name)
|
log.Infof("Successfully deleted Ingress: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -794,23 +808,26 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
//delete pod
|
//delete pod
|
||||||
pod, err := client.Pods(namespace).List(options)
|
pod, err := client.Pods(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
}
|
}
|
||||||
for _, l := range pod.Items {
|
for _, l := range pod.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), client)
|
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
//FIXME: gracePeriod is nil
|
//FIXME: gracePeriod is nil
|
||||||
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Pod: %s", t.Name)
|
log.Infof("Successfully deleted Pod: %s", t.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
|
|||||||
@ -516,20 +516,24 @@ func (o *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Undeploy removes deployed artifacts from OpenShift cluster
|
//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
|
//Convert komposeObject
|
||||||
objects, err := o.Transform(komposeObject, opt)
|
objects, err := o.Transform(komposeObject, opt)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "o.Transform failed")
|
errorList = append(errorList, err)
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
oclient, err := o.getOpenShiftClient()
|
oclient, err := o.getOpenShiftClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
kclient, namespace, err := o.GetKubernetesClient()
|
kclient, namespace, err := o.GetKubernetesClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
return errorList
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range objects {
|
for _, v := range objects {
|
||||||
@ -541,13 +545,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
//delete imageStream
|
//delete imageStream
|
||||||
imageStream, err := oclient.ImageStreams(namespace).List(options)
|
imageStream, err := oclient.ImageStreams(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range imageStream.Items {
|
for _, l := range imageStream.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
err = oclient.ImageStreams(namespace).Delete(t.Name)
|
err = oclient.ImageStreams(namespace).Delete(t.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted ImageStream: %s", t.Name)
|
log.Infof("Successfully deleted ImageStream: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -557,13 +563,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
//options := api.ListOptions{LabelSelector: label}
|
//options := api.ListOptions{LabelSelector: label}
|
||||||
buildConfig, err := oclient.BuildConfigs(namespace).List(options)
|
buildConfig, err := oclient.BuildConfigs(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range buildConfig.Items {
|
for _, l := range buildConfig.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
err := oclient.BuildConfigs(namespace).Delete(t.Name)
|
err := oclient.BuildConfigs(namespace).Delete(t.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted BuildConfig: %s", t.Name)
|
log.Infof("Successfully deleted BuildConfig: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -573,14 +581,16 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
// delete deploymentConfig
|
// delete deploymentConfig
|
||||||
deploymentConfig, err := oclient.DeploymentConfigs(namespace).List(options)
|
deploymentConfig, err := oclient.DeploymentConfigs(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range deploymentConfig.Items {
|
for _, l := range deploymentConfig.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
dcreaper := deploymentconfigreaper.NewDeploymentConfigReaper(oclient, kclient)
|
dcreaper := deploymentconfigreaper.NewDeploymentConfigReaper(oclient, kclient)
|
||||||
err := dcreaper.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err := dcreaper.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted DeploymentConfig: %s", t.Name)
|
log.Infof("Successfully deleted DeploymentConfig: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -590,18 +600,21 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
//delete svc
|
//delete svc
|
||||||
svc, err := kclient.Services(namespace).List(options)
|
svc, err := kclient.Services(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range svc.Items {
|
for _, l := range svc.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
rpService, err := kubectl.ReaperFor(api.Kind("Service"), kclient)
|
rpService, err := kubectl.ReaperFor(api.Kind("Service"), kclient)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
//FIXME: gracePeriod is nil
|
//FIXME: gracePeriod is nil
|
||||||
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err = rpService.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Service: %s", t.Name)
|
log.Infof("Successfully deleted Service: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -611,13 +624,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
// delete pvc
|
// delete pvc
|
||||||
pvc, err := kclient.PersistentVolumeClaims(namespace).List(options)
|
pvc, err := kclient.PersistentVolumeClaims(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range pvc.Items {
|
for _, l := range pvc.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
err = kclient.PersistentVolumeClaims(namespace).Delete(t.Name)
|
err = kclient.PersistentVolumeClaims(namespace).Delete(t.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
|
log.Infof("Successfully deleted PersistentVolumeClaim: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -627,13 +642,15 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
// delete route
|
// delete route
|
||||||
route, err := oclient.Routes(namespace).List(options)
|
route, err := oclient.Routes(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range route.Items {
|
for _, l := range route.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
err = oclient.Routes(namespace).Delete(t.Name)
|
err = oclient.Routes(namespace).Delete(t.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Route: %s", t.Name)
|
log.Infof("Successfully deleted Route: %s", t.Name)
|
||||||
}
|
}
|
||||||
@ -643,23 +660,28 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co
|
|||||||
//delete pods
|
//delete pods
|
||||||
pod, err := kclient.Pods(namespace).List(options)
|
pod, err := kclient.Pods(namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
for _, l := range pod.Items {
|
for _, l := range pod.Items {
|
||||||
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
if reflect.DeepEqual(l.Labels, komposeLabel) {
|
||||||
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), kclient)
|
rpPod, err := kubectl.ReaperFor(api.Kind("Pod"), kclient)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME: gracePeriod is nil
|
//FIXME: gracePeriod is nil
|
||||||
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
err = rpPod.Stop(namespace, t.Name, TIMEOUT*time.Second, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
errorList = append(errorList, err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
log.Infof("Successfully deleted Pod: %s", t.Name)
|
log.Infof("Successfully deleted Pod: %s", t.Name)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return errorList
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,5 +28,5 @@ type Transformer interface {
|
|||||||
// Deploy deploys KomposeObject to provider
|
// Deploy deploys KomposeObject to provider
|
||||||
Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
|
Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
|
||||||
// Undeploy deletes/undeploys KomposeObject from provider
|
// Undeploy deletes/undeploys KomposeObject from provider
|
||||||
Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error
|
Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []error
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user