Use PATCH while updating Services and StatefulSets

This commit is contained in:
Murat Kabilov 2017-04-24 16:31:47 +02:00
parent 8026c69222
commit 9b0d0d487c
2 changed files with 30 additions and 6 deletions

View File

@ -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

View File

@ -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",