Skip to content

feat: Multi-cloud provider support (Google Cloud, Azure) #128

@mpyw

Description

@mpyw

Summary

Add support for Google Cloud and Azure secret/config management services, making suve a truly unified tool across cloud providers.

Target Services

Provider Parameter Store Secrets Manager E2E Emulator
AWS SSM Parameter Store Secrets Manager LocalStack
Google Cloud - Secret Manager gcp-secret-manager-emulator
Azure App Configuration Key Vault Official / KV Emulator

Implementation Roadmap

Phase A: Foundation (Complete ✅)

Phase B: AWS Refactoring (In Progress)

Migrate UseCase/Staging layers from paramapi.*/secretapi.* to provider.* interfaces.

Phase C: Multi-cloud (Future)


PR Plan Details

PR #2: Read UseCase Migration

Files:

  • internal/usecase/param/show.go, log.go, list.go, diff.go
  • internal/usecase/secret/show.go, log.go, list.go, diff.go

Interface mapping:

Old New
paramapi.GetParameterAPI provider.ParameterReader.GetParameter
paramapi.GetParameterHistoryAPI provider.ParameterReader.GetParameterHistory
paramapi.DescribeParametersAPI provider.ParameterReader.ListParameters
secretapi.GetSecretValueAPI provider.SecretReader.GetSecret
secretapi.ListSecretVersionIDsAPI provider.SecretReader.GetSecretVersions
secretapi.ListSecretsAPI provider.SecretReader.ListSecrets
secretapi.DescribeSecretAPI provider.SecretDescriber.DescribeSecret

PR #3: Write UseCase Migration

Files:

  • internal/usecase/param/create.go, update.go, delete.go
  • internal/usecase/secret/create.go, update.go, delete.go, restore.go

PR #4: Staging Strategy Migration

Files:

  • internal/staging/param.go, secret.go
  • internal/staging/cli/*.go
  • internal/cli/commands/stage/param/, secret/

PR #5: Version Resolution Abstraction

Provider-agnostic version resolution interface:

type VersionSpec interface {
    Name() string
    HasAbsolute() bool
    Shift() int
}

type VersionResolver interface {
    ResolveVersion(ctx context.Context, spec VersionSpec) (string, error)
}

Dependency Graph

[Phase A: Complete] ✅
    |
    +---> PR #2 (Read UseCase)
    |         |
    |         +---> PR #5 (Version Resolution)
    |
    +---> PR #3 (Write UseCase)
              |
              +---> PR #4 (Staging Strategy)
                        |
                        +---> Phase C (Multi-cloud)

CLI Structure (Future)

# AWS: --region required
suve aws --region=ap-northeast-1 param show /my/param
suve aws --region=ap-northeast-1 secret show my-secret

# Google Cloud: --project required
suve gcloud --project=my-project secret show my-secret

# Azure: --resource-group, --vault/--store required
suve azure --resource-group=my-rg keyvault --vault=my-vault show my-secret
suve azure --resource-group=my-rg appconfig --store=my-store show my-key

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions