Use PATCH while updating Services and StatefulSets
This commit is contained in:
		
							parent
							
								
									8026c69222
								
							
						
					
					
						commit
						9b0d0d487c
					
				|  | @ -3,6 +3,7 @@ package cluster | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
|  | 	"k8s.io/client-go/pkg/api" | ||||||
| 	"k8s.io/client-go/pkg/api/v1" | 	"k8s.io/client-go/pkg/api/v1" | ||||||
| 	"k8s.io/client-go/pkg/apis/apps/v1beta1" | 	"k8s.io/client-go/pkg/apis/apps/v1beta1" | ||||||
| 
 | 
 | ||||||
|  | @ -126,11 +127,20 @@ func (c *Cluster) updateStatefulSet(newStatefulSet *v1beta1.StatefulSet) error { | ||||||
| 	if c.Statefulset == nil { | 	if c.Statefulset == nil { | ||||||
| 		return fmt.Errorf("There is no StatefulSet in the cluster") | 		return fmt.Errorf("There is no StatefulSet in the cluster") | ||||||
| 	} | 	} | ||||||
| 	statefulSet, err := c.KubeClient.StatefulSets(newStatefulSet.Namespace).Update(newStatefulSet) | 	statefulSetName := util.NameFromMeta(c.Statefulset.ObjectMeta) | ||||||
|  | 
 | ||||||
|  | 	patchData, err := specPatch(newStatefulSet.Spec) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return fmt.Errorf("Can't form patch for the StatefulSet '%s': %s", statefulSetName, err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	statefulSet, err := c.KubeClient.StatefulSets(c.Statefulset.Namespace).Patch( | ||||||
|  | 		c.Statefulset.Name, | ||||||
|  | 		api.MergePatchType, | ||||||
|  | 		patchData, "") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("Can't patch StatefulSet '%s': %s", statefulSetName, err) | ||||||
|  | 	} | ||||||
| 	c.Statefulset = statefulSet | 	c.Statefulset = statefulSet | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
|  | @ -182,12 +192,19 @@ func (c *Cluster) updateService(newService *v1.Service) error { | ||||||
| 	if c.Service == nil { | 	if c.Service == nil { | ||||||
| 		return fmt.Errorf("There is no Service in the cluster") | 		return fmt.Errorf("There is no Service in the cluster") | ||||||
| 	} | 	} | ||||||
| 	newService.ObjectMeta = c.Service.ObjectMeta | 	serviceName := util.NameFromMeta(c.Service.ObjectMeta) | ||||||
| 	newService.Spec.ClusterIP = c.Service.Spec.ClusterIP |  | ||||||
| 
 | 
 | ||||||
| 	svc, err := c.KubeClient.Services(newService.Namespace).Update(newService) | 	patchData, err := specPatch(newService.Spec) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return fmt.Errorf("Can't form patch for the Service '%s': %s", serviceName, err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	svc, err := c.KubeClient.Services(c.Service.Namespace).Patch( | ||||||
|  | 		c.Service.Name, | ||||||
|  | 		api.MergePatchType, | ||||||
|  | 		patchData, "") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return fmt.Errorf("Can't patch Service '%s': %s", serviceName, err) | ||||||
| 	} | 	} | ||||||
| 	c.Service = svc | 	c.Service = svc | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ import ( | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	etcdclient "github.com/coreos/etcd/client" | 	etcdclient "github.com/coreos/etcd/client" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/json" | ||||||
| 	"k8s.io/client-go/pkg/api/v1" | 	"k8s.io/client-go/pkg/api/v1" | ||||||
| 	"k8s.io/client-go/pkg/apis/apps/v1beta1" | 	"k8s.io/client-go/pkg/apis/apps/v1beta1" | ||||||
| 	"k8s.io/client-go/pkg/labels" | 	"k8s.io/client-go/pkg/labels" | ||||||
|  | @ -44,6 +45,12 @@ func normalizeUserFlags(userFlags []string) (flags []string, err error) { | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func specPatch(spec interface{}) ([]byte, error) { | ||||||
|  | 	return json.Marshal(struct { | ||||||
|  | 		Spec interface{} `json:"spec"` | ||||||
|  | 	}{spec}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Cluster) logStatefulSetChanges(old, new *v1beta1.StatefulSet, isUpdate bool, reason string) { | func (c *Cluster) logStatefulSetChanges(old, new *v1beta1.StatefulSet, isUpdate bool, reason string) { | ||||||
| 	if isUpdate { | 	if isUpdate { | ||||||
| 		c.logger.Infof("StatefulSet '%s' has been changed", | 		c.logger.Infof("StatefulSet '%s' has been changed", | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue