mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package operation
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/psviderski/uncloud/pkg/api"
|
|
)
|
|
|
|
// Operation represents a single atomic operation in a deployment process.
|
|
// Operations can be composed to form complex deployment strategies.
|
|
type Operation interface {
|
|
// Execute performs the operation using the provided client.
|
|
// TODO: Encapsulate the client in the operation as otherwise it gives an impression that different clients
|
|
// can be provided. But in reality, the operation is tightly coupled with the client that was used to create it.
|
|
Execute(ctx context.Context, cli Client) error
|
|
// Format returns a human-readable representation of the operation.
|
|
// TODO: get rid of the resolver and assign the required names for formatting in the operation itself.
|
|
Format(resolver NameResolver) string
|
|
String() string
|
|
}
|
|
|
|
// NameResolver resolves machine and container IDs to their names.
|
|
type NameResolver interface {
|
|
MachineName(machineID string) string
|
|
ContainerName(containerID string) string
|
|
}
|
|
|
|
// TODO: pass api.ServiceContainer to operations to simplify operation formatting in the plan.
|
|
|
|
// Client defines the interface required to execute deployment operations.
|
|
type Client interface {
|
|
api.ContainerClient
|
|
api.VolumeClient
|
|
}
|