Skip to content

Commit

Permalink
feat: AzureRwxBackup Clients (#1047)
Browse files Browse the repository at this point in the history
  • Loading branch information
kevin-kho authored Feb 24, 2025
1 parent 55c0988 commit 3d949b3
Show file tree
Hide file tree
Showing 9 changed files with 212 additions and 4 deletions.
3 changes: 2 additions & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import (
scopeclient "github.com/kyma-project/cloud-manager/pkg/kcp/scope/client"
awsnfsbackupclient "github.com/kyma-project/cloud-manager/pkg/skr/awsnfsvolumebackup/client"
awsnfsrestoreclient "github.com/kyma-project/cloud-manager/pkg/skr/awsnfsvolumerestore/client"
//azurerwxvolumebackupclient "github.com/kyma-project/cloud-manager/pkg/skr/azurerwxvolumebackup/client"

"github.com/kyma-project/cloud-manager/pkg/util"

Expand Down Expand Up @@ -262,7 +263,7 @@ func main() {
os.Exit(1)
}

//if err = cloudresourcescontroller.SetupAzureRwxBackupReconciler(skrRegistry); err != nil {
//if err = cloudresourcescontroller.SetupAzureRwxBackupReconciler(skrRegistry, azurerwxvolumebackupclient.NewClientProvider()); err != nil {
// setupLog.Error(err, "unable to create controller", "controller", "AzureRwxVolumeBackup")
// os.Exit(1)
//}
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v5 v5.2.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservices v1.6.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4 v4.1.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/redis/armredis v1.0.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0
github.com/aws/aws-sdk-go-v2 v1.32.7
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v5 v5.2
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v5 v5.2.0/go.mod h1:UmyOatRyQodVpp55Jr5WJmnkmVW4wKfo85uHFmMEjfM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 h1:yzrctSl9GMIQ5lHu7jc8olOsGjWDCsBpJhWqfGa/YIM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0/go.mod h1:GE4m0rnnfwLGX0Y9A9A25Zx5N/90jneT5ABevqzhuFQ=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservices v1.6.0 h1:tyFbORs8iNJGoD4DCRTweqLRCS8PiWqyoj8TqLFZZfo=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservices v1.6.0/go.mod h1:D01KTLlDky2hIhRbX5NjyDb84O6jflookw6b+Gd5h/U=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4 v4.1.0 h1:9UWpKYKgpzbMlLzAib1NbqJhfS9vfe0vR6JqbOQghkI=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4 v4.1.0/go.mod h1:yCSotfXkHjUuPsFlZkWxi3lgI/wT8x/alEY7k8PJ+FM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/redis/armredis v1.0.0 h1:nmpTBgRg1HynngFYICRhceC7s5dmbKN9fJ/XQz/UQ2I=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/redis/armredis v1.0.0/go.mod h1:3yjiOtnkVociBTlF7UZrwAGfJrGaOCsvtVS4HzNajxQ=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ package cloudresources

import (
"context"
azureclient "github.com/kyma-project/cloud-manager/pkg/kcp/provider/azure/client"
"github.com/kyma-project/cloud-manager/pkg/skr/azurerwxvolumebackup"
"github.com/kyma-project/cloud-manager/pkg/skr/azurerwxvolumebackup/client"
skrruntime "github.com/kyma-project/cloud-manager/pkg/skr/runtime"
skrreconciler "github.com/kyma-project/cloud-manager/pkg/skr/runtime/reconcile"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
Expand All @@ -27,7 +29,9 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
)

type AzureRwxVolumeBackupReconcilerFactory struct{}
type AzureRwxVolumeBackupReconcilerFactory struct {
clientProvider azureclient.ClientProvider[client.Client]
}

func (f *AzureRwxVolumeBackupReconcilerFactory) New(args skrreconciler.ReconcilerArguments) reconcile.Reconciler {
return &AzureRwxVolumeBackupReconciler{
Expand Down Expand Up @@ -57,9 +61,11 @@ func (r *AzureRwxVolumeBackupReconciler) Reconcile(ctx context.Context, req ctrl
return r.reconciler.Reconcile(ctx, req)
}

func SetupAzureRwxBackupReconciler(reg skrruntime.SkrRegistry) error {
func SetupAzureRwxBackupReconciler(reg skrruntime.SkrRegistry, clientProvider azureclient.ClientProvider[client.Client]) error {
return reg.Register().
WithFactory(&AzureRwxVolumeBackupReconcilerFactory{}).
WithFactory(&AzureRwxVolumeBackupReconcilerFactory{
clientProvider: clientProvider,
}).
For(&cloudresourcesv1beta1.AzureRwxVolumeBackup{}).
Complete()
}
30 changes: 30 additions & 0 deletions pkg/skr/azurerwxvolumebackup/client/backup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package client

import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4"
)

type BackupClient interface {
TriggerBackup(ctx context.Context)
}

type backupClient struct {
*armrecoveryservicesbackup.BackupsClient
}

func NewBackupClient(subscriptionId string, cred *azidentity.ClientSecretCredential) (BackupClient, error) {

bc, err := armrecoveryservicesbackup.NewBackupsClient(subscriptionId, cred, nil)

if err != nil {
return nil, err
}

return backupClient{bc}, nil
}

func (c backupClient) TriggerBackup(ctx context.Context) {
// TODO: trigger logic here
}
63 changes: 63 additions & 0 deletions pkg/skr/azurerwxvolumebackup/client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package client

import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
azureclient "github.com/kyma-project/cloud-manager/pkg/kcp/provider/azure/client"
)

type Client interface {
VaultClient
BackupClient
ProtectionPoliciesClient
RecoveryPointClient
}

type client struct {
VaultClient
BackupClient
ProtectionPoliciesClient
RecoveryPointClient
}

func NewClientProvider() azureclient.ClientProvider[Client] {

return func(ctx context.Context, clientId, clientSecret, subscriptionId, tenantId string) (Client, error) {
var c Client
cred, err := azidentity.NewClientSecretCredential(tenantId, clientId, clientSecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
return nil, err
}

vc, err := NewVaultClient(subscriptionId, cred)
if err != nil {
return nil, err
}

bc, err := NewBackupClient(subscriptionId, cred)
if err != nil {
return nil, err
}

ppc, err := NewProtectionPoliciesClient(subscriptionId, cred)
if err != nil {
return nil, err
}

rpc, err := NewRecoveryPointClient(subscriptionId, cred)
if err != nil {
return nil, err
}

c = client{
vc,
bc,
ppc,
rpc,
}

return c, nil

}

}
35 changes: 35 additions & 0 deletions pkg/skr/azurerwxvolumebackup/client/protectionPolicies.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package client

import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4"
)

type ProtectionPoliciesClient interface {
CreateBackupPolicy(ctx context.Context)
DeleteBackupPolicy(ctx context.Context)
}

type protectionPoliciesClient struct {
*armrecoveryservicesbackup.ProtectionPoliciesClient
}

func NewProtectionPoliciesClient(subscriptionId string, cred *azidentity.ClientSecretCredential) (ProtectionPoliciesClient, error) {

ppc, err := armrecoveryservicesbackup.NewProtectionPoliciesClient(subscriptionId, cred, nil)

if err != nil {
return nil, err
}

return protectionPoliciesClient{ppc}, nil
}

func (c protectionPoliciesClient) CreateBackupPolicy(ctx context.Context) {
// TODO: implementation details
}

func (c protectionPoliciesClient) DeleteBackupPolicy(ctx context.Context) {
// TODO: implementation details
}
33 changes: 33 additions & 0 deletions pkg/skr/azurerwxvolumebackup/client/recoveryPoint.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package client

import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4"
)

type RecoveryPointClient interface {
GetRecoveryPoint(ctx context.Context)
ListRecoveryPoints(ctx context.Context)
}

type recoveryPointClient struct {
*armrecoveryservicesbackup.RecoveryPointsClient
}

func NewRecoveryPointClient(subscriptionId string, cred *azidentity.ClientSecretCredential) (RecoveryPointClient, error) {

rpc, err := armrecoveryservicesbackup.NewRecoveryPointsClient(subscriptionId, cred, nil)
if err != nil {
return nil, err
}

return recoveryPointClient{rpc}, nil
}

func (c recoveryPointClient) GetRecoveryPoint(ctx context.Context) {
// TODO: implementation details
}
func (c recoveryPointClient) ListRecoveryPoints(ctx context.Context) {
// TODO: implementation details
}
34 changes: 34 additions & 0 deletions pkg/skr/azurerwxvolumebackup/client/vault.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package client

import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservices"
)

type VaultClient interface {
CreateVault(ctx context.Context)
DeleteVault(ctx context.Context)
}

type vaultClient struct {
*armrecoveryservices.VaultsClient
}

func NewVaultClient(subscriptionId string, cred *azidentity.ClientSecretCredential) (VaultClient, error) {

vc, err := armrecoveryservices.NewVaultsClient(subscriptionId, cred, nil)
if err != nil {
return nil, err
}

return vaultClient{vc}, nil
}

func (c vaultClient) CreateVault(ctx context.Context) {
// TODO: implementation details
}

func (c vaultClient) DeleteVault(ctx context.Context) {
// TODO: implementation details
}

0 comments on commit 3d949b3

Please sign in to comment.