mirror of
https://github.com/rancher/steve.git
synced 2025-09-01 23:47:50 +00:00
Add userpreferences
This commit is contained in:
103
pkg/server/resources/userpreferences/configmap.go
Normal file
103
pkg/server/resources/userpreferences/configmap.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package userpreferences
|
||||
|
||||
import (
|
||||
"github.com/rancher/steve/pkg/schemaserver/store/empty"
|
||||
"github.com/rancher/steve/pkg/schemaserver/types"
|
||||
"github.com/rancher/steve/pkg/server/store/proxy"
|
||||
"github.com/rancher/wrangler/pkg/data"
|
||||
"github.com/rancher/wrangler/pkg/data/convert"
|
||||
"github.com/rancher/wrangler/pkg/schemas/validation"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/client-go/dynamic"
|
||||
)
|
||||
|
||||
type configMapStore struct {
|
||||
empty.Store
|
||||
cg proxy.ClientGetter
|
||||
}
|
||||
|
||||
func (e *configMapStore) getClient(apiOp *types.APIRequest) (dynamic.ResourceInterface, error) {
|
||||
cmSchema := apiOp.Schemas.LookupSchema("configmap")
|
||||
if cmSchema == nil {
|
||||
return nil, validation.NotFound
|
||||
}
|
||||
|
||||
return e.cg.AdminClient(apiOp, cmSchema, "kube-system")
|
||||
}
|
||||
|
||||
func (e *configMapStore) ByID(apiOp *types.APIRequest, schema *types.APISchema, id string) (types.APIObject, error) {
|
||||
u := getUser(apiOp)
|
||||
client, err := e.getClient(apiOp)
|
||||
if err != nil {
|
||||
return types.APIObject{}, err
|
||||
}
|
||||
|
||||
pref := &UserPreference{
|
||||
Data: map[string]string{},
|
||||
}
|
||||
result := types.APIObject{
|
||||
Type: "userpreference",
|
||||
ID: u.GetName(),
|
||||
Object: pref,
|
||||
}
|
||||
|
||||
obj, err := client.Get(prefName(u), metav1.GetOptions{})
|
||||
if apierrors.IsNotFound(err) {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
d := data.Object(obj.Object).Map("data")
|
||||
return result, convert.ToObj(d, &pref.Data)
|
||||
}
|
||||
|
||||
func (e *configMapStore) List(apiOp *types.APIRequest, schema *types.APISchema) (types.APIObjectList, error) {
|
||||
obj, err := e.ByID(apiOp, schema, "")
|
||||
if err != nil {
|
||||
return types.APIObjectList{}, err
|
||||
}
|
||||
return types.APIObjectList{
|
||||
Objects: []types.APIObject{
|
||||
obj,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (e *configMapStore) Update(apiOp *types.APIRequest, schema *types.APISchema, data types.APIObject, id string) (types.APIObject, error) {
|
||||
u := getUser(apiOp)
|
||||
client, err := e.getClient(apiOp)
|
||||
if err != nil {
|
||||
return types.APIObject{}, err
|
||||
}
|
||||
|
||||
obj, err := client.Get(prefName(u), metav1.GetOptions{})
|
||||
if apierrors.IsNotFound(err) {
|
||||
_, err = client.Create(&unstructured.Unstructured{
|
||||
Object: map[string]interface{}{
|
||||
"metadata": map[string]interface{}{
|
||||
"name": prefName(u),
|
||||
},
|
||||
"data": data.Data().Map("data"),
|
||||
},
|
||||
}, metav1.CreateOptions{})
|
||||
} else if err == nil {
|
||||
obj.Object["data"] = data.Data().Map("data")
|
||||
_, err = client.Update(obj, metav1.UpdateOptions{})
|
||||
}
|
||||
if err != nil {
|
||||
return types.APIObject{}, err
|
||||
}
|
||||
|
||||
return e.ByID(apiOp, schema, "")
|
||||
}
|
||||
|
||||
func (e *configMapStore) Delete(apiOp *types.APIRequest, schema *types.APISchema, id string) (types.APIObject, error) {
|
||||
u := getUser(apiOp)
|
||||
client, err := e.getClient(apiOp)
|
||||
if err != nil {
|
||||
return types.APIObject{}, err
|
||||
}
|
||||
|
||||
return types.APIObject{}, client.Delete(prefName(u), nil)
|
||||
}
|
Reference in New Issue
Block a user