2022-04-25 12:23:57 -05:00

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)
}