Skip to content

Commit c82fe23

Browse files
authored
feat: introduce a get query with yaml representation of the resource (#95)
* feat: introduce a get query with yaml representation of the resource * fix: typo in gha
1 parent 36d3205 commit c82fe23

File tree

4 files changed

+36
-3
lines changed

4 files changed

+36
-3
lines changed

.github/workflows/pipeline.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ jobs:
1313
useLocalCoverageConfig: true
1414
imageTagName: ghcr.io/openmfp/crd-gql-gateway
1515
coverageThreasholdFile: 0
16-
coverageThreasholdPackage: 0
16+
coverageThresholdPackage: 0
1717
coverageThreasholdTotal: 0
1818

gateway/resolver/resolver.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package resolver
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"errors"
67
"fmt"
7-
"github.com/rs/zerolog/log"
88
"regexp"
99

10+
"github.com/rs/zerolog/log"
11+
"gopkg.in/yaml.v3"
12+
1013
"github.com/graphql-go/graphql"
1114
"go.opentelemetry.io/otel"
1215
"go.opentelemetry.io/otel/attribute"
@@ -28,6 +31,7 @@ type Provider interface {
2831
type CrudProvider interface {
2932
ListItems(gvk schema.GroupVersionKind) graphql.FieldResolveFn
3033
GetItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
34+
GetItemAsYAML(gvk schema.GroupVersionKind) graphql.FieldResolveFn
3135
CreateItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
3236
UpdateItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
3337
DeleteItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
@@ -152,6 +156,26 @@ func (r *Service) GetItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn {
152156
}
153157
}
154158

159+
func (r *Service) GetItemAsYAML(gvk schema.GroupVersionKind) graphql.FieldResolveFn {
160+
return func(p graphql.ResolveParams) (interface{}, error) {
161+
var span trace.Span
162+
p.Context, span = otel.Tracer("").Start(p.Context, "GetItemAsYAML", trace.WithAttributes(attribute.String("kind", gvk.Kind)))
163+
defer span.End()
164+
165+
out, err := r.GetItem(gvk)(p)
166+
if err != nil {
167+
return "", err
168+
}
169+
170+
var returnYaml bytes.Buffer
171+
if err := yaml.NewEncoder(&returnYaml).Encode(out); err != nil {
172+
return "", err
173+
}
174+
175+
return returnYaml.String(), nil
176+
}
177+
}
178+
155179
func (r *Service) CreateItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn {
156180
return func(p graphql.ResolveParams) (interface{}, error) {
157181
ctx, span := otel.Tracer("").Start(p.Context, "CreateItem", trace.WithAttributes(attribute.String("kind", gvk.Kind)))

gateway/schema/schema.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,15 @@ func (g *Gateway) generateGraphqlSchema() error {
116116
Resolve: g.resolver.GetItem(*gvk),
117117
})
118118

119+
queryGroupType.AddFieldConfig(singular+"Yaml", &graphql.Field{
120+
Type: graphql.NewNonNull(graphql.String),
121+
Args: resolver.NewFieldConfigArguments().
122+
WithNameArg().
123+
WithNamespaceArg().
124+
Complete(),
125+
Resolve: g.resolver.GetItemAsYAML(*gvk),
126+
})
127+
119128
// Mutation definitions
120129
mutationGroupType.AddFieldConfig("create"+singular, &graphql.Field{
121130
Type: resourceType,

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ require (
2626
go.opentelemetry.io/otel v1.34.0
2727
go.opentelemetry.io/otel/trace v1.34.0
2828
golang.org/x/text v0.22.0
29+
gopkg.in/yaml.v3 v3.0.1
2930
k8s.io/api v0.32.2
3031
k8s.io/apiextensions-apiserver v0.32.2
3132
k8s.io/apimachinery v0.32.2
@@ -109,7 +110,6 @@ require (
109110
google.golang.org/protobuf v1.36.5 // indirect
110111
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
111112
gopkg.in/inf.v0 v0.9.1 // indirect
112-
gopkg.in/yaml.v3 v3.0.1 // indirect
113113
k8s.io/apiserver v0.32.2 // indirect
114114
k8s.io/component-base v0.32.2 // indirect
115115
k8s.io/klog/v2 v2.130.1 // indirect

0 commit comments

Comments
 (0)