Skip to content

Commit 00289c4

Browse files
authored
[Feature] [Platform] Azure Storage Integration (#2004)
1 parent 76174f8 commit 00289c4

33 files changed

+1676
-117
lines changed

.golangci.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ linters-settings:
9595
pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared
9696
- alias: pbImplStorageV2SharedGCS
9797
pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/gcs
98+
- alias: pbImplStorageV2SharedAzureBlobStorage
99+
pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/abs
98100
- alias: pbImplStorageV2SharedS3
99101
pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/s3
100102
- alias: pbStorageV2

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Change Log
22

33
## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A)
4+
- (Feature) Add scrape annotations for ArangoD pods
5+
- (Feature) (Platform) Azure Storage Integration
46

57
## [1.3.3](https://github.com/arangodb/kube-arangodb/tree/1.3.3) (2025-12-02)
68
- (Bugfix) (Platform) Fix Container Resource Adjustments
@@ -9,7 +11,6 @@
911
- (Feature) (Platform) Dump CLI switch to Services
1012
- (Feature) (Platform) Fix ImagePullSecrets Merge
1113
- (Feature) (Platform) Update Failed Releases
12-
- (Feature) Add scrape annotations for ArangoD pods
1314

1415
## [1.3.2](https://github.com/arangodb/kube-arangodb/tree/1.3.2) (2025-11-20)
1516
- (Bugfix) (Platform) Increase memory limit for Inventory

docs/api/ArangoPlatformStorage.V1Beta1.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,63 @@ title: ArangoPlatformStorage V1Beta1
88

99
## Spec
1010

11+
### .spec.backend.azureBlobStorage.accountName
12+
13+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_abs.go#L39)</sup>
14+
15+
This field is **required**
16+
17+
AccountName specifies the Azure Storage AccountName
18+
used in format https://<account>.blob.core.windows.net/
19+
20+
***
21+
22+
### .spec.backend.azureBlobStorage.bucketName
23+
24+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_abs.go#L46)</sup>
25+
26+
This field is **required**
27+
28+
BucketName specifies the name of the bucket
29+
30+
***
31+
32+
### .spec.backend.azureBlobStorage.bucketPath
33+
34+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_abs.go#L50)</sup>
35+
36+
BucketPath specifies the Prefix within the bucket
37+
38+
***
39+
40+
### .spec.backend.azureBlobStorage.credentialsSecret.name
41+
42+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/shared/v1/object.go#L53)</sup>
43+
44+
This field is **required**
45+
46+
Name of the object
47+
48+
***
49+
50+
### .spec.backend.azureBlobStorage.endpoint
51+
52+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_abs.go#L42)</sup>
53+
54+
Endpoint specifies the Azure Storage custom endpoint
55+
56+
***
57+
58+
### .spec.backend.azureBlobStorage.tenantID
59+
60+
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_abs.go#L34)</sup>
61+
62+
This field is **required**
63+
64+
TenantID specifies the Azure TenantID
65+
66+
***
67+
1168
### .spec.backend.gcs.bucketName
1269

1370
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.3.3/pkg/apis/platform/v1beta1/storage_spec_backend_gcs.go#L35)</sup>

docs/cli/arangodb_operator_integration.md

Lines changed: 113 additions & 103 deletions
Large diffs are not rendered by default.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
layout: page
3+
title: Azure Blob Storage
4+
parent: Storage
5+
grand_parent: ArangoDBPlatform
6+
nav_order: 3
7+
---
8+
9+
# Integration
10+
11+
In order to connect to the Azure Blob storage:
12+
13+
## Azure Credentials
14+
15+
Client ID & Secret with access to the storage container and accounts need to be saved in the secret.
16+
17+
```shell
18+
kubectl create secret generic credentials --from-literal 'clientId=<Azure Client ID>' --from-literal 'clientSecret=<Azure Client Secret>'
19+
```
20+
21+
## Object
22+
23+
Once the Secret is created, we are able to create ArangoPlatformStorage.
24+
25+
```
26+
echo "---
27+
apiVersion: platform.arangodb.com/v1beta1
28+
kind: ArangoPlatformStorage
29+
metadata:
30+
name: deployment
31+
namespace: namespace
32+
spec:
33+
backend:
34+
azureBlobStorage:
35+
bucketName: <Bucket Name>
36+
bucketPath: <Bucket Path>
37+
credentialsSecret:
38+
name: credentials
39+
tenantID: <Azure Tenant ID>
40+
accountName: <Azure Storage Account Name>
41+
endpoint: <Azure Storage Endpoint in case of Private Connection>
42+
" | kubectl apply -f -
43+
```

docs/platform/storage/gcs.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ In order to connect to the GCS (Google Cloud Storage):
1515
ServiceAccount with access to the storage needs to be saved in the secret.
1616

1717
```shell
18-
kubectl create secret generic ca --from-file 'serviceAccount=<ServiceAccount JSON File>'
18+
kubectl create secret generic credentials --from-file 'serviceAccount=<ServiceAccount JSON File>'
1919
```
2020

2121
## Object
@@ -36,6 +36,6 @@ spec:
3636
bucketPath: <Bucket Path>
3737
credentialsSecret:
3838
name: credentials
39-
projectID: gcr-for-testing
39+
projectID: <Google Project ID>
4040
" | kubectl apply -f -
4141
```

docs/platform/storage/minio.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ layout: page
33
title: MinIO
44
parent: Storage
55
grand_parent: ArangoDBPlatform
6-
nav_order: 3
6+
nav_order: 4
77
---
88

99
# Integration

go.mod

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ require (
5555
github.com/rs/zerolog v1.33.0
5656
github.com/spf13/cobra v1.10.1
5757
github.com/spf13/pflag v1.0.10
58-
github.com/stretchr/testify v1.10.0
58+
github.com/stretchr/testify v1.11.1
5959
golang.org/x/sync v0.17.0
6060
golang.org/x/sys v0.38.0
6161
golang.org/x/text v0.30.0
@@ -74,14 +74,17 @@ require (
7474

7575
require (
7676
cloud.google.com/go/storage v1.55.0
77+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0
78+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1
79+
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3
7780
github.com/Masterminds/semver/v3 v3.3.0
7881
github.com/arangodb-managed/apis v0.89.1
7982
github.com/arangodb-managed/integration-apis v0.2.1
8083
github.com/aws/aws-sdk-go v1.55.6
8184
github.com/coreos/go-oidc/v3 v3.14.1
8285
github.com/envoyproxy/go-control-plane/envoy v1.35.0
8386
github.com/go-logr/zerologr v1.2.3
84-
github.com/golang-jwt/jwt/v5 v5.2.2
87+
github.com/golang-jwt/jwt/v5 v5.3.0
8588
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1
8689
github.com/jedib0t/go-pretty/v6 v6.6.5
8790
github.com/regclient/regclient v0.10.0
@@ -103,7 +106,9 @@ require (
103106
cloud.google.com/go/monitoring v1.24.2 // indirect
104107
dario.cat/mergo v1.0.1 // indirect
105108
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
109+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect
106110
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
111+
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect
107112
github.com/BurntSushi/toml v1.4.0 // indirect
108113
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect
109114
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect
@@ -183,6 +188,7 @@ require (
183188
github.com/kkdai/maglev v0.2.0 // indirect
184189
github.com/klauspost/compress v1.18.1 // indirect
185190
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
191+
github.com/kylelemons/godebug v1.1.0 // indirect
186192
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
187193
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
188194
github.com/leodido/go-urn v1.2.4 // indirect
@@ -209,6 +215,7 @@ require (
209215
github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible // indirect
210216
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
211217
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
218+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
212219
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
213220
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
214221
github.com/prometheus/common v0.55.0 // indirect

go.sum

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,18 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
2626
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
2727
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
2828
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
29+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc=
30+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw=
31+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4=
32+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0=
33+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA=
34+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI=
35+
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3 h1:ZJJNFaQ86GVKQ9ehwqyAFE6pIfyicpuJ8IkVaPBc6/4=
36+
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3/go.mod h1:URuDvhmATVKqHBH9/0nOiNKk0+YcwfQ3WkK5PqHKxc8=
2937
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
3038
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
39+
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs=
40+
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk=
3141
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
3242
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
3343
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
@@ -244,6 +254,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
244254
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
245255
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
246256
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
257+
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
258+
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
247259
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
248260
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
249261
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -342,6 +354,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
342354
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
343355
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
344356
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
357+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
358+
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
345359
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
346360
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
347361
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
@@ -422,6 +436,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v
422436
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
423437
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
424438
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
439+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
440+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
425441
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
426442
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
427443
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -595,6 +611,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
595611
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
596612
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
597613
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
614+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
598615
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
599616
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
600617
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=

integrations/storage/v2/configuration.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"context"
2525

2626
pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared"
27+
pbImplStorageV2SharedAzureBlobStorage "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/abs"
2728
pbImplStorageV2SharedGCS "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/gcs"
2829
pbImplStorageV2SharedS3 "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/s3"
2930
"github.com/arangodb/kube-arangodb/pkg/util"
@@ -33,8 +34,9 @@ import (
3334
type ConfigurationType string
3435

3536
const (
36-
ConfigurationTypeS3 ConfigurationType = "s3"
37-
ConfigurationTypeGCS ConfigurationType = "gcs"
37+
ConfigurationTypeS3 ConfigurationType = "s3"
38+
ConfigurationTypeGCS ConfigurationType = "gcs"
39+
ConfigurationTypeAzure ConfigurationType = "azureBlobStorage"
3840
)
3941

4042
func NewConfiguration(mods ...util.ModR[Configuration]) Configuration {
@@ -46,8 +48,9 @@ func NewConfiguration(mods ...util.ModR[Configuration]) Configuration {
4648
type Configuration struct {
4749
Type ConfigurationType
4850

49-
S3 pbImplStorageV2SharedS3.Configuration
50-
GCS pbImplStorageV2SharedGCS.Configuration
51+
S3 pbImplStorageV2SharedS3.Configuration
52+
GCS pbImplStorageV2SharedGCS.Configuration
53+
AzureBlobStorage pbImplStorageV2SharedAzureBlobStorage.Configuration
5154
}
5255

5356
func (c Configuration) IO(ctx context.Context) (pbImplStorageV2Shared.IO, error) {
@@ -56,6 +59,8 @@ func (c Configuration) IO(ctx context.Context) (pbImplStorageV2Shared.IO, error)
5659
return c.S3.New()
5760
case ConfigurationTypeGCS:
5861
return c.GCS.New(ctx)
62+
case ConfigurationTypeAzure:
63+
return c.AzureBlobStorage.New()
5964
default:
6065
return nil, errors.Errorf("Unknown Type: %s", c.Type)
6166
}

0 commit comments

Comments
 (0)