feat(set_image): add set image feature for statefulset
parent
b00c77f477
commit
3905ef7d02
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@ func NewStatefulSet(gvr client.GVR) ResourceViewer {
|
|||
ResourceViewer: NewPortForwardExtender(
|
||||
NewRestartExtender(
|
||||
NewScaleExtender(
|
||||
NewLogsExtender(NewBrowser(gvr), nil),
|
||||
NewSetImageExtender(
|
||||
NewLogsExtender(NewBrowser(gvr), nil),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in New Issue