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