CloudMigrations: Implement snapshot management apis (#89296)
* add new apis * add payloads * create snapshot status type * add some impl * finish implementing update * start implementing build snapshot func * add more fake build logic * add cancel endpoint. do some cleanup * implement GetSnapshot * implement upload snapshot * merge onprem status with gms result * get it working * update comment * rename list endpoint * add query limit and offset * add helper method to snapshot * little bit of cleanup * work on swagger annotations * manual merge * generate swagger specs * clean up curl commands * fix bugs found during final testing * fix linter issue * fix unit test
This commit is contained in:
@@ -15,6 +15,7 @@ var (
|
||||
ErrMigrationRunNotFound = errutil.NotFound("cloudmigrations.migrationRunNotFound").Errorf("Migration run not found")
|
||||
ErrMigrationNotDeleted = errutil.Internal("cloudmigrations.sessionNotDeleted").Errorf("Session not deleted")
|
||||
ErrTokenNotFound = errutil.NotFound("cloudmigrations.tokenNotFound").Errorf("Token not found")
|
||||
ErrSnapshotNotFound = errutil.NotFound("cloudmigrations.snapshotNotFound").Errorf("Snapshot not found")
|
||||
)
|
||||
|
||||
// CloudMigration domain structs
|
||||
@@ -31,26 +32,64 @@ type CloudMigrationSession struct {
|
||||
}
|
||||
|
||||
type CloudMigrationSnapshot struct {
|
||||
ID int64 `xorm:"pk autoincr 'id'"`
|
||||
UID string `xorm:"uid"`
|
||||
SessionUID string `xorm:"session_uid"`
|
||||
Result []byte //store raw gms response body
|
||||
Created time.Time
|
||||
Updated time.Time
|
||||
Finished time.Time
|
||||
ID int64 `xorm:"pk autoincr 'id'"`
|
||||
UID string `xorm:"uid"`
|
||||
SessionUID string `xorm:"session_uid"`
|
||||
Status SnapshotStatus
|
||||
EncryptionKey string `xorm:"encryption_key"` // stored in the unified secrets table
|
||||
UploadURL string `xorm:"upload_url"`
|
||||
LocalDir string `xorm:"local_directory"`
|
||||
GMSSnapshotUID string `xorm:"gms_snapshot_uid"`
|
||||
ErrorString string `xorm:"error_string"`
|
||||
Created time.Time
|
||||
Updated time.Time
|
||||
Finished time.Time
|
||||
|
||||
// []MigrateDataResponseItem
|
||||
Result []byte `xorm:"result"` //store raw gms response body
|
||||
}
|
||||
|
||||
func (r CloudMigrationSnapshot) GetResult() (*MigrateDataResponse, error) {
|
||||
type SnapshotStatus string
|
||||
|
||||
const (
|
||||
SnapshotStatusInitializing = "initializing"
|
||||
SnapshotStatusCreating = "creating"
|
||||
SnapshotStatusPendingUpload = "pending_upload"
|
||||
SnapshotStatusUploading = "uploading"
|
||||
SnapshotStatusPendingProcessing = "pending_processing"
|
||||
SnapshotStatusProcessing = "processing"
|
||||
SnapshotStatusFinished = "finished"
|
||||
SnapshotStatusError = "error"
|
||||
SnapshotStatusUnknown = "unknown"
|
||||
)
|
||||
|
||||
// Deprecated, use GetSnapshotResult for the async workflow
|
||||
func (s CloudMigrationSnapshot) GetResult() (*MigrateDataResponse, error) {
|
||||
var result MigrateDataResponse
|
||||
err := json.Unmarshal(r.Result, &result)
|
||||
err := json.Unmarshal(s.Result, &result)
|
||||
if err != nil {
|
||||
return nil, errors.New("could not parse result of run")
|
||||
}
|
||||
result.RunUID = r.UID
|
||||
result.RunUID = s.UID
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
type SnapshotList struct {
|
||||
func (s CloudMigrationSnapshot) ShouldQueryGMS() bool {
|
||||
return s.Status == SnapshotStatusPendingProcessing || s.Status == SnapshotStatusProcessing
|
||||
}
|
||||
|
||||
func (s CloudMigrationSnapshot) GetSnapshotResult() ([]MigrateDataResponseItem, error) {
|
||||
var result []MigrateDataResponseItem
|
||||
if len(s.Result) > 0 {
|
||||
err := json.Unmarshal(s.Result, &result)
|
||||
if err != nil {
|
||||
return nil, errors.New("could not parse result of run")
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type CloudMigrationRunList struct {
|
||||
Runs []MigrateDataResponseList
|
||||
}
|
||||
|
||||
@@ -69,6 +108,18 @@ type CloudMigrationSessionListResponse struct {
|
||||
Sessions []CloudMigrationSessionResponse
|
||||
}
|
||||
|
||||
type ListSnapshotsQuery struct {
|
||||
SessionUID string
|
||||
Offset int
|
||||
Limit int
|
||||
}
|
||||
|
||||
type UpdateSnapshotCmd struct {
|
||||
UID string
|
||||
Status SnapshotStatus
|
||||
Result []byte //store raw gms response body
|
||||
}
|
||||
|
||||
// access token
|
||||
|
||||
type CreateAccessTokenResponse struct {
|
||||
@@ -140,3 +191,13 @@ type MigrateDataResponseItem struct {
|
||||
Status ItemStatus
|
||||
Error string
|
||||
}
|
||||
|
||||
type CreateSessionResponse struct {
|
||||
SnapshotUid string
|
||||
}
|
||||
|
||||
type InitializeSnapshotResponse struct {
|
||||
EncryptionKey string
|
||||
UploadURL string
|
||||
GMSSnapshotUID string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user