feat(set_image): add set image feature for statefulset

mine
Antoine Meausoone 2020-08-20 21:57:41 +02:00
parent b00c77f477
commit 3905ef7d02
2 changed files with 47 additions and 7 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/derailed/k9s/internal/client"
"github.com/rs/zerolog/log"
appsv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/labels"
@ -18,12 +19,13 @@ import (
)
var (
_ Accessor = (*StatefulSet)(nil)
_ Nuker = (*StatefulSet)(nil)
_ Loggable = (*StatefulSet)(nil)
_ Restartable = (*StatefulSet)(nil)
_ Scalable = (*StatefulSet)(nil)
_ Controller = (*StatefulSet)(nil)
_ Accessor = (*StatefulSet)(nil)
_ Nuker = (*StatefulSet)(nil)
_ Loggable = (*StatefulSet)(nil)
_ Restartable = (*StatefulSet)(nil)
_ Scalable = (*StatefulSet)(nil)
_ Controller = (*StatefulSet)(nil)
_ ContainsPodSpec = (*StatefulSet)(nil)
)
// StatefulSet represents a K8s sts.
@ -219,3 +221,39 @@ func (s *StatefulSet) Scan(ctx context.Context, gvr, fqn string, wait bool) (Ref
return refs, nil
}
func (s *StatefulSet) GetPodSpec(path string) (*v1.PodSpec, error) {
sts, err := s.getStatefulSet(path)
if err != nil {
return nil, err
}
podSpec := sts.Spec.Template.Spec
return &podSpec, nil
}
func (s *StatefulSet) SetImages(ctx context.Context, path string, spec v1.PodSpec) error {
ns, n := client.Namespaced(path)
auth, err := s.Client().CanI(ns, "apps/v1/statefulset", []string{client.PatchVerb})
if err != nil {
return err
}
if !auth {
return fmt.Errorf("user is not authorized to patch a statefulset")
}
jsonPatch, err := GetTemplateJsonPatch(spec)
if err != nil {
return err
}
dial, err := s.Client().Dial()
if err != nil {
return err
}
_, err = dial.AppsV1().StatefulSets(ns).Patch(
ctx,
n,
types.StrategicMergePatchType,
[]byte(jsonPatch),
metav1.PatchOptions{},
)
return err
}

View File

@ -21,7 +21,9 @@ func NewStatefulSet(gvr client.GVR) ResourceViewer {
ResourceViewer: NewPortForwardExtender(
NewRestartExtender(
NewScaleExtender(
NewLogsExtender(NewBrowser(gvr), nil),
NewSetImageExtender(
NewLogsExtender(NewBrowser(gvr), nil),
),
),
),
),