1
0
mirror of https://github.com/rancher/steve.git synced 2025-07-15 07:32:17 +00:00
steve/pkg/resources/helm/formatter.go
2020-06-11 21:51:19 -07:00

59 lines
1.6 KiB
Go

package helm
import (
"github.com/rancher/apiserver/pkg/types"
"github.com/rancher/steve/pkg/attributes"
"github.com/rancher/steve/pkg/schema/converter"
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)
func DropHelmData(request *types.APIRequest, resource *types.RawResource) {
data := resource.APIObject.Data()
if data.String("metadata", "labels", "owner") == "helm" ||
data.String("metadata", "labels", "OWNER") == "TILLER" {
if data.String("data", "release") != "" {
delete(data.Map("data"), "release")
}
}
}
func FormatRelease(request *types.APIRequest, resource *types.RawResource) {
obj, ok := resource.APIObject.Object.(runtime.Object)
if !ok {
return
}
release, err := ToRelease(obj, SchemeBasedNamespaceLookup(request.Schemas))
if err == ErrNotHelmRelease {
return
} else if err != nil {
logrus.Errorf("failed to render helm release: %v", err)
return
}
var (
data = resource.APIObject.Data()
namespace = data.String("metadata", "namespace")
name = data.String("metadata", "name")
)
switch data.String("kind") {
case "Secret":
resource.ID = namespace + "/s:" + name
case "ConfigMap":
resource.ID = namespace + "/c:" + name
}
resource.Links["self"] = request.URLBuilder.ResourceLink(request.Schema, resource.ID)
resource.APIObject.Object = release
}
func SchemeBasedNamespaceLookup(schemas *types.APISchemas) IsNamespaced {
return func(gvk schema.GroupVersionKind) bool {
schema := schemas.LookupSchema(converter.GVKToSchemaID(gvk))
return schema != nil && attributes.Namespaced(schema)
}
}