Skip to content

Commit 3c157e3

Browse files
committed
[Feature] [Platform] Expose Route Name via Header
1 parent a5f5804 commit 3c157e3

File tree

10 files changed

+244
-103
lines changed

10 files changed

+244
-103
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
- (Feature) Improve Helm Chart Manager
4646
- (Bugfix) (Platform) Proper Path handler in StorageV2
4747
- (Feature) Helm Chart Values merge methods
48+
- (Feature) (Platform) Expose Route Name via Header
4849

4950
## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14)
5051
- (Feature) ArangoRoute CRD

docs/cli/arangodb_operator_ops.md

+18-17
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,23 @@ Usage:
9898
arangodb_operator_ops debug-package [flags]
9999
100100
Flags:
101-
--generator.agency-dump Define if generator agency-dump is enabled (default true)
102-
--generator.analytics Define if generator analytics is enabled (default true)
103-
--generator.backupBackup Define if generator backupBackup is enabled (default true)
104-
--generator.deployments Define if generator deployments is enabled (default true)
105-
--generator.kubernetes-events Define if generator kubernetes-events is enabled (default true)
106-
--generator.kubernetes-pods Define if generator kubernetes-pods is enabled (default true)
107-
--generator.kubernetes-secrets Define if generator kubernetes-secrets is enabled (default true)
108-
--generator.kubernetes-services Define if generator kubernetes-services is enabled (default true)
109-
--generator.ml Define if generator ml is enabled (default true)
110-
--generator.networking Define if generator networking is enabled (default true)
111-
--generator.platform Define if generator platform is enabled (default true)
112-
--generator.scheduler Define if generator scheduler is enabled (default true)
113-
-h, --help help for debug-package
114-
--hide-sensitive-data Hide sensitive data (default true)
115-
-n, --namespace string Kubernetes namespace (default "default")
116-
-o, --output - Output of the result gz file. If set to - then stdout is used (default "out.tar.gz")
117-
--pod-logs Collect pod logs (default true)
101+
--generator.agency-dump Define if generator agency-dump is enabled (default true)
102+
--generator.analytics Define if generator analytics is enabled (default true)
103+
--generator.backupBackup Define if generator backupBackup is enabled (default true)
104+
--generator.deployments Define if generator deployments is enabled (default true)
105+
--generator.kubernetes-configmaps Define if generator kubernetes-configmaps is enabled (default true)
106+
--generator.kubernetes-events Define if generator kubernetes-events is enabled (default true)
107+
--generator.kubernetes-pods Define if generator kubernetes-pods is enabled (default true)
108+
--generator.kubernetes-secrets Define if generator kubernetes-secrets is enabled (default true)
109+
--generator.kubernetes-services Define if generator kubernetes-services is enabled (default true)
110+
--generator.ml Define if generator ml is enabled (default true)
111+
--generator.networking Define if generator networking is enabled (default true)
112+
--generator.platform Define if generator platform is enabled (default true)
113+
--generator.scheduler Define if generator scheduler is enabled (default true)
114+
-h, --help help for debug-package
115+
--hide-sensitive-data Hide sensitive data (default true)
116+
-n, --namespace string Kubernetes namespace (default "default")
117+
-o, --output - Output of the result gz file. If set to - then stdout is used (default "out.tar.gz")
118+
--pod-logs Collect pod logs (default true)
118119
```
119120
[END_INJECT]: # (arangodb_operator_ops_cmd_debug_package)

integrations/scheduler/v2/definition/helm.pb.go

+117-80
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

integrations/scheduler/v2/definition/helm.proto

+8
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ message SchedulerV2InstallRequest {
102102
message SchedulerV2InstallRequestOptions {
103103
// Release Labels
104104
map<string, string> labels = 1;
105+
106+
// Waits for the upgrade to be completed
107+
optional bool wait = 2;
105108
}
106109

107110
// Response
@@ -130,6 +133,9 @@ message SchedulerV2UpgradeRequest {
130133
message SchedulerV2UpgradeRequestOptions {
131134
// Release Labels
132135
map<string, string> labels = 1;
136+
137+
// Waits for the upgrade to be completed
138+
optional bool wait = 2;
133139
}
134140

135141
// Response
@@ -154,6 +160,8 @@ message SchedulerV2UninstallRequest {
154160

155161
// Request Options
156162
message SchedulerV2UninstallRequestOptions {
163+
// Waits for the upgrade to be completed
164+
optional bool wait = 1;
157165
}
158166

159167
// Response

integrations/scheduler/v2/definition/helpers.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -91,6 +91,7 @@ func (i *SchedulerV2InstallRequestOptions) Options() []util.Mod[action.Install]
9191
if v := i.GetLabels(); len(v) > 0 {
9292
opts = append(opts, func(in *action.Install) {
9393
in.Labels = v
94+
in.Wait = util.OptionalType(i.Wait, false)
9495
})
9596
}
9697

@@ -107,6 +108,7 @@ func (i *SchedulerV2UpgradeRequestOptions) Options() []util.Mod[action.Upgrade]
107108
if v := i.GetLabels(); len(v) > 0 {
108109
opts = append(opts, func(in *action.Upgrade) {
109110
in.Labels = v
111+
in.Wait = util.OptionalType(i.Wait, false)
110112
})
111113
}
112114

@@ -144,6 +146,10 @@ func (i *SchedulerV2UninstallRequestOptions) Options() []util.Mod[action.Uninsta
144146

145147
var opts []util.Mod[action.Uninstall]
146148

149+
opts = append(opts, func(in *action.Uninstall) {
150+
in.Wait = util.OptionalType(i.Wait, false)
151+
})
152+
147153
return opts
148154
}
149155

pkg/debug_package/generator.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@ var rootFactories = []shared.Factory{
3939
kubernetes.Events(),
4040
kubernetes.Pods(),
4141
kubernetes.Secrets(),
42+
kubernetes.ConfigMaps(),
4243
kubernetes.Services(),
4344
kubernetes.Deployments(),
4445
kubernetes.AgencyDump(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
//
20+
21+
package kubernetes
22+
23+
import (
24+
"context"
25+
26+
"github.com/rs/zerolog"
27+
core "k8s.io/api/core/v1"
28+
"k8s.io/client-go/kubernetes"
29+
30+
"github.com/arangodb/kube-arangodb/pkg/debug_package/cli"
31+
"github.com/arangodb/kube-arangodb/pkg/debug_package/shared"
32+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
33+
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
34+
)
35+
36+
func ConfigMaps() shared.Factory {
37+
return shared.NewFactory("kubernetes-configmaps", true, configmaps)
38+
}
39+
40+
func listConfigMaps(client kubernetes.Interface) func() ([]*core.ConfigMap, error) {
41+
return func() ([]*core.ConfigMap, error) {
42+
return ListObjects[*core.ConfigMapList, *core.ConfigMap](context.Background(), client.CoreV1().ConfigMaps(cli.GetInput().Namespace), func(result *core.ConfigMapList) []*core.ConfigMap {
43+
q := make([]*core.ConfigMap, len(result.Items))
44+
45+
for id, e := range result.Items {
46+
q[id] = e.DeepCopy()
47+
}
48+
49+
return q
50+
})
51+
}
52+
}
53+
54+
func configmaps(logger zerolog.Logger, files chan<- shared.File) error {
55+
k, ok := kclient.GetDefaultFactory().Client()
56+
if !ok {
57+
return errors.Errorf("Client is not initialised")
58+
}
59+
60+
files <- shared.NewYAMLFile("kubernetes/configmaps.yaml", listConfigMaps(k.Kubernetes()))
61+
62+
return nil
63+
}

pkg/debug_package/generators/kubernetes/secrets.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -51,7 +51,7 @@ func listSecrets(client kubernetes.Interface) func() ([]*core.Secret, error) {
5151
z.Data[k] = []byte(util.SHA256(z.Data[k]))
5252
}
5353
}
54-
q[id] = e.DeepCopy()
54+
q[id] = z.DeepCopy()
5555
}
5656

5757
return q

pkg/deployment/resources/config_map_gateway.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -44,6 +44,10 @@ import (
4444
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher"
4545
)
4646

47+
const (
48+
EnvoyRouteHeader = "arangodb-platform-route"
49+
)
50+
4751
func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error {
4852
deploymentName := r.context.GetAPIObject().GetName()
4953
configMapName := GetGatewayConfigMapName(deploymentName)
@@ -229,6 +233,9 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto
229233
pbImplEnvoyAuthV3.AuthConfigAuthPassModeKey: string(target.Authentication.PassMode),
230234
},
231235
}
236+
dest.ResponseHeaders = map[string]string{
237+
EnvoyRouteHeader: at.GetName(),
238+
}
232239
cfg.Destinations[at.Spec.GetRoute().GetPath()] = dest
233240
}
234241

pkg/deployment/resources/gateway/gateway_config_destination.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import (
2424
"time"
2525

2626
clusterAPI "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3"
27+
coreAPI "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
2728
endpointAPI "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3"
2829
routeAPI "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
2930
"google.golang.org/protobuf/types/known/anypb"
@@ -70,6 +71,8 @@ type ConfigDestination struct {
7071
UpgradeConfigs ConfigDestinationsUpgrade `json:"upgradeConfigs,omitempty"`
7172

7273
TLS ConfigDestinationTLS `json:"tls,omitempty"`
74+
75+
ResponseHeaders map[string]string `json:"responseHeaders,omitempty"`
7376
}
7477

7578
func (c *ConfigDestination) Validate() error {
@@ -106,12 +109,26 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e
106109
return nil, err
107110
}
108111

112+
var headers []*coreAPI.HeaderValueOption
113+
114+
for k, v := range c.ResponseHeaders {
115+
headers = append(headers, &coreAPI.HeaderValueOption{
116+
Header: &coreAPI.HeaderValue{
117+
Key: k,
118+
Value: v,
119+
},
120+
AppendAction: coreAPI.HeaderValueOption_OVERWRITE_IF_EXISTS_OR_ADD,
121+
KeepEmptyValue: false,
122+
})
123+
}
124+
109125
return &routeAPI.Route{
110126
Match: &routeAPI.RouteMatch{
111127
PathSpecifier: &routeAPI.RouteMatch_Prefix{
112128
Prefix: prefix,
113129
},
114130
},
131+
ResponseHeadersToAdd: headers,
115132
Action: &routeAPI.Route_Route{
116133
Route: &routeAPI.RouteAction{
117134
ClusterSpecifier: &routeAPI.RouteAction_Cluster{

0 commit comments

Comments
 (0)