73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package singleprocess
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
"github.com/hashicorp/vagrant/internal/server"
|
|
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
|
"github.com/hashicorp/vagrant/internal/server/singleprocess/state"
|
|
)
|
|
|
|
func (s *service) UpsertTask(
|
|
ctx context.Context,
|
|
req *vagrant_server.UpsertTaskRequest,
|
|
) (*vagrant_server.UpsertTaskResponse, error) {
|
|
result := req.Task
|
|
|
|
// If we have no ID, then we're inserting and need to generate an ID.
|
|
insert := result.Id == ""
|
|
if insert {
|
|
// Get the next id
|
|
id, err := server.Id()
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.Internal, "uuid generation failed: %s", err)
|
|
}
|
|
|
|
// Specify the id
|
|
result.Id = id
|
|
}
|
|
|
|
if err := s.state.TaskPut(!insert, result); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &vagrant_server.UpsertTaskResponse{Task: result}, nil
|
|
}
|
|
|
|
// TODO: test
|
|
func (s *service) ListTasks(
|
|
ctx context.Context,
|
|
req *vagrant_server.ListTasksRequest,
|
|
) (*vagrant_server.ListTasksResponse, error) {
|
|
result, err := s.state.TaskList(req.Scope,
|
|
state.ListWithStatusFilter(req.Status...),
|
|
state.ListWithOrder(req.Order),
|
|
state.ListWithPhysicalState(req.PhysicalState),
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &vagrant_server.ListTasksResponse{Tasks: result}, nil
|
|
}
|
|
|
|
// TODO: test
|
|
func (s *service) GetLatestTask(
|
|
ctx context.Context,
|
|
req *vagrant_server.GetLatestTaskRequest,
|
|
) (*vagrant_server.Task, error) {
|
|
return s.state.TaskLatest(req.Scope)
|
|
}
|
|
|
|
// GetTask returns a Task based on ID
|
|
func (s *service) GetTask(
|
|
ctx context.Context,
|
|
req *vagrant_server.GetTaskRequest,
|
|
) (*vagrant_server.Task, error) {
|
|
return s.state.TaskGet(req.Ref)
|
|
}
|