Skip to content

Commit dc7d00c

Browse files
committed
Allow creating and updating observability tenant
Signed-off-by: David van der Spek <vanderspek.david@gmail.com>
1 parent 6fc49b1 commit dc7d00c

File tree

9 files changed

+1359
-291
lines changed

9 files changed

+1359
-291
lines changed

api-server/clients/observabilitytenant.go

+104-21
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
rts "github.com/ory/keto/proto/ory/keto/relation_tuples/v1alpha2"
88
px "github.com/ory/x/pointerx"
99
"github.com/pluralsh/oauth-playground/api-server/graph/model"
10+
observabilityv1alpha1 "github.com/pluralsh/trace-shield-controller/api/observability/v1alpha1"
1011
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1112
)
1213

@@ -17,7 +18,94 @@ const (
1718
ObservabilityTenantPermissionEdit ObservabilityTenantPermission = "editors"
1819
)
1920

20-
func (c *ClientWrapper) MutateObservabilityTenant(ctx context.Context, name string, viewers *model.ObservabilityTenantViewersInput, editors *model.ObservabilityTenantEditorsInput) (*model.ObservabilityTenant, error) {
21+
func (c *ClientWrapper) CreateObservabilityTenant(ctx context.Context, name string, viewers *model.ObservabilityTenantViewersInput, editors *model.ObservabilityTenantEditorsInput, limits *model.ObservabilityTenantLimitsInput) (*model.ObservabilityTenant, error) {
22+
log := c.Log.WithName("CreateObservabilityTenant").WithValues("Name", name)
23+
24+
var mimirLimits *observabilityv1alpha1.MimirLimits
25+
26+
if limits != nil && limits.Mimir != nil {
27+
tmpMimirLimits := observabilityv1alpha1.MimirLimits(*limits.Mimir)
28+
mimirLimits = &tmpMimirLimits
29+
}
30+
31+
tenantStruct := &observabilityv1alpha1.Tenant{
32+
ObjectMeta: metav1.ObjectMeta{
33+
Name: name,
34+
},
35+
Spec: observabilityv1alpha1.TenantSpec{
36+
Limits: &observabilityv1alpha1.LimitSpec{
37+
Mimir: mimirLimits,
38+
},
39+
},
40+
}
41+
42+
tenant, err := c.ControllerClient.ObservabilityV1alpha1().Tenants().Create(ctx, tenantStruct, metav1.CreateOptions{})
43+
if err != nil {
44+
log.Error(err, "Failed to create observability tenant")
45+
return nil, err
46+
}
47+
48+
if err := c.MutateObservabilityTenantInKeto(ctx, name, viewers, editors); err != nil {
49+
log.Error(err, "Failed to mutate observability tenant in keto")
50+
return nil, err
51+
}
52+
53+
return &model.ObservabilityTenant{
54+
Name: tenant.Name,
55+
Limits: &model.ObservabilityTenantLimits{
56+
Mimir: tenant.Spec.Limits.Mimir,
57+
},
58+
}, nil
59+
}
60+
61+
func (c *ClientWrapper) UpdateObservabilityTenant(ctx context.Context, name string, viewers *model.ObservabilityTenantViewersInput, editors *model.ObservabilityTenantEditorsInput, limits *model.ObservabilityTenantLimitsInput) (*model.ObservabilityTenant, error) {
62+
log := c.Log.WithName("UpdateObservabilityTenant").WithValues("Name", name)
63+
64+
var mimirLimits *observabilityv1alpha1.MimirLimits
65+
66+
if limits != nil && limits.Mimir != nil {
67+
tmpMimirLimits := observabilityv1alpha1.MimirLimits(*limits.Mimir)
68+
mimirLimits = &tmpMimirLimits
69+
}
70+
71+
existingTenant, err := c.ControllerClient.ObservabilityV1alpha1().Tenants().Get(ctx, name, metav1.GetOptions{})
72+
if err != nil {
73+
log.Error(err, "Failed to get observability tenant")
74+
return nil, err
75+
}
76+
77+
tenantStruct := &observabilityv1alpha1.Tenant{
78+
ObjectMeta: metav1.ObjectMeta{
79+
Name: name,
80+
ResourceVersion: existingTenant.GetResourceVersion(),
81+
},
82+
Spec: observabilityv1alpha1.TenantSpec{
83+
Limits: &observabilityv1alpha1.LimitSpec{
84+
Mimir: mimirLimits,
85+
},
86+
},
87+
}
88+
89+
tenant, err := c.ControllerClient.ObservabilityV1alpha1().Tenants().Update(ctx, tenantStruct, metav1.UpdateOptions{})
90+
if err != nil {
91+
log.Error(err, "Failed to update observability tenant")
92+
return nil, err
93+
}
94+
95+
if err := c.MutateObservabilityTenantInKeto(ctx, name, viewers, editors); err != nil {
96+
log.Error(err, "Failed to mutate observability tenant in keto")
97+
return nil, err
98+
}
99+
100+
return &model.ObservabilityTenant{
101+
Name: tenant.Name,
102+
Limits: &model.ObservabilityTenantLimits{
103+
Mimir: tenant.Spec.Limits.Mimir,
104+
},
105+
}, nil
106+
}
107+
108+
func (c *ClientWrapper) MutateObservabilityTenantInKeto(ctx context.Context, name string, viewers *model.ObservabilityTenantViewersInput, editors *model.ObservabilityTenantEditorsInput) error {
21109

22110
// TODO: figure out which members to add or remove
23111
log := c.Log.WithName("ObservabilityTenant").WithValues("Name", name)
@@ -26,24 +114,24 @@ func (c *ClientWrapper) MutateObservabilityTenant(ctx context.Context, name stri
26114
// updating a group would require that we first check if it exists and if a user is allowed to update it
27115
// creating a group would require that we first check if it exists and if a user is allowed to create it
28116

29-
tenantpExists, err := c.ObservabilityTenantExistsInKeto(ctx, name)
30-
if err != nil {
31-
log.Error(err, "Failed to check if observability tenant already exists in keto")
32-
return nil, err
33-
}
117+
// tenantpExists, err := c.ObservabilityTenantExistsInKeto(ctx, name)
118+
// if err != nil {
119+
// log.Error(err, "Failed to check if observability tenant already exists in keto")
120+
// return nil, err
121+
// }
34122

35-
if !tenantpExists {
36-
err := c.CreateObservabilityTenantInKeto(ctx, name)
37-
if err != nil {
38-
log.Error(err, "Failed to create observability tenant in keto")
39-
return nil, err
40-
}
41-
}
123+
// if !tenantpExists {
124+
// err := c.CreateObservabilityTenantInKeto(ctx, name)
125+
// if err != nil {
126+
// log.Error(err, "Failed to create observability tenant in keto")
127+
// return nil, err
128+
// }
129+
// }
42130

43131
viewUsersToAdd, viewUsersToRemove, viewGroupsToAdd, viewGroupsToRemove, viewClientsToAdd, viewClientsToRemove, err := c.OsTenantChangeset(ctx, name, viewers, nil, ObservabilityTenantPermissionView)
44132
if err != nil {
45133
log.Error(err, "Failed to get observability tenant changeset")
46-
return nil, err
134+
return err
47135
}
48136

49137
if err := c.AddUsersToTenantInKeto(ctx, name, viewUsersToAdd, ObservabilityTenantPermissionView); err != nil {
@@ -79,7 +167,7 @@ func (c *ClientWrapper) MutateObservabilityTenant(ctx context.Context, name stri
79167
editUsersToAdd, editUsersToRemove, editGroupsToAdd, editGroupsToRemove, _, _, err := c.OsTenantChangeset(ctx, name, nil, editors, ObservabilityTenantPermissionEdit)
80168
if err != nil {
81169
log.Error(err, "Failed to get observability tenant changeset")
82-
return nil, err
170+
return err
83171
}
84172

85173
if err := c.AddUsersToTenantInKeto(ctx, name, editUsersToAdd, ObservabilityTenantPermissionEdit); err != nil {
@@ -102,12 +190,7 @@ func (c *ClientWrapper) MutateObservabilityTenant(ctx context.Context, name stri
102190
// return nil, err // TODO: add some way to wrap errors
103191
}
104192

105-
return &model.ObservabilityTenant{
106-
Name: name,
107-
Organization: &model.Organization{
108-
Name: "main", //TODO: decide whether to hardcode this or not
109-
},
110-
}, nil
193+
return nil
111194
}
112195

113196
// function that checks if an observability tenant exists in keto

api-server/go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/go-logr/logr v1.2.3
99
github.com/ory/keto/proto v0.11.1-alpha.0
1010
github.com/ory/kratos-client-go v0.11.1
11-
github.com/pluralsh/trace-shield-controller v0.0.0-20230404161307-a98fd77d4d44
11+
github.com/pluralsh/trace-shield-controller v0.0.0-20230404170210-f84361cc9dee
1212
github.com/rs/cors v1.8.3
1313
github.com/vektah/gqlparser/v2 v2.5.1
1414
sigs.k8s.io/controller-runtime v0.14.4

api-server/go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -1209,8 +1209,8 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
12091209
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
12101210
github.com/pluralsh/controller-reconcile-helper v0.0.4 h1:1o+7qYSyoeqKFjx+WgQTxDz4Q2VMpzprJIIKShxqG0E=
12111211
github.com/pluralsh/controller-reconcile-helper v0.0.4/go.mod h1:AfY0gtteD6veBjmB6jiRx/aR4yevEf6K0M13/pGan/s=
1212-
github.com/pluralsh/trace-shield-controller v0.0.0-20230404161307-a98fd77d4d44 h1:bbcN7OGV4vrYcrk4AHiICMmV3VA393NnQv8ronuSF7A=
1213-
github.com/pluralsh/trace-shield-controller v0.0.0-20230404161307-a98fd77d4d44/go.mod h1:Mjf4+X7fVZhc1nK0DhtrYiB588QpvGt+IYE0Ob5pMi0=
1212+
github.com/pluralsh/trace-shield-controller v0.0.0-20230404170210-f84361cc9dee h1:cFN6H82uHFULmm6UAb60ORM0Zy8mfsfn4i3l2aLtYUw=
1213+
github.com/pluralsh/trace-shield-controller v0.0.0-20230404170210-f84361cc9dee/go.mod h1:Mjf4+X7fVZhc1nK0DhtrYiB588QpvGt+IYE0Ob5pMi0=
12141214
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
12151215
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
12161216
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=

api-server/graph/custom/float_map.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func MarshalFloatMap(val map[string]*float64) graphql.Marshaler {
1717
})
1818
}
1919

20+
// TODO: this unmarshaler is not working and is needed for input types
2021
func UnmarshalFloatMap(v interface{}) (map[string]*float64, error) {
2122
if m, ok := v.(map[string]*float64); ok {
2223
return m, nil

api-server/graph/custom/forwarding_rule_map.go

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func MarshalForwardingRuleMap(val map[string]*observabilityv1alpha1.ForwardingRu
2020
})
2121
}
2222

23+
// TODO: this unmarshaler is not working and is needed for input types
2324
func UnmarshalForwardingRuleMap(v interface{}) (map[string]*observabilityv1alpha1.ForwardingRule, error) {
2425
if m, ok := v.(map[string]*observabilityv1alpha1.ForwardingRule); ok {
2526
return m, nil

0 commit comments

Comments
 (0)