Skip to content

Commit 11b55c3

Browse files
joshmerandajoshmeranda
andauthored
[main] add rancher settings formatters (#1202)
* add rancher settings formatters * fix doc comment --------- Co-authored-by: joshmeranda <joshua.meranda@gmail.com>
1 parent 670bc39 commit 11b55c3

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

pkg/resources/formatters/formatter.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55
"compress/gzip"
66
"encoding/base64"
77
"encoding/json"
8+
"fmt"
89
"io"
10+
"slices"
911

1012
// helm v2 is long since deprecated
1113
// Unlike helm v3, it uses Protobuf encoding, so we can't use generic decoding without the message descriptors.
@@ -68,6 +70,26 @@ func Pod(_ *types.APIRequest, resource *types.RawResource) {
6870
}
6971
}
7072

73+
var ReadOnlySettings = []string{
74+
"cacerts",
75+
}
76+
77+
// Setting is the default formatter for management.cattle.io.setting resources. This formatter removes the update link from resources which are read-only or cannot be updated by the user.
78+
func Setting(request *types.APIRequest, resource *types.RawResource) {
79+
data := resource.APIObject.Data()
80+
if data.String("value") == "" {
81+
data.Set("value", data.String("default"))
82+
}
83+
84+
if data.String("source") == "env" || slices.Contains(ReadOnlySettings, resource.ID) {
85+
delete(resource.Links, "update")
86+
} else {
87+
if err := request.AccessControl.CanDo(request, fmt.Sprintf("%s/%s", "management.cattle.io", "settings"), "update", resource.APIObject.Namespace(), resource.APIObject.Name()); err != nil {
88+
delete(resource.Links, "update")
89+
}
90+
}
91+
}
92+
7193
// decodeHelm3 receives a helm3 release data string, decodes the string data using the standard base64 library
7294
// and unmarshals the data into release.Release struct to return it.
7395
func decodeHelm3(data string) (any, error) {

pkg/resources/schema.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ func DefaultSchemaTemplates(cf *client.Factory,
6464
ID: "pod",
6565
Formatter: formatters.Pod,
6666
},
67+
{
68+
ID: "management.cattle.io.setting",
69+
Formatter: formatters.Setting,
70+
},
6771
{
6872
ID: "management.cattle.io.cluster",
6973
Customize: func(apiSchema *types.APISchema) {
@@ -96,6 +100,10 @@ func DefaultSchemaTemplatesForStore(store types.Store,
96100
ID: "pod",
97101
Formatter: formatters.Pod,
98102
},
103+
{
104+
ID: "management.cattle.io.setting",
105+
Formatter: formatters.Setting,
106+
},
99107
{
100108
ID: "management.cattle.io.cluster",
101109
Customize: func(apiSchema *types.APISchema) {

0 commit comments

Comments
 (0)