Update server service and state to use Target and refs from sdk
This commit is contained in:
parent
4f25d67288
commit
3e58d4dc42
@ -22,7 +22,7 @@ type service struct {
|
||||
id string
|
||||
|
||||
vagrant_server.UnimplementedVagrantServer
|
||||
vagrant_plugin_sdk.UnimplementedMachineServiceServer
|
||||
vagrant_plugin_sdk.UnimplementedTargetServiceServer
|
||||
vagrant_plugin_sdk.UnimplementedProjectServiceServer
|
||||
}
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
)
|
||||
|
||||
@ -34,7 +35,7 @@ func (s *State) BasisFind(b *vagrant_server.Basis) (*vagrant_server.Basis, error
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *State) BasisGet(ref *vagrant_server.Ref_Basis) (*vagrant_server.Basis, error) {
|
||||
func (s *State) BasisGet(ref *vagrant_plugin_sdk.Ref_Basis) (*vagrant_server.Basis, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -62,7 +63,7 @@ func (s *State) BasisPut(b *vagrant_server.Basis) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *State) BasisDelete(ref *vagrant_server.Ref_Basis) error {
|
||||
func (s *State) BasisDelete(ref *vagrant_plugin_sdk.Ref_Basis) error {
|
||||
memTxn := s.inmem.Txn(true)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -77,7 +78,7 @@ func (s *State) BasisDelete(ref *vagrant_server.Ref_Basis) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *State) BasisList() ([]*vagrant_server.Ref_Basis, error) {
|
||||
func (s *State) BasisList() ([]*vagrant_plugin_sdk.Ref_Basis, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -87,7 +88,7 @@ func (s *State) BasisList() ([]*vagrant_server.Ref_Basis, error) {
|
||||
func (s *State) basisGet(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Basis,
|
||||
ref *vagrant_plugin_sdk.Ref_Basis,
|
||||
) (*vagrant_server.Basis, error) {
|
||||
var result vagrant_server.Basis
|
||||
b := dbTxn.Bucket(basisBucket)
|
||||
@ -136,7 +137,7 @@ func (s *State) basisFind(
|
||||
return nil, status.Errorf(codes.NotFound, "record not found for Basis")
|
||||
}
|
||||
|
||||
return s.basisGet(dbTxn, memTxn, &vagrant_server.Ref_Basis{
|
||||
return s.basisGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Basis{
|
||||
ResourceId: match.Id,
|
||||
})
|
||||
}
|
||||
@ -177,13 +178,13 @@ func (s *State) basisPut(
|
||||
|
||||
func (s *State) basisList(
|
||||
memTxn *memdb.Txn,
|
||||
) ([]*vagrant_server.Ref_Basis, error) {
|
||||
) ([]*vagrant_plugin_sdk.Ref_Basis, error) {
|
||||
iter, err := memTxn.Get(basisIndexTableName, basisIndexIdIndexName+"_prefix", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var result []*vagrant_server.Ref_Basis
|
||||
var result []*vagrant_plugin_sdk.Ref_Basis
|
||||
for {
|
||||
next := iter.Next()
|
||||
if next == nil {
|
||||
@ -191,7 +192,7 @@ func (s *State) basisList(
|
||||
}
|
||||
idx := next.(*basisIndexRecord)
|
||||
|
||||
result = append(result, &vagrant_server.Ref_Basis{
|
||||
result = append(result, &vagrant_plugin_sdk.Ref_Basis{
|
||||
ResourceId: idx.Id,
|
||||
Name: idx.Name,
|
||||
})
|
||||
@ -203,7 +204,7 @@ func (s *State) basisList(
|
||||
func (s *State) basisDelete(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Basis,
|
||||
ref *vagrant_plugin_sdk.Ref_Basis,
|
||||
) error {
|
||||
b, err := s.basisGet(dbTxn, memTxn, ref)
|
||||
if err != nil {
|
||||
@ -306,7 +307,7 @@ func (s *State) newBasisIndexRecord(b *vagrant_server.Basis) *basisIndexRecord {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *State) newBasisIndexRecordByRef(ref *vagrant_server.Ref_Basis) *basisIndexRecord {
|
||||
func (s *State) newBasisIndexRecordByRef(ref *vagrant_plugin_sdk.Ref_Basis) *basisIndexRecord {
|
||||
return &basisIndexRecord{
|
||||
Id: ref.ResourceId,
|
||||
Name: strings.ToLower(ref.Name),
|
||||
@ -317,6 +318,6 @@ func (s *State) basisId(b *vagrant_server.Basis) []byte {
|
||||
return []byte(b.ResourceId)
|
||||
}
|
||||
|
||||
func (s *State) basisIdByRef(ref *vagrant_server.Ref_Basis) []byte {
|
||||
func (s *State) basisIdByRef(ref *vagrant_plugin_sdk.Ref_Basis) []byte {
|
||||
return []byte(ref.ResourceId)
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"github.com/boltdb/bolt"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/hashicorp/go-memdb"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
serversort "github.com/hashicorp/vagrant/internal/server/sort"
|
||||
@ -159,7 +160,7 @@ func (s *State) configGetExact(
|
||||
// return nil, err
|
||||
// }
|
||||
|
||||
case *vagrant_server.Ref_Project:
|
||||
case *vagrant_plugin_sdk.Ref_Project:
|
||||
var err error
|
||||
iter, err = memTxn.Get(
|
||||
configIndexTableName,
|
||||
|
||||
@ -17,6 +17,7 @@ import (
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
)
|
||||
|
||||
@ -96,9 +97,9 @@ func (op *genericOperation) Get(s *State, ref *vagrant_server.Ref_Operation) (in
|
||||
case *vagrant_server.Ref_Operation_Id:
|
||||
id = t.Id
|
||||
|
||||
case *vagrant_server.Ref_Operation_MachineSequence:
|
||||
case *vagrant_server.Ref_Operation_TargetSequence:
|
||||
var err error
|
||||
id, err = op.getIdForSeq(s, tx, memTxn, t.MachineSequence.Number)
|
||||
id, err = op.getIdForSeq(s, tx, memTxn, t.TargetSequence.Number)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -138,11 +139,11 @@ func (op *genericOperation) getIdForSeq(
|
||||
var args []interface{}
|
||||
var number uint64
|
||||
|
||||
if r, ok := ref.(*vagrant_server.Ref_MachineOperationSeq); ok {
|
||||
if r, ok := ref.(*vagrant_server.Ref_TargetOperationSeq); ok {
|
||||
args = []interface{}{
|
||||
r.Machine.Project.Basis.ResourceId,
|
||||
r.Machine.Project.ResourceId,
|
||||
r.Machine.ResourceId,
|
||||
r.Target.Project.Basis.ResourceId,
|
||||
r.Target.Project.ResourceId,
|
||||
r.Target.ResourceId,
|
||||
r.Number,
|
||||
}
|
||||
number = r.Number
|
||||
@ -299,21 +300,21 @@ func (op *genericOperation) Latest(
|
||||
|
||||
var args []interface{}
|
||||
|
||||
if r, ok := ref.(*vagrant_server.Ref_Machine); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Target); ok {
|
||||
args = []interface{}{
|
||||
r.Project.Basis.ResourceId,
|
||||
r.Project.ResourceId,
|
||||
r.ResourceId,
|
||||
indexTimeLatest{},
|
||||
}
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Project); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Project); ok {
|
||||
args = []interface{}{
|
||||
r.Basis.ResourceId,
|
||||
r.ResourceId,
|
||||
"",
|
||||
indexTimeLatest{},
|
||||
}
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Basis); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Basis); ok {
|
||||
args = []interface{}{
|
||||
r.ResourceId,
|
||||
"",
|
||||
@ -410,11 +411,11 @@ func (op *genericOperation) dbPut(
|
||||
}
|
||||
|
||||
// Determine the type so we can default the put
|
||||
if r, ok := ref.(*vagrant_server.Ref_Machine); ok {
|
||||
_, err = s.machineGet(dbTxn, memTxn, r)
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Project); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Target); ok {
|
||||
_, err = s.targetGet(dbTxn, memTxn, r)
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Project); ok {
|
||||
_, err = s.projectGet(dbTxn, memTxn, r)
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Basis); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Basis); ok {
|
||||
_, err = s.basisGet(dbTxn, memTxn, r)
|
||||
} else {
|
||||
err = status.Error(codes.Internal,
|
||||
@ -485,7 +486,7 @@ func (op *genericOperation) dbPut(
|
||||
func (op *genericOperation) getSeq(ref interface{}) *uint64 {
|
||||
// Our ref can be a machine, project, or basis. Determine type and then
|
||||
// find sequence
|
||||
if r, ok := ref.(*vagrant_server.Ref_Machine); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Target); ok {
|
||||
// Machine operations are scoped to the project
|
||||
if op.seqProject == nil {
|
||||
op.seqProject = map[string]*uint64{}
|
||||
@ -498,7 +499,7 @@ func (op *genericOperation) getSeq(ref interface{}) *uint64 {
|
||||
op.seqProject[k] = seq
|
||||
}
|
||||
return seq
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Project); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Project); ok {
|
||||
if op.seqProject == nil {
|
||||
op.seqProject = map[string]*uint64{}
|
||||
}
|
||||
@ -510,7 +511,7 @@ func (op *genericOperation) getSeq(ref interface{}) *uint64 {
|
||||
op.seqProject[k] = seq
|
||||
}
|
||||
return seq
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Basis); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Basis); ok {
|
||||
if op.seqBasis == nil {
|
||||
op.seqBasis = map[string]*uint64{}
|
||||
}
|
||||
@ -600,15 +601,15 @@ func (op *genericOperation) indexPut(s *State, txn *memdb.Txn, value proto.Messa
|
||||
// Get any reference information we can extract from the operation
|
||||
var basis, project, machine string
|
||||
|
||||
if ref := op.valueField(value, "Machine").(*vagrant_server.Ref_Machine); ref != nil {
|
||||
if ref := op.valueField(value, "Machine").(*vagrant_plugin_sdk.Ref_Target); ref != nil {
|
||||
basis = ref.Project.Basis.ResourceId
|
||||
project = ref.Project.ResourceId
|
||||
machine = ref.ResourceId
|
||||
} else if ref := op.valueField(value, "Project").(*vagrant_server.Ref_Project); ref != nil {
|
||||
} else if ref := op.valueField(value, "Project").(*vagrant_plugin_sdk.Ref_Project); ref != nil {
|
||||
basis = ref.Basis.ResourceId
|
||||
project = ref.ResourceId
|
||||
} else {
|
||||
ref := op.valueField(value, "Basis").(*vagrant_server.Ref_Basis)
|
||||
ref := op.valueField(value, "Basis").(*vagrant_plugin_sdk.Ref_Basis)
|
||||
basis = ref.ResourceId
|
||||
}
|
||||
|
||||
@ -766,16 +767,16 @@ type operationIndexRecord struct {
|
||||
// this because we use LowerBound lookups in memdb and this may return
|
||||
// a non-matching value at a certain point after iteration.
|
||||
func (rec *operationIndexRecord) MatchRef(ref interface{}) bool {
|
||||
if r, ok := ref.(*vagrant_server.Ref_Machine); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Target); ok {
|
||||
return rec.Machine == r.ResourceId &&
|
||||
rec.Project == r.Project.ResourceId &&
|
||||
rec.Basis == r.Project.Basis.ResourceId
|
||||
}
|
||||
if r, ok := ref.(*vagrant_server.Ref_Project); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Project); ok {
|
||||
return rec.Project == r.ResourceId &&
|
||||
rec.Basis == r.Basis.ResourceId
|
||||
}
|
||||
if r, ok := ref.(*vagrant_server.Ref_Basis); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Basis); ok {
|
||||
return rec.Basis == r.ResourceId
|
||||
}
|
||||
return false
|
||||
@ -791,9 +792,9 @@ const (
|
||||
// listOperationsOptions are options that can be set for List calls on
|
||||
// operations for filtering and limiting the response.
|
||||
type listOperationsOptions struct {
|
||||
Basis *vagrant_server.Ref_Basis
|
||||
Project *vagrant_server.Ref_Project
|
||||
Machine *vagrant_server.Ref_Machine
|
||||
Basis *vagrant_plugin_sdk.Ref_Basis
|
||||
Project *vagrant_plugin_sdk.Ref_Project
|
||||
Machine *vagrant_plugin_sdk.Ref_Target
|
||||
Status []*vagrant_server.StatusFilter
|
||||
Order *vagrant_server.OperationOrder
|
||||
PhysicalState vagrant_server.Operation_PhysicalState
|
||||
@ -801,11 +802,11 @@ type listOperationsOptions struct {
|
||||
|
||||
func buildListOperationsOptions(ref interface{}, opts ...ListOperationOption) *listOperationsOptions {
|
||||
var result listOperationsOptions
|
||||
if r, ok := ref.(*vagrant_server.Ref_Basis); ok {
|
||||
if r, ok := ref.(*vagrant_plugin_sdk.Ref_Basis); ok {
|
||||
result.Basis = r
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Project); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Project); ok {
|
||||
result.Project = r
|
||||
} else if r, ok := ref.(*vagrant_server.Ref_Machine); ok {
|
||||
} else if r, ok := ref.(*vagrant_plugin_sdk.Ref_Target); ok {
|
||||
result.Machine = r
|
||||
} else {
|
||||
// TODO(spox): do something better here?
|
||||
@ -822,19 +823,19 @@ func buildListOperationsOptions(ref interface{}, opts ...ListOperationOption) *l
|
||||
// ListOperationOption is an exported type to set configuration for listing operations.
|
||||
type ListOperationOption func(opts *listOperationsOptions)
|
||||
|
||||
func ListWithBasis(b *vagrant_server.Ref_Basis) ListOperationOption {
|
||||
func ListWithBasis(b *vagrant_plugin_sdk.Ref_Basis) ListOperationOption {
|
||||
return func(opts *listOperationsOptions) {
|
||||
opts.Basis = b
|
||||
}
|
||||
}
|
||||
|
||||
func ListWithProject(p *vagrant_server.Ref_Project) ListOperationOption {
|
||||
func ListWithProject(p *vagrant_plugin_sdk.Ref_Project) ListOperationOption {
|
||||
return func(opts *listOperationsOptions) {
|
||||
opts.Project = p
|
||||
}
|
||||
}
|
||||
|
||||
func ListWithMachine(m *vagrant_server.Ref_Machine) ListOperationOption {
|
||||
func ListWithMachine(m *vagrant_plugin_sdk.Ref_Target) ListOperationOption {
|
||||
return func(opts *listOperationsOptions) {
|
||||
opts.Machine = m
|
||||
}
|
||||
|
||||
@ -15,6 +15,7 @@ import (
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/server/logbuffer"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
)
|
||||
@ -114,9 +115,9 @@ type jobIndex struct {
|
||||
|
||||
// The basis/project/machine that this job is part of. This is used
|
||||
// to determine if the job is blocked. See job_assigned.go for more details.
|
||||
Basis *vagrant_server.Ref_Basis
|
||||
Project *vagrant_server.Ref_Project
|
||||
Machine *vagrant_server.Ref_Machine
|
||||
Basis *vagrant_plugin_sdk.Ref_Basis
|
||||
Project *vagrant_plugin_sdk.Ref_Project
|
||||
Target *vagrant_plugin_sdk.Ref_Target
|
||||
|
||||
// QueueTime is the time that the job was queued.
|
||||
QueueTime time.Time
|
||||
@ -813,7 +814,7 @@ func (s *State) jobIndexSet(txn *memdb.Txn, id []byte, jobpb *vagrant_server.Job
|
||||
State: jobpb.State,
|
||||
Basis: jobpb.Basis,
|
||||
Project: jobpb.Project,
|
||||
Machine: jobpb.Machine,
|
||||
Target: jobpb.Target,
|
||||
OpType: reflect.TypeOf(jobpb.Operation),
|
||||
}
|
||||
|
||||
|
||||
@ -115,9 +115,9 @@ func (s *State) jobAssignedSet(memTxn *memdb.Txn, idx *jobIndex, assigned bool)
|
||||
}
|
||||
|
||||
func (s *State) jobAssignedIdxArgs(idx *jobIndex) []interface{} {
|
||||
if idx.Machine != nil {
|
||||
if idx.Target != nil {
|
||||
return []interface{}{
|
||||
idx.Machine.Project.Basis.ResourceId, idx.Machine.Project.ResourceId, idx.Machine.ResourceId,
|
||||
idx.Target.Project.Basis.ResourceId, idx.Target.Project.ResourceId, idx.Target.ResourceId,
|
||||
}
|
||||
} else if idx.Project != nil {
|
||||
return []interface{}{
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
serverptypes "github.com/hashicorp/vagrant/internal/server/ptypes"
|
||||
)
|
||||
@ -52,7 +53,7 @@ func (s *State) ProjectFind(p *vagrant_server.Project) (*vagrant_server.Project,
|
||||
}
|
||||
|
||||
// ProjectGet gets a project by reference.
|
||||
func (s *State) ProjectGet(ref *vagrant_server.Ref_Project) (*vagrant_server.Project, error) {
|
||||
func (s *State) ProjectGet(ref *vagrant_plugin_sdk.Ref_Project) (*vagrant_server.Project, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -68,7 +69,7 @@ func (s *State) ProjectGet(ref *vagrant_server.Ref_Project) (*vagrant_server.Pro
|
||||
// ProjectDelete deletes a project by reference. This is a complete data
|
||||
// delete. This will delete all operations associated with this project
|
||||
// as well.
|
||||
func (s *State) ProjectDelete(ref *vagrant_server.Ref_Project) error {
|
||||
func (s *State) ProjectDelete(ref *vagrant_plugin_sdk.Ref_Project) error {
|
||||
memTxn := s.inmem.Txn(true)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -85,7 +86,7 @@ func (s *State) ProjectDelete(ref *vagrant_server.Ref_Project) error {
|
||||
}
|
||||
|
||||
// ProjectList returns the list of projects.
|
||||
func (s *State) ProjectList() ([]*vagrant_server.Ref_Project, error) {
|
||||
func (s *State) ProjectList() ([]*vagrant_plugin_sdk.Ref_Project, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -134,7 +135,7 @@ func (s *State) projectFind(
|
||||
return nil, status.Errorf(codes.NotFound, "record not found for Project")
|
||||
}
|
||||
|
||||
return s.projectGet(dbTxn, memTxn, &vagrant_server.Ref_Project{
|
||||
return s.projectGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Project{
|
||||
ResourceId: match.Id,
|
||||
})
|
||||
}
|
||||
@ -147,7 +148,7 @@ func (s *State) projectPut(
|
||||
s.log.Trace("storing project", "project", value, "basis", value.Basis)
|
||||
|
||||
// Grab the stored project if it's available
|
||||
existProject, err := s.projectGet(dbTxn, memTxn, &vagrant_server.Ref_Project{
|
||||
existProject, err := s.projectGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Project{
|
||||
ResourceId: value.ResourceId,
|
||||
})
|
||||
if err != nil {
|
||||
@ -229,7 +230,7 @@ func (s *State) projectPut(
|
||||
func (s *State) projectGet(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Project,
|
||||
ref *vagrant_plugin_sdk.Ref_Project,
|
||||
) (*vagrant_server.Project, error) {
|
||||
var result vagrant_server.Project
|
||||
b := dbTxn.Bucket(projectBucket)
|
||||
@ -238,13 +239,13 @@ func (s *State) projectGet(
|
||||
|
||||
func (s *State) projectList(
|
||||
memTxn *memdb.Txn,
|
||||
) ([]*vagrant_server.Ref_Project, error) {
|
||||
) ([]*vagrant_plugin_sdk.Ref_Project, error) {
|
||||
iter, err := memTxn.Get(projectIndexTableName, projectIndexIdIndexName+"_prefix", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var result []*vagrant_server.Ref_Project
|
||||
var result []*vagrant_plugin_sdk.Ref_Project
|
||||
for {
|
||||
next := iter.Next()
|
||||
if next == nil {
|
||||
@ -252,7 +253,7 @@ func (s *State) projectList(
|
||||
}
|
||||
idx := next.(*projectIndexRecord)
|
||||
|
||||
result = append(result, &vagrant_server.Ref_Project{
|
||||
result = append(result, &vagrant_plugin_sdk.Ref_Project{
|
||||
ResourceId: idx.Id,
|
||||
Name: idx.Name,
|
||||
})
|
||||
@ -264,7 +265,7 @@ func (s *State) projectList(
|
||||
func (s *State) projectDelete(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Project,
|
||||
ref *vagrant_plugin_sdk.Ref_Project,
|
||||
) (err error) {
|
||||
p, err := s.projectGet(dbTxn, memTxn, ref)
|
||||
if err != nil {
|
||||
@ -272,8 +273,8 @@ func (s *State) projectDelete(
|
||||
}
|
||||
|
||||
// Start with scrubbing all the machines
|
||||
for _, m := range p.Machines {
|
||||
if err = s.machineDelete(dbTxn, memTxn, m); err != nil {
|
||||
for _, m := range p.Targets {
|
||||
if err = s.targetDelete(dbTxn, memTxn, m); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -378,7 +379,7 @@ func (s *State) newProjectIndexRecord(p *vagrant_server.Project) *projectIndexRe
|
||||
}
|
||||
}
|
||||
|
||||
func (s *State) newProjectIndexRecordByRef(ref *vagrant_server.Ref_Project) *projectIndexRecord {
|
||||
func (s *State) newProjectIndexRecordByRef(ref *vagrant_plugin_sdk.Ref_Project) *projectIndexRecord {
|
||||
return &projectIndexRecord{
|
||||
Id: ref.ResourceId,
|
||||
Name: strings.ToLower(ref.Name),
|
||||
@ -389,6 +390,6 @@ func (s *State) projectId(p *vagrant_server.Project) []byte {
|
||||
return []byte(p.ResourceId)
|
||||
}
|
||||
|
||||
func (s *State) projectIdByRef(ref *vagrant_server.Ref_Project) []byte {
|
||||
func (s *State) projectIdByRef(ref *vagrant_plugin_sdk.Ref_Project) []byte {
|
||||
return []byte(ref.ResourceId)
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
serverptypes "github.com/hashicorp/vagrant/internal/server/ptypes"
|
||||
)
|
||||
@ -48,7 +49,7 @@ func (s *State) TargetPut(target *vagrant_server.Target) (*vagrant_server.Target
|
||||
return target, err
|
||||
}
|
||||
|
||||
func (s *State) TargetDelete(ref *vagrant_server.Ref_Target) error {
|
||||
func (s *State) TargetDelete(ref *vagrant_plugin_sdk.Ref_Target) error {
|
||||
memTxn := s.inmem.Txn(true)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -62,7 +63,7 @@ func (s *State) TargetDelete(ref *vagrant_server.Ref_Target) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *State) TargetGet(ref *vagrant_server.Ref_Target) (*vagrant_server.Target, error) {
|
||||
func (s *State) TargetGet(ref *vagrant_plugin_sdk.Ref_Target) (*vagrant_server.Target, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -76,7 +77,7 @@ func (s *State) TargetGet(ref *vagrant_server.Ref_Target) (*vagrant_server.Targe
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *State) TargetList() ([]*vagrant_server.Ref_Target, error) {
|
||||
func (s *State) TargetList() ([]*vagrant_plugin_sdk.Ref_Target, error) {
|
||||
memTxn := s.inmem.Txn(false)
|
||||
defer memTxn.Abort()
|
||||
|
||||
@ -111,41 +112,31 @@ func (s *State) targetFind(
|
||||
match = raw.(*targetIndexRecord)
|
||||
}
|
||||
}
|
||||
// Finally try the target id
|
||||
if match == nil && req.TargetId != "" {
|
||||
if raw, err := memTxn.First(
|
||||
targetIndexTableName,
|
||||
targetIndexTargetIdIndexName,
|
||||
req.TargetId,
|
||||
); raw != nil && err == nil {
|
||||
match = raw.(*targetIndexRecord)
|
||||
}
|
||||
}
|
||||
|
||||
if match == nil {
|
||||
return nil, status.Errorf(codes.NotFound, "record not found for Target")
|
||||
}
|
||||
|
||||
return s.targetGet(dbTxn, memTxn, &vagrant_server.Ref_Target{
|
||||
return s.targetGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Target{
|
||||
ResourceId: match.Id,
|
||||
})
|
||||
}
|
||||
|
||||
func (s *State) targetList(
|
||||
memTxn *memdb.Txn,
|
||||
) ([]*vagrant_server.Ref_Target, error) {
|
||||
) ([]*vagrant_plugin_sdk.Ref_Target, error) {
|
||||
iter, err := memTxn.Get(targetIndexTableName, targetIndexIdIndexName+"_prefix", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var result []*vagrant_server.Ref_Target
|
||||
var result []*vagrant_plugin_sdk.Ref_Target
|
||||
for {
|
||||
next := iter.Next()
|
||||
if next == nil {
|
||||
break
|
||||
}
|
||||
result = append(result, &vagrant_server.Ref_Target{
|
||||
result = append(result, &vagrant_plugin_sdk.Ref_Target{
|
||||
ResourceId: next.(*targetIndexRecord).Id,
|
||||
Name: next.(*targetIndexRecord).Name,
|
||||
})
|
||||
@ -211,7 +202,7 @@ func (s *State) targetPut(
|
||||
func (s *State) targetGet(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Target,
|
||||
ref *vagrant_plugin_sdk.Ref_Target,
|
||||
) (*vagrant_server.Target, error) {
|
||||
var result vagrant_server.Target
|
||||
b := dbTxn.Bucket(targetBucket)
|
||||
@ -221,9 +212,9 @@ func (s *State) targetGet(
|
||||
func (s *State) targetDelete(
|
||||
dbTxn *bolt.Tx,
|
||||
memTxn *memdb.Txn,
|
||||
ref *vagrant_server.Ref_Target,
|
||||
ref *vagrant_plugin_sdk.Ref_Target,
|
||||
) (err error) {
|
||||
p, err := s.projectGet(dbTxn, memTxn, &vagrant_server.Ref_Project{ResourceId: ref.Project.ResourceId})
|
||||
p, err := s.projectGet(dbTxn, memTxn, &vagrant_plugin_sdk.Ref_Project{ResourceId: ref.Project.ResourceId})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -285,30 +276,19 @@ func targetIndexSchema() *memdb.TableSchema {
|
||||
Lowercase: true,
|
||||
},
|
||||
},
|
||||
targetIndexTargetIdIndexName: {
|
||||
Name: targetIndexTargetIdIndexName,
|
||||
AllowMissing: true,
|
||||
Unique: true,
|
||||
Indexer: &memdb.StringFieldIndex{
|
||||
Field: "TargetId",
|
||||
Lowercase: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
targetIndexIdIndexName = "id"
|
||||
targetIndexNameIndexName = "name"
|
||||
targetIndexTargetIdIndexName = "target-id"
|
||||
targetIndexTableName = "target-index"
|
||||
targetIndexIdIndexName = "id"
|
||||
targetIndexNameIndexName = "name"
|
||||
targetIndexTableName = "target-index"
|
||||
)
|
||||
|
||||
type targetIndexRecord struct {
|
||||
Id string // Resource ID
|
||||
Name string // Project Resource ID + Target Name
|
||||
TargetId string // Project Resource ID + Target ID (not target resource id)
|
||||
Id string // Resource ID
|
||||
Name string // Project Resource ID + Target Name
|
||||
}
|
||||
|
||||
func (s *State) newTargetIndexRecord(m *vagrant_server.Target) *targetIndexRecord {
|
||||
@ -316,13 +296,10 @@ func (s *State) newTargetIndexRecord(m *vagrant_server.Target) *targetIndexRecor
|
||||
Id: m.ResourceId,
|
||||
Name: strings.ToLower(m.Project.ResourceId + "+" + m.Name),
|
||||
}
|
||||
if m.Id != "" {
|
||||
i.TargetId = m.Project.ResourceId + "+" + m.Id
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func (s *State) newTargetIndexRecordByRef(ref *vagrant_server.Ref_Target) *targetIndexRecord {
|
||||
func (s *State) newTargetIndexRecordByRef(ref *vagrant_plugin_sdk.Ref_Target) *targetIndexRecord {
|
||||
return &targetIndexRecord{
|
||||
Id: ref.ResourceId,
|
||||
Name: strings.ToLower(ref.Project.ResourceId + "+" + ref.Name),
|
||||
@ -333,6 +310,6 @@ func (s *State) targetId(m *vagrant_server.Target) []byte {
|
||||
return []byte(m.ResourceId)
|
||||
}
|
||||
|
||||
func (s *State) targetIdByRef(m *vagrant_server.Ref_Target) []byte {
|
||||
func (s *State) targetIdByRef(m *vagrant_plugin_sdk.Ref_Target) []byte {
|
||||
return []byte(m.ResourceId)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user